当按下主页按钮(中间 android 按钮)并且用户返回应用程序时,Flutter 进行 api 调用
Flutter Make api call when home button(middle android button) is pressed and user comes back on app
在我的应用程序中,我有从 Api 获取数据的屏幕,有时后端可以更新或更改 api 上的某些内容,因此如果用户正在使用该应用程序,并且用户按下主页按钮(中间的 android 按钮。圆圈)并稍后返回到应用程序,我没有看到正在更新的数据,因此没有进行 api 调用,但是当我按下返回键时按钮并返回应用程序 api 调用与我关闭应用程序并将其从打开的应用程序历史记录中删除并再次打开时相同,api 调用正在进行,所以我需要在按下主页按钮时发生同样的情况,用户通过按下主页按钮退出应用程序,返回并进行 api 调用。我查看了一下,有人告诉我我需要使用 WidgetsBindingObserver class。任何帮助将不胜感激,如果您需要 post.
的任何代码,请告诉我
我试过了,但没用
class _StopWorkingScreenState extends State<StopWorkingScreen>
with WidgetsBindingObserver {
late Future<Response> futureDataForStatus;
@override
void initState() {
super.initState();
futureDataForStatus = getLocationStatus();
WidgetsBinding.instance!.addObserver(this);
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
switch (state) {
case AppLifecycleState.inactive:
print("Inactive");
break;
case AppLifecycleState.paused:
print("Paused");
break;
case AppLifecycleState.resumed:
futureDataForStatus;
break;
}
}
您需要在 switch 运算符中调用该函数,而不仅仅是传递一个变量。
你可以这样做:
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
switch (state) {
...
case AppLifecycleState.resumed:
setState(() {
futureDataForStatus = getLocationStatus();
});
break;
}
}
这将在打开应用程序时更新状态并使用新数据重新加载视图(假设您使用 futureDataForStatus
作为页面某处 FutureBuilder 的未来。
在我的应用程序中,我有从 Api 获取数据的屏幕,有时后端可以更新或更改 api 上的某些内容,因此如果用户正在使用该应用程序,并且用户按下主页按钮(中间的 android 按钮。圆圈)并稍后返回到应用程序,我没有看到正在更新的数据,因此没有进行 api 调用,但是当我按下返回键时按钮并返回应用程序 api 调用与我关闭应用程序并将其从打开的应用程序历史记录中删除并再次打开时相同,api 调用正在进行,所以我需要在按下主页按钮时发生同样的情况,用户通过按下主页按钮退出应用程序,返回并进行 api 调用。我查看了一下,有人告诉我我需要使用 WidgetsBindingObserver class。任何帮助将不胜感激,如果您需要 post.
的任何代码,请告诉我我试过了,但没用
class _StopWorkingScreenState extends State<StopWorkingScreen>
with WidgetsBindingObserver {
late Future<Response> futureDataForStatus;
@override
void initState() {
super.initState();
futureDataForStatus = getLocationStatus();
WidgetsBinding.instance!.addObserver(this);
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
switch (state) {
case AppLifecycleState.inactive:
print("Inactive");
break;
case AppLifecycleState.paused:
print("Paused");
break;
case AppLifecycleState.resumed:
futureDataForStatus;
break;
}
}
您需要在 switch 运算符中调用该函数,而不仅仅是传递一个变量。
你可以这样做:
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
switch (state) {
...
case AppLifecycleState.resumed:
setState(() {
futureDataForStatus = getLocationStatus();
});
break;
}
}
这将在打开应用程序时更新状态并使用新数据重新加载视图(假设您使用 futureDataForStatus
作为页面某处 FutureBuilder 的未来。