Flutter InheritedWidget示例
flutter 示例
2023-09-27 14:27:34 时间
class InheritedWidgetComponent extends StatefulWidget {
const InheritedWidgetComponent({Key? key, required this.title})
: super(key: key);
final String title;
@override
State<InheritedWidgetComponent> createState() {
return InheritedWidgetState();
}
}
class InheritedWidgetState extends State<InheritedWidgetComponent> {
int count = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(widget.title)),
body: Center(
child: InheritedWidgetSidget(
data: count,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Padding(
padding: const EdgeInsets.only(bottom: 20),
child: Builder(builder: (context) {
return Text(
InheritedWidgetSidget.of(context)!.data.toString(),
style: const TextStyle(fontSize: 30));
}),
),
//用法二
Padding(
padding: const EdgeInsets.only(bottom: 20),
child: _TestWidget(),
),
],
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () => setState(() => ++count),
child: const Icon(Icons.add)),
);
}
}
class _TestWidget extends StatefulWidget {
@override
State<_TestWidget> createState() {
return _TestWidgetState();
}
}
class _TestWidgetState extends State<_TestWidget> {
@override
Widget build(BuildContext context) {
return Text(InheritedWidgetSidget.of(context)!.data.toString(),
style: const TextStyle(fontSize: 40));
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
print("didChangeDependencies");
}
}
class InheritedWidgetSidget extends InheritedWidget {
InheritedWidgetSidget({required this.data, required Widget child})
: super(child: child);
final int data; //需要在子树中共享的数据,保存点击次数
//定义方法,方便子树中的widget获取共享数据
static InheritedWidgetSidget? of(BuildContext context) {
return context.dependOnInheritedWidgetOfExactType<InheritedWidgetSidget>();
}
//该回调当data发生变化时,是否通知子树中依赖data的Widget
@override
bool updateShouldNotify(InheritedWidgetSidget oldWidget) {
//如果返回true,则子树中依赖(build函数中有调用)本widget
//的子widget的`state.didChangeDependencies`会被调用
return oldWidget.data != data;
}
}
相关文章
- Flutter开发之常用Widgets
- Flutter 集成uni-app
- Flutter 的setState与FutureBuilder及EasyRefresh示例
- Flutter easyrefresh示例 上拉加载+下拉刷新
- Flutter说:详解生命周期、状态管理及局部重绘(上)
- Flutter MaterialSliverAppBar示例
- Flutter GridView示例
- Flutter AnimatedList示例
- Flutter SingleChildScrollView的示例
- Flutter Scaffold、AppBar、BottomNavigationBar、SnackBar、Drawer示例
- Flutter容器组件示例
- Flutter 底部导航凸起效果
- flutter Dio示例
- Flutter DoneWidget示例
- Flutter 自定义CheckBox示例
- Flutter 渐变按钮示例
- flutter 特殊用法
- Flutter 组件通信(父子、兄弟)
- Flutter ListView如何添加HeaderView和FooterView
- Flutter打包
- Flutter获取全局context