flutter 的生命周期2 APP的状态

131 阅读1分钟

flutter 的生命周期2 APP的状态

WidgetsBindingObserver 是一个观察者模式的实现,用于观察 WidgetsBinding 对象的生命周期和状态变化。WidgetsBinding 是一个持有应用程序的 Element 树的类,它也是 Flutter 应用程序的根。

通过实现 WidgetsBindingObserver,你可以监听应用程序的生命周期事件,例如应用程序进入前台或后台,应用程序处于非活动状态等。以下是一个简单的示例,展示了如何使用 WidgetsBindingObserver

import 'package:flutter/material.dart';
​
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}
​
class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}
​
class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();
    // 注册观察者
    WidgetsBinding.instance!.addObserver(this);
  }
​
  @override
  void dispose() {
    // 移除观察者,防止内存泄漏
    WidgetsBinding.instance!.removeObserver(this);
    super.dispose();
  }
​
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    super.didChangeAppLifecycleState(state);
    // 处理应用程序生命周期变化
    switch (state) {
      case AppLifecycleState.resumed:
        print('App resumed');
        break;
      case AppLifecycleState.inactive:
        print('App inactive');
        break;
      case AppLifecycleState.paused:
        print('App paused');
        break;
      case AppLifecycleState.detached:
        print('App detached');
        break;
    }
  }
​
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('App Lifecycle Observer'),
      ),
      body: Center(
        child: Text('Hello Flutter'),
      ),
    );
  }
}
​

在这个例子中,_MyHomePageState 类混入了 WidgetsBindingObserver,并在 initState 方法中注册了观察者。通过重写 didChangeAppLifecycleState 方法,你可以在应用程序生命周期发生变化时执行相应的操作。在 dispose 方法中移除观察者,以避免内存泄漏。

以上示例演示了如何监听应用程序的生命周期变化,你可以根据实际需求在 didChangeAppLifecycleState 方法中添加特定的逻辑。