每当点击列表时,我都想在另一页上设置TodaysMood属性。这是我使用导航器pushname来从另一页转到的第一页
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
},
);
},
));
}
}
答案 0 :(得分:0)
假设您要从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);
},
);
},
));
}
}
通过将函数作为参数传递,您可以更改或控制其他类的状态。
答案 1 :(得分:0)
要实现的目标可以通过Flutter的状态管理技术来实现。我建议您使用BLOC
。您可以从任何地方更改应用程序中任何活动的有状态小部件状态。您可以获取{ {3}}