2

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

目前我正在做的是将一个函数从父级传递给子级,该setState()函数在父级结束时调用该函数(请参阅下面的伪代码),但我正在寻找一种更强大的方法来做到这一点。

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(),然后导致父级再次查询 db 并更新视图。

在不使用提供程序的情况下,有没有更好的方法来做到这一点setState()?如何使用 say aChangeNotifierProvider通知数据库更改?或者有什么方法可以在数据库中的某些内容发生更改时通知父小部件,以便父小部件可以自行刷新?

谢谢你。

4

0 回答 0