MarcS82
MarcS82

Reputation: 2517

ChangeNotifierProvider inside ListView in 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 uses a ListView to display mutliple SingleEvents. SingleEvent uses a ChangeNotifierProvider to provide EventTimeModel. When scrolling up and down I got the message

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.

So I think an event was deleted because it has been outside the screen. When it should be displayed again the error was thrown. How can I fix this?

Upvotes: 1

Views: 599

Answers (1)

MarcS82
MarcS82

Reputation: 2517

Since timeModel exists the create method can't be used here.

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

Upvotes: 1

Related Questions