【发布时间】:2022-04-28 00:49:00
【问题描述】:
当点击相应的菜单按钮时,小部件 TrainsPage 将添加到 main.dart 中的构建图。这会执行两次:一次是在 _routes 为空时,第二次是在 _routes 被填充时。
Widget pageSelector() {
if (_selectedIndex == 2) {
return new TrainsPage(routes: _routes);
} else
return Text("");
}
在 TrainsPage.dart 中,我有状态小部件 TrainsPage 的代码。
class TrainsPage extends StatefulWidget {
const TrainsPage({Key? key, required this.routes}) : super(key: key);
final List<RSRoute> routes;
@override
_TrainsPageState createState() => _TrainsPageState();
}
class _TrainsPageState extends State<TrainsPage> {
List<RSRoute> _routes = List.empty();
@override
void initState() {
super.initState();
this._routes = new List<RSRoute>.from(widget.routes);
现在,第二次,在 main.dart 中调用 TrainsPage(现在填充了 routes),_TrainsPageState 的 initState() 是未调用,它负责读取 routes 中的数据。由于 routes 第一次是空的,所以火车页面上没有显示任何内容。
为什么TrainsPage不重建_TrainsPageState,当它在构造函数中明确获得新数据时?
【问题讨论】:
-
init state 将在一种情况下被调用,如果它的参数已经改变,或者它假设在这个 Widget 中没有什么要更新的
-
@nitishk72 有没有办法强制 TrainsPage 重建 _TrainsPageState?我猜想在 Jetpack Compose 中将更改委托给小部件树的原则会起作用。在 Flutter 中是不是很相似?
-
只需将此
key: UniqueKey()添加到您的小部件TrainsPage(key: UniqueKey(), routes: routes)
标签: flutter