InheritedWidget 共享数据_组件

InheritedWidget是Flutter中非常重要的一个功能型组件,它提供了一种数据在widget树中从上到下传递、共享的方式,比如我们在应用的根widget中通过InheritedWidget共享了一个数据,那么我们便可以在任意子widget中来获取该共享的数据!这个特性在一些需要在widget树中共享数据的场景中非常方便!如Flutter SDK中正是通过InheritedWidget来共享应用主题(Theme)和Locale (当前语言环境)信息的。

/// 自定义共享数据结构
class DataInheritedWidget extends InheritedWidget {
  DataInheritedWidget({@required this.data, @required Widget child})
      : super(child: child);
  int data = 0;

  static DataInheritedWidget getData(BuildContext context) {
    return context.dependOnInheritedWidgetOfExactType<DataInheritedWidget>();
  }

  @override
  bool updateShouldNotify(covariant DataInheritedWidget oldWidget) {
    return oldWidget.data != this.data;
  }
}
/// @description 作用:
/// @date: 2021/6/25
/// @author:lrs
class InheritedWidgetL extends StatefulWidget {
  InheritedWidgetL({Key key}) : super(key: key);

  @override
  _InheritedWidgetLState createState() => _InheritedWidgetLState();
}

class _InheritedWidgetLState extends State<InheritedWidgetL> {
  int number = 1;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("InheritedWidget"),
      ),
      //---------------------最外层使用组件------------------------
      body: DataInheritedWidget(
        data: number,
        child: ChildView(),
      ),
      floatingActionButton: FloatingActionButton(
          child: Icon(Icons.add),
          onPressed: () {
            setState(() {
              number++;
            });
          }),
    );
  }
}
class ChildView extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return new _ChildView();
  }
}

class _ChildView extends State<ChildView> {
  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    print("Dependencies change  --数据更新");
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text(
          //----------显示最上层共享数据-------------
          DataInheritedWidget.getData(context).data.toString(),
          style: TextStyle(fontSize: 20),
        ),
      ),
    );
  }
}
QQ录屏20210707092218202177922424.gif

apk下载地址

https://www.pgyer.com/IUVS
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容