我的FutureBuilder在主屏幕上遇到了一个非常奇怪的问题,只有当我导航到其他页面时才会出现,然后它一直在重新加载(我已经通过在主屏幕上设置断点进行了验证)。
我相当肯定这不是未来构建者应该如何行动,甚至 * 为什么 * 它在一个循环中重新加载 * 只有 * 远离我的主屏幕?
概念:
1.我加载我的应用
1.主屏幕上的FutureBuilder按预期工作。它接收它的future,构建应用程序,就这样
1.我导航到另一个屏幕
1.我的主屏幕上的FutureBuilder突然又开始工作了,而且停不下来
我的主屏幕代码,这是一个Stateful
小工具:
@override
Widget build(BuildContext context) {
generateLayout(); // Assigns padding/spacing based on screen size
return MaterialApp(
title: 'Home Screen',
// This builder is here for routes needing an up-the-tree context
home: Builder(builder: (context) {
Future.delayed(Duration.zero, () {
// Shows disclosure on location usage
return showLocationDisclosureDetermination(context);
});
return Scaffold(
appBar: AppBar(
title: startScreenTitle('Location Alerts'),
),
body: FutureBuilder(
future: initFunctions(),
builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
if (snapshot.hasData) {
return startScreenBody(context);
} else {
return const Center(
child: CircularProgressIndicator(
color: Color(s_darkSalmon),
));
}
}),
);
}),
);
}
我的initFunctions()
代码:
Future<bool> initFunctions() async {
await sharedPreferencesLookUp(); // Getting Shared Preferences vars
await databaseLookUp(); // Doing a Firestore query
await locationServicesLookUp(); // Getting location services info
return true;
}
最后,我如何离开主屏幕:
return ElevatedButton(
onPressed: () async {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const SpecificScreen()),
);
},
child: Text('Go Right'));
2条答案
按热度按时间wfveoks01#
您可以尝试使用FutureBuilder连接状态:
46scxncf2#
请注意,这是一个黑客/变通方法,我是OP
对于任何在未来遇到这个问题的人,我找到了一个黑客/变通方法,希望能帮助你。注意,这并不能解决FutureBuilder反复触发的问题,但确实对用户隐藏了这种行为。
我在主屏幕上添加了一个bool,名为
_on_this_page
,让FutureBuilder函数initFunctions()
知道什么时候执行。下面是我在Navigator中如何做到这一点的,以使事情保持整洁。