InheritedWidget 共享數(shù)據(jù)_組件

InheritedWidget是Flutter中非常重要的一個功能型組件,它提供了一種數(shù)據(jù)在widget樹中從上到下傳遞、共享的方式,比如我們在應(yīng)用的根widget中通過InheritedWidget共享了一個數(shù)據(jù),那么我們便可以在任意子widget中來獲取該共享的數(shù)據(jù)!這個特性在一些需要在widget樹中共享數(shù)據(jù)的場景中非常方便!如Flutter SDK中正是通過InheritedWidget來共享應(yīng)用主題(Theme)和Locale (當(dāng)前語言環(huán)境)信息的。

/// 自定義共享數(shù)據(jù)結(jié)構(gòu)
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  --數(shù)據(jù)更新");
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text(
          //----------顯示最上層共享數(shù)據(jù)-------------
          DataInheritedWidget.getData(context).data.toString(),
          style: TextStyle(fontSize: 20),
        ),
      ),
    );
  }
}
QQ錄屏20210707092218202177922424.gif

apk下載地址

https://www.pgyer.com/IUVS
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容