flutter 生命周期
一般是的是有状态的state
- StatefulWidget.createStaet()
- initState()
- didChangeDependencies (可结合inheritedWidget使用数据共享 会去执行build)
- build (didUpdateWidget 或 setState())都会再次执行build
- deactivate()
- dispose()
didChangeDependencies (细节)可以在这里做数据的处理或保存,自定义的MineData可以放在Home(home以下层级都可以共享)
didChangeDependencies 改变依赖关系 除了初始化的时候调用了一次,什么时候会再来呢??(updateShouldNotify 返回true时会执行)
import 'package:flutter/material.dart';
class InheritedDemo extends StatefulWidget {
const InheritedDemo({this.data,Key? key}) : super(key: key);
final int? data;
@override
State<InheritedDemo> createState() => _InheritedDemoState();
}
class _InheritedDemoState extends State<InheritedDemo> {
int data = 0;
@override
Widget build(BuildContext context) {
// 重要代码部分MineData的使用
return MineData(data: data,childWidget: const DependenciesWidget());
}
}
class MineData extends InheritedWidget {
int? data = 0;
// 情深的一句
MineData({this.data,required Widget childWidget}):super(child: childWidget);
// 定义一个便捷方法,使用此方法的widget都会回调updateShouldNotify执行didChangeDependencies方法
static MineData? mineOf(BuildContext context){
context.dependOnInheritedWidgetOfExactType<MineData>();
}
// 回调方法 data发生改变的时候通知子组组件依赖于MineData
@override
bool updateShouldNotify(covariant MineData oldWidget) {
// 新的data数据混入原来的不想等,即返回true
return oldWidget.data != data;
}
}
class DependenciesWidget extends StatefulWidget {
const DependenciesWidget({Key? key}) : super(key: key);
@override
State<DependenciesWidget> createState() => _DependenciesWidgetState();
}
class _DependenciesWidgetState extends State<DependenciesWidget> {
@override
Widget build(BuildContext context) {
return Container(
// 重要代码部分mineOf的使用
child: Text(MineData.mineOf(context)?.data.toString() ?? 'hello'),
);
}
@override
void didChangeDependencies() {
debugPrint('didChangeDependencies');
super.didChangeDependencies();
}
}
网友评论