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

问题描述 投票:0回答:2

[我想在每当单击列表时就从另一页设置今天的今日属性,这是我使用导航器推入的另一页的第一页

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
          },
        );
      },
    ));
  }
 }
flutter flutter-layout
2个回答
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);
          },
        );
      },
    ));
  }
 }

通过将函数作为参数传递,您可以更改或控制其他类的状态。


0
投票

您要实现的目标可以通过Flutter的状态管理技术来完成。我建议您使用BLOC。您可以从任何地方更改应用程序中任何活动的有状态小部件状态。您可以获取the full documentation here] >

© www.soinside.com 2019 - 2024. All rights reserved.