首页 文章

Scaffold 身体中的状态小部件

提问于
浏览
0

我不明白为什么在颤动中不可能有这样的结构:

//...
Scaffold(
  //...
  body: myPage(dataList[index])
)
//...

其中 myPage 是一个扩展 statefulWidget 并返回 ListView 的类。它需要存储在数组中的数据参数。当我更改索引时,我想更改我的脚手架的主体,例如使用导航抽屉。

我注意到:

  • 如果 myPage 扩展 statelessWidget 一切正常,

  • 如果我有不同的页面类扩展 statefulWidget 一切正常,

  • 但是如果我的 myPage 需要数据才能更改内容,那么它就不会发生变化,它会保留在第一页上

是的,每当我更改索引时,我都使用 setState 方法刷新布局。

这是一个错误还是我错过了什么?如果它不是一个 bug,我可以做什么作为解决方法?提前致谢

更新:

我发布了另一个页面的代码更简单,没有任何奇怪的地方,无论如何这个问题(我知道在这个页面我可以使用 statelessWidget,但它应该工作无论如何):

class FirstFragment extends StatefulWidget {
  String data;
  FirstFragment(this.data);

  @override
  _FirstFragment createState() => new _FirstFragment(data);

}

class _FirstFragment extends State<FirstFragment>{
  String data;
  _FirstFragment(this.data);

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return new Center(
      child: new Text(data),
    );
  }
}

1 回答

  • 2

    您不应该将参数从父窗口小部件类传递到其状态 - 您可以通过“窗口小部件”指令访问它们。另外,听 Lint - 所有实例都应该是主类中的 final。

    class FirstFragment extends StatefulWidget {
      final String data;
      FirstFragment(this.data);
    
      @override
      _FirstFragment createState() => new _FirstFragment();
    
    }
    
    class _FirstFragment extends State<FirstFragment>{
    
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return new Center(
          child: new Text(widget.data),
        );
      }
    }
    

相关问题