Scaffold 主体中的有状态小部件
Stateful widget in Scaffold's body
我不明白为什么在 flutter 中不可能有这样的结构:
//...
Scaffold(
//...
body: myPage(dataList[index])
)
//...
其中 myPage 是一个 class 扩展 statefulWidget 和 returns 一个 ListView。它需要一个存储在数组中的数据参数。我想在更改索引时更改脚手架的主体,例如使用导航抽屉。
我注意到:
- 如果 myPage 扩展 statelessWidget 一切正常,
- 如果我有不同的页面 classes 扩展 statefulWidget 一切正常,
- 但如果我的 myPage 需要数据来更改内容,则不会发生任何变化,它不会更改,它会停留在第一页上
是的,每当我更改索引时,我都会使用 setState 方法刷新布局。
这是一个错误还是我遗漏了什么?如果这不是错误,我可以做些什么作为解决方法?提前致谢
更新:
我post另一个页面的代码更简单没有什么奇怪的地方无论如何都有这个问题(我知道在这个页面我可以使用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),
);
}
}
您不应将参数从父小部件 class 传递到其状态 - 您可以通过 "widget" 指令访问它们。另外,听听 Lint - 所有实例都应该在主 class.
中是最终的
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),
);
}
}
我不明白为什么在 flutter 中不可能有这样的结构:
//...
Scaffold(
//...
body: myPage(dataList[index])
)
//...
其中 myPage 是一个 class 扩展 statefulWidget 和 returns 一个 ListView。它需要一个存储在数组中的数据参数。我想在更改索引时更改脚手架的主体,例如使用导航抽屉。
我注意到:
- 如果 myPage 扩展 statelessWidget 一切正常,
- 如果我有不同的页面 classes 扩展 statefulWidget 一切正常,
- 但如果我的 myPage 需要数据来更改内容,则不会发生任何变化,它不会更改,它会停留在第一页上
是的,每当我更改索引时,我都会使用 setState 方法刷新布局。
这是一个错误还是我遗漏了什么?如果这不是错误,我可以做些什么作为解决方法?提前致谢
更新:
我post另一个页面的代码更简单没有什么奇怪的地方无论如何都有这个问题(我知道在这个页面我可以使用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),
);
}
}
您不应将参数从父小部件 class 传递到其状态 - 您可以通过 "widget" 指令访问它们。另外,听听 Lint - 所有实例都应该在主 class.
中是最终的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),
);
}
}