问题描述
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。如果我不使用该变量并在它可以工作的任何地方复制该代码。有什么解决办法吗?
解决方法
您需要将初始值放在 InitState 中。试试这个:
class _OrdersState extends State<Orders> {
late Map<String,List<Order>> queryResults;
@override
void initState() {
queryResults = defaultResponse;
super.initState();
}
apiCall(){
setState(() {
queryResults = resultFromAPI;
});
}