您需要访问 Flutters 生命周期方法并在应用恢复时触发回调。
您可以使用WidgetsBindingObserver 添加一个有状态小部件并将其放在您的Provider 范围内的某个位置,但作为您用于显示信息的任何小部件的父级。
或者你可以让你的PullToRefresh 小部件有状态并做同样的事情。
class LifeCycleWidget extends StatefulWidget {
@override
_LifeCycleWidgetState createState() => _LifeCycleWidgetState();
}
class _LifeCycleWidgetState extends State<LifeCycleWidget>
with WidgetsBindingObserver {
AppLifecycleState _appLifecycleState;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
refreshOnResume();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
setState(() {
_appLifecycleState = state;
});
refreshOnResume();
}
void refreshOnResume() {
if (_appLifecycleState == AppLifecycleState.resumed) {
print('resumed');
// your refresh method here
}
}
@override
Widget build(BuildContext context) {
return HomePage();
}
}
将以下内容添加到您的 main 方法中,如果它还没有的话。
WidgetsFlutterBinding.ensureInitialized();
不添加有状态小部件的另一种方法是使用GetX。您仍然可以保留所有 Provider 的东西,但只能使用提供生命周期方法的 SuperController。这我无法测试,因为我没有您的 Provider 代码,但您可能可以通过创建下面的类并在相关 Provider 小部件范围内的某处初始化控制器
Get.put(LifeCycleController());
然后调用onResumed覆盖中的函数,如果需要上下文,可以使用Get.context。
class LifeCycleController extends SuperController {
@override
void onDetached() {
debugPrint('on detached');
}
@override
void onInactive() {
debugPrint('on inactive');
}
@override
void onPaused() {
debugPrint('on pause');
}
@override
void onResumed() {
// your refresh function here. Access context with Get.context
debugPrint('on resume');
}
}