Flutter 如何从另一个StatefulWidget更新StatefulWidget页面?

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;

每当点击列表时,我想从另一个页面设置属性todaysMood这里是我使用navigator pushnamed从另一个页面转到的第一个页面

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);
          },
        );
      },
    ));
  }
 }