はじめに
HookWidgetを利用していて、画面が復帰したときに再描画したい場合があり、CustomHooksを書いて見ました。
※https://pub.dev/packages/flutter_hooks/changelog#0181
にてすでに実装されていましたが、今回はCustom Fookを作って見たくて、実装して見ました。
動作環境
flutterSdkVersion": "2.5.3"
flutter_hooks: ^0.17.0
コード
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
AppLifecycleState? useAppLifecycleState(AppLifecycleState notifyState) {
return use(_LifeCycleState(notifyState));
}
class _LifeCycleState extends Hook<AppLifecycleState?> {
const _LifeCycleState(this.notifyState);
final AppLifecycleState notifyState;
@override
__LifeCycleState createState() => __LifeCycleState(notifyState);
}
class __LifeCycleState extends HookState<AppLifecycleState?, _LifeCycleState>
with WidgetsBindingObserver {
__LifeCycleState(this.notifyState);
AppLifecycleState? _theState;
AppLifecycleState notifyState;
@override
void initHook() {
super.initHook();
WidgetsBinding.instance!.addObserver(this);
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
if (notifyState == state) {
setState(() {
_theState = state;
});
}
}
@override
AppLifecycleState? build(BuildContext context) {
return _theState;
}
@override
void dispose() {
super.dispose();
WidgetsBinding.instance!.removeObserver(this);
}
}
class HookWidget extends HookWidget {
HookWidget({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
//resumeの時だけ通知する
useAppLifecycleState(AppLifecycleState.resumed);
return Container();
}
最後に
以下のrepositoryにも超便利なhooksが揃っていたりするので、利用したほうが
開発効率が上がりそうですね!
https://github.com/wasabeef/flutter_use
今回は自分でCustom Hookを作ってみました
アドバイスなどありましたら、是非よろしくお願いいたします!!