Flutter 如何从另一个StatefulWidget更新StatefulWidget页面?
每当点击列表时,我想从另一个页面设置属性todaysMood这里是我使用navigator pushnamed从另一个页面转到的第一个页面Flutter 如何从另一个StatefulWidget更新StatefulWidget页面?,flutter,flutter-layout,Flutter,Flutter Layout,每当点击列表时,我想从另一个页面设置属性todaysMood这里是我使用navigator pushnamed从另一个页面转到的第一个页面 class HomeState extends State<Home> with AfterLayoutMixin<Home> { int todaysMood = 5; int userType = 0; } 类HomeState使用AfterLayoutMixin扩展状态{ int todaysMood=5;
class HomeState extends State<Home> with AfterLayoutMixin<Home> {
int todaysMood = 5;
int userType = 0;
}
类HomeState使用AfterLayoutMixin扩展状态{
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
},
);
},
));
}
}
类状态扩展状态{
@凌驾
小部件构建(构建上下文){
最后的问题args=ModalRoute.of(context.settings.arguments);
//TODO:实现构建
返回脚手架(
appBar:appBar(
标题:文本(“评估”),
),
正文:ListView.builder(
itemCount:args.questions.length,
itemBuilder:(上下文,索引){
返回列表块(
标题:文本(参数问题[索引]),
onTap:(){
//更新第一页中的属性
},
);
},
));
}
}
假设您想从AssessState类更改用户类型
class HomeState extends State<Home> with AfterLayoutMixin<Home> {
int todaysMood = 5;
int userType = 0;
changeUserType(int type){
setState((){
userType = 1;
});
}
}
现在,获取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);
},
);
},
));
}
}
class扩展StatefulWidget{
const assessment(功能更改用户类型);
@凌驾
AssessState createState()=>AssessState();
}
类状态扩展状态{
@凌驾
小部件构建(构建上下文){
最后的问题args=ModalRoute.of(context.settings.arguments);
//TODO:实现构建
返回脚手架(
appBar:appBar(
标题:文本(“评估”),
),
正文:ListView.builder(
itemCount:args.questions.length,
itemBuilder:(上下文,索引){
返回列表块(
标题:文本(参数问题[索引]),
onTap:(){
//更新第一页中的属性
widget.changeUserType(1);
},
);
},
));
}
}
通过将函数作为参数传递,您可以更改或控制其他类的状态。您想要实现的目标可以通过颤振的状态管理技术来实现。我建议您使用
BLOC
。您可以从任何地方更改应用程序中任何活动的有状态小部件状态。您可以得到Jay的答案是可以接受的,但我认为这不是正确的方式,考虑使用AppState /全局状态。您可以在pub.dev上使用任何状态管理工具,如provider、rx、bloc等。您可以查看完整的文档。。。这是一个完整的架构
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);
},
);
},
));
}
}