设为首页 加入收藏

TOP

Flutter学习笔记(27)--数据共享(InheritedWidget)(二)
2019-09-26 18:14:36 】 浏览:88
Tags:Flutter 学习 笔记 数据 共享 InheritedWidget
作didChangeDependencies

class ChildWidget extends StatefulWidget {
  @override
  _ChildWidgetState createState() => _ChildWidgetState();
}

class _ChildWidgetState extends State<ChildWidget> {
  @override
  Widget build(BuildContext context) {
    return new Text(FatherWidget.getData(context).data.toString());
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    //父或祖先widget中的InheritedWidget改变(updateShouldNotify返回true)时会被调用
    //如果build中没有依赖InheritedWidget,则此回调不会被调用
    print("didChangeDependencies = " +
        FatherWidget.getData(context).data.toString());
  }
}

3.FahterWidget和ChildWidget产生依赖关系

  //子树通过该方法获取共享数据
  static FatherWidget getData(BuildContext context) {
    return context.inheritFromWidgetOfExactType(FatherWidget);
  }

 

4.数据更新,通过setState来重新build

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _MyAppState();
  }
}

class _MyAppState extends State<MyApp> {
  int count = 0;

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'title',
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text('title'),
        ),
        body: new Center(
          child: FatherWidget(
            data: count,
            child: new Column(
              children: <Widget>[
                ChildWidget(),
                new FloatingActionButton(onPressed: _changeCount,child: new Icon(Icons.adjust),),
              ],
            ),
          ),
        ),
      ),
    );
  }

  _changeCount() {
    setState(() {
      ++count;
      print('mCount == ' + count.toString());
    });
  }
}

 

最后需要注意一点,上面说到的依赖前提是两个组件是父、子的关系,我试了一下,如果FatherWidget中没有ChildWidget,只是单纯的使用了FatherWidget的数据的话,是不会触发didChangeDependencies回调的!!!

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Jetpack系列:LiveData入门级使用.. 下一篇Android MediaPlayer 音频倍速播..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目