扑扑的ListView里面的ChangeNotifierProvider

时间:2020-05-14 16:32:29

标签: flutter

class EventTimeModel with ChangeNotifier {
  update() {
      notifyListeners();
  }
}

class SingleEvent extends StatelessWidget {
  ...
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
          create: (BuildContext context2) => event.timeModel,
          child: buildEventColumn());
  }
}

class EventList extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
                itemCount: events.length,
                itemBuilder: (context, index) {
                  Event event = events[index];
                  return SingleEvent(event: event)
  }
}

EventList使用ListView显示多个SingleEvent。 SingleEvent使用ChangeNotifierProvider提供EventTimeModel。上下滚动时,我收到消息

Unhandled Exception: A EventTimeModel was used after being disposed. E/flutter (10215): Once you have called dispose() on a EventTimeModel, it can no longer be used.

因此,我认为一个事件已删除,因为它已经在屏幕之外了。当应再次显示该错误时,将引发该错误。我该如何解决?

1 个答案:

答案 0 :(得分:0)

由于timeModel存在,因此无法在此处使用create方法。

  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider.value(
          value: event.timeModel,
          child: buildEventColumn());
  }