如题
近期开发任务中,需要实现跳转到设置中打开某项权限,然后回到app的时候刷新我们的widget开关组件,就找类似android 中 我们的onResoum 就绪状态的生命周期进行页面的刷新
下面就是代码
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> with WidgetsBindingObserver{ //需要实现该方法WidgetsBindingObserver
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
super.dispose();
WidgetsBinding.instance.removeObserver(this);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Material App',
home: Scaffold(
appBar: AppBar(
title: Text('Material App Bar'),
),
body: Center(
child: Container(
child: Text('Hello World'),
),
),
),
);
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
switch (state) {
case AppLifecycleState.inactive:
// 应用程序处于闲置状态并且没有收到用户的输入事件。
//注意这个状态,在切换到后台时候会触发,所以流程应该是先冻结窗口,然后停止UI
break;
case AppLifecycleState.paused:
// 应用程序处于不可见状态
break;
case AppLifecycleState.resumed:
// 进入应用时候不会触发该状态
// 应用程序处于可见状态,并且可以响应用户的输入事件。它相当于 Android 中Activity的onResume。
break;
case AppLifecycleState.detached:
//当前页面即将退出
break;
}
}
///当前系统改变了一些访问性活动的回调
@override
void didChangeAccessibilityFeatures() {
super.didChangeAccessibilityFeatures();
}
///低内存回调
@override
void didHaveMemoryPressure() {
super.didHaveMemoryPressure();
}
///用户本地设置变化时调用,如系统语言改变
@override
void didChangeLocales(List<Locale> locale) {
super.didChangeLocales(locale);
}
///应用尺寸改变时回调,例如旋转
@override
void didChangeMetrics() {
super.didChangeMetrics();
Size size = WidgetsBinding.instance.window.physicalSize;
}
@override
Future<bool> didPopRoute() {//页面弹出
return Future.value(false);//true为拦截,false不拦截
}
@override
Future<bool> didPushRoute(String route) {
return Future.value(true);
}
@override
Future<bool> didPushRouteInformation(RouteInformation routeInformation) {
return Future.value(true);
}
//文字大小改变时候的监听
@override
void didChangeTextScaleFactor() {
}
@override
void didChangePlatformBrightness() {
final window = WidgetsBinding.instance.window;
final brightness = window.platformBrightness;
// Brightness.light 亮色
// Brightness.dark 暗色
// window.onPlatformBrightnessChanged = () {
// // This callback gets invoked every time brightness changes
// final brightness = window.platformBrightness;
// };
}
}
仅做记录