Android 如何在flatter中更新屏幕
我有一个颤振问题。 我想尝试更新我的屏幕后Android 如何在flatter中更新屏幕,android,ios,flutter,dart,Android,Ios,Flutter,Dart,我有一个颤振问题。 我想尝试更新我的屏幕后 setState(() => { widgetScreenBuilder = screenWidgets[currentScreen] }); 在我的类别选择器已被调用。我已经尝试过了,所以我有一个主屏幕,它有我的类别选择器的功能,然后我想有一个功能,当前的屏幕/小部件。然后,我可以通过更改功能来更改选择器下方的屏幕/小部件。在我更改了功能(类别选择器下面的小部件)后,我找不到刷新页面/主屏幕主体的方法 我的主屏幕: import 'pa
setState(() => {
widgetScreenBuilder = screenWidgets[currentScreen]
});
在我的类别选择器已被调用。我已经尝试过了,所以我有一个主屏幕,它有我的类别选择器的功能,然后我想有一个功能,当前的屏幕/小部件。然后,我可以通过更改功能来更改选择器下方的屏幕/小部件。在我更改了功能(类别选择器下面的小部件)后,我找不到刷新页面/主屏幕主体的方法
我的主屏幕:
import 'package:flutter/material.dart';
import 'package:app/widgets/categorySelector.dart';
import 'package:app/data/appData.dart';
class MainScreen extends StatefulWidget {
@override
_MainScreen createState() => _MainScreen();
}
class _MainScreen extends State<MainScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Theme.of(context).primaryColorDark,
appBar: AppBar(
backgroundColor: Theme.of(context).primaryColorDark,
elevation: 0.0,
title: Center(
child: Text(
"Tournaments",
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 26.0,
letterSpacing: 1.1
)
),
),
),
body: Column(
children: <Widget>[
CategorySelector(),
widgetScreenBuilder
],
),
);
}
}
我对应用程序开发、dart和Flifter是新手,因此任何帮助都将不胜感激!
谢谢我不能很好地理解你的问题, 但我认为你应该试试看
选中它:将您的MainScreen类更改为:
class MainScreen extends StatefulWidget {
@override
_MainScreen createState() => _MainScreen();
}
class _MainScreen extends State<MainScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Theme.of(context).primaryColorDark,
appBar: AppBar(
backgroundColor: Theme.of(context).primaryColorDark,
elevation: 0.0,
title: Center(
child: Text("Tournaments",
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 26.0,
letterSpacing: 1.1)),
),
),
body: CategorySelector(), // delete column and just put CategorySelector()
);
}
}
class CategorySelector extends StatefulWidget {
@override
_CategorySelectorState createState() => _CategorySelectorState();
}
class _CategorySelectorState extends State<CategorySelector> {
final List<String> categories = [
'All games',
'New game',
"New player",
"Top players"
];
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Container(
height: 75.0,
color: Theme.of(context).primaryColorDark,
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: categories.length,
itemBuilder: (BuildContext context, int index) {
return GestureDetector(
onTap: () {
if (currentScreen != index) {
currentScreen = index;
setState(
() =>
{widgetScreenBuilder = screenWidgets[currentScreen]},
);
}
},
child: Center(
child: Padding(
padding:
EdgeInsets.symmetric(horizontal: 20.0, vertical: 20.0),
child: Text(
categories[index],
style: TextStyle(
fontSize: 24.0,
fontWeight: FontWeight.bold,
letterSpacing: 1.2,
color: index == currentScreen
? Colors.white
: Colors.white54),
),
),
),
);
},
),
),
widgetScreenBuilder, // add widgetScreenBuilder here
],
);
}
}
class主屏幕扩展StatefulWidget{
@凌驾
_MainScreen createState()=>\u MainScreen();
}
类_主屏幕扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景色:主题。背景色。原色深,
appBar:appBar(
背景色:主题。背景色。原色深,
标高:0.0,
标题:中心(
子项:文本(“锦标赛”,
样式:TextStyle(
fontWeight:fontWeight.bold,
字体大小:26.0,
字母间距:1.1),
),
),
body:CategorySelector(),//删除列并仅放置CategorySelector()
);
}
}
并将您的CategorySelector类更改为:
class MainScreen extends StatefulWidget {
@override
_MainScreen createState() => _MainScreen();
}
class _MainScreen extends State<MainScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Theme.of(context).primaryColorDark,
appBar: AppBar(
backgroundColor: Theme.of(context).primaryColorDark,
elevation: 0.0,
title: Center(
child: Text("Tournaments",
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 26.0,
letterSpacing: 1.1)),
),
),
body: CategorySelector(), // delete column and just put CategorySelector()
);
}
}
class CategorySelector extends StatefulWidget {
@override
_CategorySelectorState createState() => _CategorySelectorState();
}
class _CategorySelectorState extends State<CategorySelector> {
final List<String> categories = [
'All games',
'New game',
"New player",
"Top players"
];
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Container(
height: 75.0,
color: Theme.of(context).primaryColorDark,
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: categories.length,
itemBuilder: (BuildContext context, int index) {
return GestureDetector(
onTap: () {
if (currentScreen != index) {
currentScreen = index;
setState(
() =>
{widgetScreenBuilder = screenWidgets[currentScreen]},
);
}
},
child: Center(
child: Padding(
padding:
EdgeInsets.symmetric(horizontal: 20.0, vertical: 20.0),
child: Text(
categories[index],
style: TextStyle(
fontSize: 24.0,
fontWeight: FontWeight.bold,
letterSpacing: 1.2,
color: index == currentScreen
? Colors.white
: Colors.white54),
),
),
),
);
},
),
),
widgetScreenBuilder, // add widgetScreenBuilder here
],
);
}
}
class CategorySelector扩展StatefulWidget{
@凌驾
_CategorySelectorState createState()=>U CategorySelectorState();
}
类_CategorySelectorState扩展状态{
最终名单类别=[
“所有游戏”,
“新游戏”,
“新玩家”,
“顶级球员”
];
@凌驾
小部件构建(构建上下文){
返回列(
儿童:[
容器(
身高:75.0,
颜色:主题。背景。原色深,
子项:ListView.builder(
滚动方向:轴水平,
itemCount:categories.length,
itemBuilder:(构建上下文,int索引){
返回手势检测器(
onTap:(){
如果(当前屏幕!=索引){
当前屏幕=索引;
设定状态(
() =>
{widgetScreenBuilder=screenWidgets[currentScreen]},
);
}
},
儿童:中心(
孩子:填充(
衬垫:
边缘组。对称(水平:20.0,垂直:20.0),
子:文本(
类别[索引],
样式:TextStyle(
字体大小:24.0,
fontWeight:fontWeight.bold,
字母间距:1.2,
颜色:索引==currentScreen
?颜色:白色
:颜色。白色54),
),
),
),
);
},
),
),
widgetScreenBuilder,//在此处添加widgetScreenBuilder
],
);
}
}
您的代码现在工作正常:)
setState()只能在自己的类中进行更改
我没有正确阅读问题,但我认为您正在尝试从CategorySelector更新主屏幕。如果是这样的话,这应该回答你: