Ошибки выбрасывания провайдера в InitState. Provider.of<SomeProvider> (контекст)

Как получить доступ к контексту для провайдера в initState

Я получаю ошибку

flutter: The following assertion was thrown building Builder:
flutter: inheritFromWidgetOfExactType(_Provider<ProductProvider>) or inheritFromElement() was called before
flutter: _ProductDetailsPageState.initState() completed.

Всякий раз, когда я запускаю код ниже

if (Provider.of<ProductProvider>(context).selectedProduct == null) {
      product = Product();
      product.isReturnable = true;
      product.isActive = true;
      product.premiumType = "None Selected";
      product.category = 'None Selected';
      product.principal = 'None Selected';
    } else {
      product = Provider.of<ProductProvider>(context).selectedProduct;
    }

NB. Приведенный выше код работал отлично, когда я использовал модель Scoped, однако пользователь, модель поставщика и пакет, выдает исключение.

Что мне нужно для доступа к провайдеру перед процессом сборки, потому что содержимое провайдера необходимо для построения пользовательского интерфейса.

2 ответа

Provider.of<ProductProvider>(context, listen: false).selectedProduct и убедитесь, что в вызове initState нет NotifyListeners.

Попробуйте отложить этот звонок с Future.delayed(...)

Используйте Саймона AfterLayoutpackage https://pub.dev/packages/after_layout и вызовите его в функции, которую необходимо реализовать. Он будет вызываться послеBuild() был запущен

Другие вопросы по тегам