使用flutter-provider从子窗口小部件更新父窗口小部件

时间:2019-09-04 16:10:38

标签: flutter dart flutter-provider

如何使用onTap更新子窗口小部件的父窗口小部件provider的状态

当前我正在做的是将函数从父级传递到子级,该函数在父级末尾调用setState()函数(请参阅下面的psuedocode),但我正在寻找一种更健壮的方法。

class ParentWidget extends StatefulWidget {
  @override
  _ParentWidgetState createState() => _ParentWidgetState();
}

class _ParentWidgetState extends State<ParentWidget> {

  _refresh() {
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      child: new ChildWidget(
        notifyParent: _refresh(),
      ),
    );
  }
}

class ChildWidget extends StatelessWidget {
  final Function notifyParent;
  ChildWidget({@required this.notifyParent});

  @override
  Widget build(BuildContext context) {
    return Container(
      child: new FlatButton(
          onPressed: notifyParent(), child: new Text("Update Parent")),
    );
  }
}

这是我最简单的表示问题的方式,父级setState()(在实际代码中)迫使父级小部件更新其视图。

在实际代码中,我让子窗口小部件处理db查询,单击子窗口小部件会更改db中的值,并且这些值将由父窗口小部件进行更新。因此,当我单击子窗口小部件时,它将更新数据库,然后调用notifyParent(),这将导致父窗口再次查询数据库并更新视图。

是否有一种更好的方法,而不通过使用提供程序使用setState()?如何使用说ChangeNotifierProvider来通知数据库更改?还是有什么方法可以在数据库中的某些内容发生更改时通知父窗口小部件,以便父窗口可以刷新自身?

谢谢。

0 个答案:

没有答案