flutter_hooksのuseAppLifecycleState()もあるけど、
RiverpodのProvider内でも扱いたいなと思い、
いろいろ調べたときの備忘録(*´ω`*)
この記事がすごく参考になった!
AppLifecycleState
import 'package:flutter/material.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'app_lifecycle_provider.g.dart'; // providerの実装 @Riverpod(keepAlive: true) AppLifecycleState appLifecycle(AppLifecycleRef ref) { // WidgetsBindingObserverを用意 final observer = _AppLifecycleObserver( // うけっとたら、providerのstateに設定 (appLifecycleState) => ref.state = appLifecycleState, ); // widgetsBindingへobserverの追加 final widgetsBinding = WidgetsBinding.instance; widgetsBinding.addObserver(observer); // dispose時にobserverを削除 ref.onDispose(() => widgetsBinding.removeObserver(observer)); // 初期値はresumedにしておく return AppLifecycleState.resumed; } /// WidgetsBindingObserverの実装 class _AppLifecycleObserver extends WidgetsBindingObserver { final ValueChanged<AppLifecycleState> _didChangeAppLifecycle; _AppLifecycleObserver(this._didChangeAppLifecycle); @override void didChangeAppLifecycleState(AppLifecycleState state) { _didChangeAppLifecycle(state); super.didChangeAppLifecycleState(state); } }
Connectivity
ネットワークの接続状態を確認するconnectivity_plusもProvider化
こっちはすごくシンプル(*´ω`*)
import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'app_connectivity_provider.g.dart'; @riverpod Stream<List<ConnectivityResult>> connectivity(ConnectivityRef ref) => Connectivity().onConnectivityChanged;
以上!! これは便利だ。。(*´ω`*)