#flutter #flutter-dependencies #provider
#flutter #flutter-зависимости #поставщик
Вопрос:
Когда я запускаю свое приложение, у меня возникла проблема с моим multiprovider в flutter :
'children != null amp;amp; children.isNotEmpty': is not true
Ошибка:
Было выдано следующее утверждение при сборке приложения (грязное): «пакет: вложенный / вложенный.dart»: Неудачное утверждение: строка 72 поз 16: «дочерние элементы != null amp;amp; children.isNotEmpty»: неверно. Соответствующим виджетом, вызывающим ошибку, была библиотека приложения main.dart:8 Когда было вызвано исключение, это был стек # 2 новый вложенный пакет: вложенный / вложенный.dart:72
Код :
class Application extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: providers,
child: _application(context),
);
}
Widget _application(BuildContext context) {
return MaterialApp(
title: 'Simple Rest API',
initialRoute: '/',
routes: {
'/': (context) => TeamsView(),
},
);
}
}
Редактировать :
Мой DI :
List<SingleChildWidget> providers = [
...services,
...datas,
...repositories,
...usescases,
];
List<SingleChildWidget> services = [];
List<SingleChildWidget> datas = [];
List<SingleChildWidget> repositories = [];
List<SingleChildWidget> usescases = [];
class ViewModelBuilder {
static final _instances = {TeamsViewModel: () => TeamsViewModel()};
static ViewModel instanciate(Type type) {
return _instances[type]();
}
}
Мое мнение :
class TeamsView extends StatelessWidget {
@override
Widget build(BuildContext context) {
return View<TeamsViewModel>(
args: [],
builderView: (context, model, child) => _buildView(context, model),
);
}
}
Widget _buildView(BuildContext context, TeamsViewModel model) {
return Scaffold(
appBar: AppBar(
title: Text("Test"),
),
body: Center(
child: Text("Premier lancement"),
),
);
}
Моя модель представления :
class TeamsViewModel extends ViewModel {
BuildContext _context;
void load(BuildContext context, List args) async {
_context = context;
setLifecycle(OnLoad());
setLifecycle(OnLoaded());
}
}
если вам нужен другой код, спросите меня.
Комментарии:
1. Можете ли вы добавить код для «поставщиков»?
Ответ №1:
Согласно документации, поставщики в вашем списке должны быть структурированы следующим образом:
MultiProvider(
providers: [
Provider<Something>(create: (_) => Something()),
Provider<SomethingElse>(create: (_) => SomethingElse()),
Provider<AnotherThing>(create: (_) => AnotherThing()),
],
child: someWidget,
)
Другими словами, вы должны указать create
методы.
Вы также не предоставляете список поставщиков, а список значений.
Ответ №2:
Проблема в том, что ваш список SingleChildWidget
s пуст (так как это результат уничтожения 4 пустых списков). Вы должны предоставить хотя бы один SingleChildWidget.