[我想在每当单击列表时就从另一页设置今天的今日属性,这是我使用导航器推入的另一页的第一页
class HomeState extends State<Home> with AfterLayoutMixin<Home> {
int todaysMood = 5;
int userType = 0;
}
这里是我的第二页
class AssessState extends State<Assess> {
@override
Widget build(BuildContext context) {
final Questions args = ModalRoute.of(context).settings.arguments;
// TODO: implement build
return Scaffold(
appBar: AppBar(
title: Text("Assess"),
),
body: ListView.builder(
itemCount: args.questions.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(args.questions[index]) ,
onTap: () {
//update attributes in first page here
},
);
},
));
}
}
假设您要从AssessState类更改userType,
class HomeState extends State<Home> with AfterLayoutMixin<Home> {
int todaysMood = 5;
int userType = 0;
changeUserType(int type){
setState((){
userType = 1;
});
}
}
当使用Assess()小部件时传递changeUserType()函数,>
Assess(changeUserType);
现在,在您的构造函数中获取changeUserType函数作为参数。
class Assess extends StatefulWidget { const Assess(Function changeUserType); @override AssessState createState() => AssessState(); } class AssessState extends State<Assess> { @override Widget build(BuildContext context) { final Questions args = ModalRoute.of(context).settings.arguments; // TODO: implement build return Scaffold( appBar: AppBar( title: Text("Assess"), ), body: ListView.builder( itemCount: args.questions.length, itemBuilder: (context, index) { return ListTile( title: Text(args.questions[index]) , onTap: () { //update attributes in first page here widget.changeUserType(1); }, ); }, )); } }
通过将函数作为参数传递,您可以更改或控制其他类的状态。
您要实现的目标可以通过Flutter的状态管理技术来完成。我建议您使用BLOC
。您可以从任何地方更改应用程序中任何活动的有状态小部件状态。您可以获取the full documentation here] >