我有一个flutter应用程序,具有redux状态管理功能。在我的应用程序中,当其他屏幕中的一些数据发生变化时,我想从服务器重新获取一些数据。但在我的应用程序中,我从屏幕1导航到屏幕2,并在屏幕2中更改了一些数据。我使用布尔标志needUpdate保存到redux,并在屏幕2中更改后设置为true。但当我导航回屏幕1时,我需要重新获取数据,如果标志是真的。但它没有工作,数据没有重新获取。
下面是一些代码:
class FirstScreen extends StatefulWidget {
const FirstScreen({Key? key}) : super(key: key);
@override
State<StatefulWidget> createState() => _FirstScreenState();
}
class _FirstScreenState extends State<FirstScreen> {
@override
void initState() {
super.initState();
}
@override
void didChangeDependencies() async {
final store = StoreProvider.of<AppState>(context);
var needUpdate = store.state.commonState?.needUpdate.value ?? false;
if (needUpdate) {
await store.dispatch(prepareData(context));
}
}
@override
Widget build(BuildContext context) {}
}
class SecondScreen extends StatefulWidget {
const SecondScreen({Key? key}) : super(key: key);
@override
State<SecondScreen> createState() => _SecondScreenState();
}
class _SecondScreenState extends State<SecondScreen> {
@override
void initState() {
super.initState();
}
void onPress() async {
await store.dispatch(ChangeNeedUpdatePortfolio(true));
Navigator.pop(context);
}
@override
Widget build(BuildContext context) {}
}
下面是我的行动:
ThunkAction<AppState> updatePortfolioData(BuildContext context) {
return (Store<AppState> store) async {
bool needUpdate = store.state.commonState?.needUpdate.value ?? false;
if (needUpdate) {
...
await store.dispatch(ChangeNeedUpdatePortfolio(false));
...
return;
}
};
}
1条答案
按热度按时间t5fffqht1#
您可以尝试使用StoreConnector的onInit属性在显示屏幕时加载初始数据,如下所示:
对于屏幕,你有两个选择。
选项1:使用PushReplacement在这两个屏幕之间导航。这将确保数据更新,因为每当屏幕更新时都会调用onInit。
选项2:当您从第二个屏幕返回时,从第一个屏幕调用函数。