Проблема с объявлением multiprovider в представлении flutter

#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.