ChangeNotifierProxyProvider0 возвращает ошибку Failed assertion: строка 125 pos 28: 'value.hasListeners! = True': неверно - PullRequest
0 голосов
/ 07 августа 2020

Я не могу использовать ChangeNotifierProxyProvider.

У меня есть StreamBuilder (список элементов), и мне нужно обновить один элемент, когда что-то изменится. Это часть виджета с ChangeNotifierProxyProvider:

return StreamBuilder<List<MyItem>>(
  stream: _listStream,
  builder: (context, snapshot) {
    switch (snapshot.connectionState) {
      case ConnectionState.waiting:
        return CircularProgressIndicator(strokeWidth: 3.0);
        break;
      default:
        if (snapshot.hasData && snapshot.data.length > 0) {
          return ListView.builder(
            padding: EdgeInsets.all(10.0),
            controller: _controller,
            itemCount: snapshot.data.length + 1,
            itemBuilder: (context, index) {
              return index >= snapshot.data.length
                  ? CircularProgressIndicator(strokeWidth: 3.0)
                  : ChangeNotifierProxyProvider0<MyItem>(
                create: (context) => snapshot.data[index],
                update: (_, item) => item,
                child: Consumer<MyItem>(
                  builder: (_, value, __) {
                    return ListTile(title: value.title);
                  },
                ),
              );
            },
          );
        } else {
          return Container();
        }
    }
  },
);

Это MyItem:

class MyItem with ChangeNotifier {
    String title;

    void changeTitle(newT) {
        title = newT;
        notifyListeners();
    }
}

В другой части приложения я вызываю функцию myItem.changeTitle.

Я получаю следующую ошибку:

Было выбрано другое исключение: 'package: provider / src / listenable_provider.dart': Неудачное утверждение: строка 125 pos 28: 'value.hasListeners! = true ': неверно.

Следующее утверждение было выдано при построении Consumer <> (dirty, dependencies: [_InheritedProviderScope <>]):

UPDATE Кажется, это ошибка:

════════ Исключение, обнаруженное библиотекой виджетов ═════════════════════ ════════════════════════════════. MyItem использовался после удаления.

Встречается в строке Consumer определение

...