Flutter Provider,使用子小部件来更新列表

时间:2020-07-14 15:54:51

标签: flutter dart provider

我是使用Flutter的新手,我现在正努力了解如何使用Provider包完成以下任务,或者甚至一开始是否是正确的实现。

我有一个小部件,其内部使用另一个小部件来更新时间值。

在父窗口小部件中,我具有以下内容:

class _AddTimesScreenState extends State<AddTimesScreen> {
 List<TimeOfDay> times = [];
 @override
  Widget build(BuildContext context) {
    return Scaffold(      
      body: Provider<List<TimeOfDay>>.value(
        value: times,
    child: SetTimes()

在第二个小部件中,该小部件用于通过使用我拥有的时间选择器来更新时间列表:

class _SetTimesState extends State<SetTimes> {
  @override
  Widget build(BuildContext context) {
    final times = Provider.of<List<TimeOfDay>>(context);

本质上,我的目标是能够更新第二个小部件中的时间列表,以便可以在第一个小部件中使用它。我有一些方法可以将TimeOfDay对象添加到列表中,但是运行代码时,第一个小部件中的列表似乎没有更新。

我是按预期的方式使用Provider还是完全误解了其应用程序?

谢谢

1 个答案:

答案 0 :(得分:1)

TimeOfDay 类中,确保您要使用Change Notifier对其进行扩展。

提供商如何知道它必须重建?

当类(在您的情况下为TimeOfDay)扩展ChangeNotifier时,将为您提供一个名为 notifylisteners()的方法,这将触发所有使用提供程序的小部件的重建。因此,您应该在更改类TimeOfDay中的对象数据的函数中调用此函数。

因此请确保您是

  • 在您的类/模型中扩展ChangeNotifier。
  • 更改数据时呼叫通知侦听器。

示例:

class MyClass extends ChangeNotifier{

int a = 0;

  addSomething(){
    //Here we are changing data
    a = a + 1;
    notifylisteners();
  }

}

让我知道这是否可以解决您的错误。