脚手架中的有状态小部件

时间:2018-10-03 16:58:33

标签: android dart flutter statefulwidget

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

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

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

我注意到:

  • 如果myPage扩展了statelessWidget一切正常,
  • 如果我具有扩展statefulWidget的不同页面类,则一切正常,
  • 但是如果我的myPage需要数据来更改内容,那么什么也没发生,它不会改变,它会停留在第一页上

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

这是错误还是我错过了什么?如果不是错误,该如何解决?预先感谢

更新:

我发布了另一个页面的代码,该页面更简单,在任何地方都存在此问题,这并不奇怪(我知道在此页面中我可以使用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 个答案:

答案 0 :(得分:2)

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

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