【发布时间】:2021-07-28 14:51:42
【问题描述】:
class _OrdersState extends State<Orders> {
Map<String, List<Order>> queryResults = defaultResponse;
apiCall(){
setState(() {
queryResults = resultFromAPI;
});
}
Widget build(BuildContext context) {
Widget homePage = OrdersHome(
futureOrders: queryResults["futureOrders"] ?? [],
newOrders: queryResults["newOrders"] ?? [],
processingOrders: queryResults["processingOrders"] ?? [],
readyOrders: queryResults["readyOrders"] ?? [],
);
print(queryResults["futureOrders"]);
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.white,
automaticallyImplyLeading: false,
title: Header(navigatorKey: navigatorKey),
),
body: Navigator(
key: navigatorKey,
initialRoute: curRoute,
onGenerateInitialRoutes: (navigator, name) {
return [
MaterialPageRoute(builder: (context) {
return homePage;
})
];
},
onGenerateRoute: (settings) {
if (routeName?.startsWith(RouteNames.ORDERS_PREFIX) ?? false) {
Widget page = homePage;
switch (routeName) {
case RouteNames.ORDERS_HOME:
page = homePage;
break;
// other routes
}
return MaterialPageRoute(builder: (context) {
return page;
});
} else {
print('route not found');
return MaterialPageRoute(builder: (context) {
return homePage;
});
}
},
),
);
}
}
我在多个地方使用 OrdersHome() 以避免代码重复,我将其声明为变量并在 UI 中使用变量。但是当状态更新时,传入的变量不会更新。print 语句显示状态已更新并再次调用 build。如果我不使用该变量并在它工作的任何地方复制该代码。有什么解决办法吗?
【问题讨论】:
-
您正在使用 setState 这就是它没有改变的原因。当你改变屏幕时,它会失去它的状态并恢复到默认值。因此,您必须使用 Provider、mobX、bloc、riverpod 等状态管理技术之一来克服这个问题。
标签: flutter dart widget flutter-layout