Flutter生命周期管理插件lifecycle_lite的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

Flutter生命周期管理插件lifecycle_lite的使用

通过简单几步,就可以让你使用whenShow()/whenHide()方法来监听页面的生命周期(退回到了该页面/打开其他页面挡着了该页面)了。

原理

这个库的实现很简单,你完全可以通过阅读代码后自己扩展实现。主要就是在MaterialApp中添加一个对路由的监听,也就是MaterialApp#navigatorObservers,之后通过对路由的监听来记录一个路由的栈。再在对应的State#initState方法或StatelessWidget#createElement中绑定两个生命周期方法的实现到最上层路由。这样在每次监听到路由变化时,去调用顶层路由对应的绑定方法就OK了。记得在路由被移出的时候对应的方法也要移出哦~

开始使用

import 'package:lifecycle/lifecycle_mixin.dart';
  1. 首先在你的根布局MaterialApp中绑定一个路由监听LifeNavigatorObserver().

    MaterialApp(
        navigatorObservers: [
            LifeNavigatorObserver(),
        ],
    );
    
  2. StatefulWidget的话,需要混入LifecycleStatefulMixin,对应的StatelessWidget,使用的是LifecycleStatelessMixin.

  3. 实现whenShow()/whenHide()方法,代码看起来是下面的样子。

    /// StatefulWidget页面
    class WorksDetailState extends State with LifecycleStatefulMixin {
    
        [@override](/user/override)
        void whenShow() {
            super.whenShow();
            print("LifeNavigatorObserver---Show了");
        }
    
        [@override](/user/override)
        void whenHide() {
            super.whenHide();
            print("LifeNavigatorObserver---Hide了");
        }
    }
    
    /// StatelessWidget页面
    class StatelessPage extends StatelessWidget with LifecycleStatelessMixin {
    
        [@override](/user/override)
        void whenShow() {
            super.whenShow();
            print("LifeNavigatorObserver---Show了");
        }
    
        [@override](/user/override)
        void whenHide() {
            super.whenHide();
            print("LifeNavigatorObserver---Hide了");
        }
    }
    

完整示例Demo

以下是一个完整的示例,展示了如何使用lifecycle_lite插件来监听页面的生命周期。

main.dart

import 'package:flutter/material.dart';
import 'package:lifecycle/lifecycle_mixin.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Lifecycle Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Lifecycle Demo Home Page'),
      navigatorObservers: [
        LifeNavigatorObserver(),
      ],
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> with LifecycleStatefulMixin {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  [@override](/user/override)
  void whenShow() {
    super.whenShow();
    print("LifeNavigatorObserver---Show了");
  }

  [@override](/user/override)
  void whenHide() {
    super.whenHide();
    print("LifeNavigatorObserver---Hide了");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

stateless_page.dart

import 'package:flutter/material.dart';
import 'package:lifecycle/lifecycle_mixin.dart';

class StatelessPage extends StatelessWidget with LifecycleStatelessMixin {
  [@override](/user/override)
  void whenShow() {
    super.whenShow();
    print("LifeNavigatorObserver---Show了");
  }

  [@override](/user/override)
  void whenHide() {
    super.whenHide();
    print("LifeNavigatorObserver---Hide了");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Stateless Page'),
      ),
      body: Center(
        child: Text('This is a Stateless Page'),
      ),
    );
  }
}

更多关于Flutter生命周期管理插件lifecycle_lite的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter生命周期管理插件lifecycle_lite的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter应用中使用lifecycle_lite插件来管理生命周期事件的示例代码。lifecycle_lite插件允许你监听Flutter引擎的生命周期事件,比如暂停、恢复等。这在管理资源、控制后台任务等方面非常有用。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加lifecycle_lite依赖:

dependencies:
  flutter:
    sdk: flutter
  lifecycle_lite: ^0.4.0  # 请检查最新版本号

然后运行flutter pub get来安装依赖。

2. 导入插件

在你的Dart文件中导入lifecycle_lite插件:

import 'package:flutter/material.dart';
import 'package:lifecycle_lite/lifecycle_lite.dart';

3. 使用插件监听生命周期事件

下面是一个简单的示例,展示了如何使用LifecycleListener来监听应用的生命周期事件:

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Lifecycle Lite Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver {
  final LifecycleController _lifecycleController = LifecycleController();

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance!.addObserver(this);

    // 监听生命周期事件
    _lifecycleController.addListener(() {
      final LifecycleState state = _lifecycleController.state;
      if (state == LifecycleState.resumed) {
        print("App is resumed");
      } else if (state == LifecycleState.inactive) {
        print("App is inactive");
      } else if (state == LifecycleState.paused) {
        print("App is paused");
      } else if (state == LifecycleState.detached) {
        print("App is detached");
      }
    });
  }

  @override
  void dispose() {
    WidgetsBinding.instance!.removeObserver(this);
    _lifecycleController.dispose();
    super.dispose();
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    // 你也可以直接使用WidgetsBindingObserver来监听应用生命周期
    if (state == AppLifecycleState.resumed) {
      print("AppLifecycleState resumed");
    } else if (state == AppLifecycleState.inactive) {
      print("AppLifecycleState inactive");
    } else if (state == AppLifecycleState.paused) {
      print("AppLifecycleState paused");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Lifecycle Lite Demo'),
      ),
      body: Center(
        child: Text('Check console for lifecycle events'),
      ),
    );
  }
}

解释

  1. 添加依赖和导入插件:首先在pubspec.yaml中添加依赖,并在你的Dart文件中导入插件。
  2. 创建LifecycleController实例:在_MyHomePageState类中创建一个LifecycleController实例。
  3. 监听生命周期事件:使用addListener方法来监听生命周期事件,并在回调中处理不同的事件状态。
  4. 使用WidgetsBindingObserver:你也可以直接使用WidgetsBindingObserver来监听应用的生命周期状态变化,这在某些情况下可能更简便。
  5. 清理资源:在dispose方法中移除观察者并释放LifecycleController资源。

这样,你就可以在Flutter应用中使用lifecycle_lite插件来管理生命周期事件了。希望这个示例对你有所帮助!

回到顶部