Я пытаюсь использовать поставщика с шаблоном, но Provider.of, похоже, не работает.
Журналы:
══╡ ИСКЛЮЧЕНИЕ, ЗАЯВЛЕННОЕ БИБЛИОТЕКОЙ ВИДЖЕТОВ ╞════════════════════════════════════════ ══════════════════ При построении MyChildWidget (грязный) возникла следующая ошибка ProviderNotFoundError: Ошибка: не удалось найти правильный поставщик над этим виджетом MyChildWidget
Чтобы исправить, пожалуйста:
- Убедитесь, что поставщик является предком этого виджета MyChildWidget.
- Предоставьте типы поставщику
- Предоставьте типы потребителю
- Предоставьте типы Provider.of ()
- Всегда используйте импорт пакетов. Пример: пакет `import ': my_app / my_code.dart';
- Убедитесь, что используется правильный
context
.
Вы знаете какое-нибудь решение?
Образец, демонстрирующий проблему:
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Provider<MyChildState>.value(
value: MyChildState("Hello world !"),
child: MaterialApp(
home: MyChildWidget(),
)),
);
}
}
abstract class MyParentWidget<State extends MyParentState> extends StatelessWidget {
@override
Widget build(BuildContext context) {
final State state = Provider.of(context);
return Text(state.text);
}
}
abstract class MyParentState {
final String text;
MyParentState(this.text);
}
class MyChildWidget<MyChildState> extends MyParentWidget{
}
class MyChildState extends MyParentState {
MyChildState(String text) : super(text);
}