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

时间:2019-12-25 11:16:56

标签: flutter flutter-layout

每当点击列表时,我都想在另一页上设置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
          },
        );
      },
    ));
  }
 }

2 个答案:

答案 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}}