flutter - 如何通过另一个类的方法设置状态

标签 flutter dart

使用 Flutter 并尝试将 Widget 移出到另一个类以保持模块化。 问题是其中一个内部 Widget 有一个 setState。但是当我将它移到另一个类时,它是无效的,因为它不是有状态的。最初想到传入一个函数并将其替换为 setState 函数本身,但这似乎不起作用。我该如何解决这个问题?

当前方法运行良好。我计划将第 6 行(child:Center)中的所有内容移到另一个类,因为这将通过 PageView 重复。将这一页滑动到下一页,每页看起来都一样,只有文字发生了变化。

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.tealAccent,
      body: SafeArea(
        child: Center(
          child: Padding(
            padding: const EdgeInsets.all(16.0),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              crossAxisAlignment: CrossAxisAlignment.center,
              children: <Widget>[
                Text(
                  "Did you hear about the claustrophobic astronaut?",
                  style: TextStyle(
                    fontSize: 20,
                  ),
                ),
                Text(
                  "He just needed a little space.",
                  style: TextStyle(
                    fontSize: 20,
                  ),
                ),
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: <Widget>[
                    GestureDetector(
                      child: Icon(heartStatus),
                      onTap: () {
                        setState(() {
                          if (heartStatus == FontAwesomeIcons.heart) {
                            heartStatus = FontAwesomeIcons.solidHeart;
                          } else {
                            heartStatus = FontAwesomeIcons.heart;
                          }
                        });
                      },
                    ),
                    GestureDetector(
                      child: Icon(FontAwesomeIcons.shareAlt),
                      onTap: (){
                        print('shared');
                      },
                    ),
                  ],
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }

这是在将它移到另一个类之后,因为设置状态在这里无效,所以无法正常工作。在这里传入函数会抛出错误 -> 不必要的语句

Widget getPageData(Function function){
  IconData heartStatus = FontAwesomeIcons.heart;

  return Center(
    child: Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: <Widget>[
          Text(
            "Did you hear about the claustrophobic astronaut?",
            style: TextStyle(
              fontSize: 20,
            ),
          ),
          Text(
            "He just needed a little space.",
            style: TextStyle(
              fontSize: 20,
            ),
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: <Widget>[
              GestureDetector(
                child: Icon(heartStatus),
                onTap: () {
                  setState(() {
                    //tried passing in function here
                    if (heartStatus == FontAwesomeIcons.heart) {
                      heartStatus = FontAwesomeIcons.solidHeart;
                    } else {
                      heartStatus = FontAwesomeIcons.heart;
                    }
                  });
                },
              ),
              GestureDetector(
                child: Icon(FontAwesomeIcons.shareAlt),
                onTap: (){
                  print('shared');
                },
              ),
            ],
          ),
        ],
      ),
    ),
  );
}

最佳答案

你可以改变你的函数:

Widget getPageData(Function function){...}

自定义小部件

class CustomizeWidget extend StatefulWidget{

}
class _CustomizeWidgetState extend State<StatefulWidget>{
   /// in the build function, you can call setState
}

关于flutter - 如何通过另一个类的方法设置状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57449851/

相关文章:

dart - FutureBuilder Flutter 中未处理的异常

dart - 观看Dart中的文件更改

flutter - 将其初始化为 dart 中的最终变量

flutter - 在按下的按钮上推送通知 Flutter

dart - 类型 'Future<dynamic>' 不是类型 'Future<int>' 的子类型 flutter 数据库创建异常

使用 ImageShader 的 Flutter ShaderMask

flutter - 如何在 flutter 上使用信用卡 Visa 和 Mastercard 付款?

flutter - 即使关闭我的应用程序,也可以在后台运行dart代码

flutter - 为什么我的步进器不断产生Null输出? flutter

flutter - Gradle包装器构建问题