美文网首页flutter
InheritedWidget 共享数据_组件

InheritedWidget 共享数据_组件

作者: 卢融霜 | 来源:发表于2021-07-08 09:39 被阅读0次

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

相关文章

网友评论

    本文标题:InheritedWidget 共享数据_组件

    本文链接:https://www.haomeiwen.com/subject/teqiultx.html