【问题标题】:Flutter Provider, using child widget to update a listFlutter Provider,使用子小部件更新列表
【发布时间】:2020-11-04 00:30:48
【问题描述】:

我是使用 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,还是完全误解了它的应用?

谢谢

【问题讨论】:

  • 尝试使用 Consumer 的 ChangeNotifierProvider

标签: flutter dart provider


【解决方案1】:

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

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

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

所以请确保您是:

  • 在您的类/模型中扩展 ChangeNotifier。
  • 当数据改变时调用 notifylisteners。

例子:

class MyClass extends ChangeNotifier{

int a = 0;

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

}

如果这能解决您的错误,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-08
    • 2018-11-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 2021-06-18
    • 2021-11-02
    • 2020-04-08
    相关资源
    最近更新 更多