知识FlutterFlutter-InheritedWidget
Kahvia
- flutter中用于数据共享的组件。
- 创建自定义类,继承 InheritedWidget ,用这个自定义类的组件实例包裹子组件,使得子组件及其后代都可以访问自定义类实例中的共享数据。
自定义类
使用 inh 简写快速生成自定义类并继承数据共享组件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class WaitingData extends InheritedWidget { final String name; const WaitingData({ Key? key, required Widget child, required this.name }) : super(key: key, child: child);
static WaitingData of(BuildContext context) { final WaitingData? result = context.dependOnInheritedWidgetOfExactType<WaitingData>(); assert(result != null, 'No WaitingData found in context'); return result!; }
@override bool updateShouldNotify(WaitingData old) { return true; } }
|
自定义类实例的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| class MyPage extends StatefulWidget { const MyPage({Key? key}) : super(key: key); @override State<MyPage> createState() => _MyPageState(); }
class _MyPageState extends State<MyPage> {
@override Widget build(BuildContext context) { return WaitingData( name: "Kahvia!", child: Builder( builder: (BuildContext centerContext){ return Center( child: Text( "Hello,${WaitingData.of(centerContext).name}", style: const TextStyle( fontSize: 25, color: Colors.blue ), ), ); } ) ); } }
|
注意事项
- 明确上下文(context),想要获取共享数据,就需要使用共享数据组件的子组件的上下文
- 获取上下文可以用Builder()