首页 > 解决方案 > 我可以在 MultiProvider 中使用 Future Provider 吗?但它可以从 API 解决它们

问题描述

我正在尝试使用颤振Provider 包,并且我有一个 API,我想在其中获取 Transport Type 的数据和路线的标题(它是 Marshes 类)。我决定使用Future Provider ans,据我所知,如果我想使用 mu;tiproviders,我需要在 widhet 树顶部的主失败中使用MultiProvider 。我做了与文档中描述的相同的操作,但现在出现错误:“在构建 Home(dirty) 时抛出了以下 ProviderNotFoundException:错误:在此 Home Widget 上方找不到正确的 Provider<List>”

所以问题是:我可以在 Multiproviders 中使用 futureproviders 吗?正如我在下面的代码中所做的那样。

我真的不明白我的错误在哪里

主文件:

Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        FutureProvider(
          create: (context) => transportService.fetchTranspot(),
          initialData: [],
          catchError: (context, error) {
            print(error.toString());
          },
        ),
        FutureProvider(
          create: (context) => transportService.fetchMarshes(),
          catchError: (context, error) {
            print(error.toString());
          },
          initialData: [],
        ),
      ],
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: Home(),
      ),

运输类型的另一个:

List<TransportType> transport = Provider.of<List<TransportType>>(context);
    return Scaffold(
      appBar: AppBar(title: Text('Employees'),
      ),
      body: (transport == null)
      ? Center(child: CircularProgressIndicator(),)
      : ListView.builder(
        itemCount: transport.length,
        itemBuilder: (context,index){
          return ListTile(
            title: Text(transport[index].ttTitle),

沼泽也一样。我想把它做成一个列表

 final int ttId;
  final TransportService transportService = TransportService();

  EmployeePage({@required this.ttId});

  @override
  Widget build(BuildContext context) {
    List<Marshes> marsh = Provider.of<List<Marshes>>(context);
    return Scaffold(
        appBar: AppBar(title: Text('Employees'),
        ),
        body: (marsh == null)
            ? Center(child: CircularProgressIndicator(),)
            : ListView.builder(
            itemCount: marsh.length,
            itemBuilder: (context,index){
              return ListTile(
                title: Text(marsh[index].mrTitle),

标签: flutterdartprovider

解决方案


您没有指定FutureBuilders 的类型,例如:

providers: [
    FutureProvider(

应该:

providers: [
    FutureProvider<List<TransportType>>(

推荐阅读