【问题标题】:Problem with declaration multiprovider in view flutter视图颤动中声明多提供者的问题
【发布时间】:2023-03-31 22:31:01
【问题描述】:

当我启动我的应用程序时,我发现我的 multiprovider 出现问题:

'children != null && children.isNotEmpty': is not true

错误:

在构建应用程序(脏)时抛出了以下断言: 'package:nested/nested.dart':断言失败:第 72 行 pos 16:'children != null && children.isNotEmpty':不正确。 相关的导致错误的小部件是 应用 lib\main.dart:8 抛出异常时,这是堆栈 #2 新嵌套 包:嵌套/nested.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());
  }
}

如果你想要其他代码,问我。

【问题讨论】:

  • 可以添加“providers”的代码吗?

标签: flutter flutter-dependencies provider


【解决方案1】:

根据documentation,您列表中的供应商应采用如下结构:

MultiProvider(
  providers: [
    Provider<Something>(create: (_) => Something()),
    Provider<SomethingElse>(create: (_) => SomethingElse()),
    Provider<AnotherThing>(create: (_) => AnotherThing()),
  ],
  child: someWidget,
)

换句话说,您应该提供create 方法。

您也没有提供提供者列表,而是提供值列表。

【讨论】:

    【解决方案2】:

    问题是您的 SingleChildWidgets 列表为空(因为它是破坏 4 个空列表的结果)。您必须提供至少一个 SingleChildWidget。

    【讨论】:

      猜你喜欢
      • 2021-06-18
      • 2020-05-10
      • 1970-01-01
      • 2019-01-24
      • 2020-02-24
      • 2019-12-06
      • 2021-11-01
      • 2020-12-06
      • 2022-12-31
      相关资源
      最近更新 更多