【问题标题】:The argument type 'Object?' can't be assigned to the parameter type 'List'参数类型“对象?”不能分配给参数类型“列表”
【发布时间】:2021-10-21 11:05:05
【问题描述】:

下面的示例在较旧的颤振 sdk 版本上工作,但现在我有错误 参数类型“对象?”不能分配给参数类型“列表”

FutureBuilder(
        future: fetchEmp(),
        builder: (context, snapshot) {
          return snapshot.hasData
              ? RecommandEmp(emps: snapshot.data)  ---Here is problem!!!
              : Center(child: Image.asset('assets/images/no.png'));
        },
    ),



    class RecommandEmp extends StatefulWidget {
    
      const RecommandEmp({Key? key, required this.emps}) : super(key: key);
    
      final List<Emp> emps;
      @override
      _RecommandEmpState createState() => _RecommandEmpState();
    }

fetchEmp

Future<List<Emp>> fetchEmp() async {

  final response = await http.get(Uri.https(myUrl, 'select/emp'));

  if (response.statusCode == 200) {

    List<Emp> emp = (json.decode(utf8.decode(response.bodyBytes))["items"]  as List)
        .map((data) => Emp.fromJson(data))
        .toList();
    return emp;
  } else {

    throw Exception('Error!');
  }
}

型号 --> https://ibb.co/zr7H8v2

【问题讨论】:

  • 你能调试fetchEmp()中的emp值吗?获取数据时可能会出现问题。因为如果emp 是 List 则不应显示该错误
  • @MiguelEscobarCalderon 当使用 print(emp[2].ename);在 fetchEmp 中获取 ename 值。

标签: flutter dart


【解决方案1】:

snapshot.data 将始终默认为 Object 类型,除非您指定类型,这可以通过两种不同的方式完成

首先如下

FutureBuilder<List<Emp>>(
      future: fetchEmp(),
      builder: (context, snapshot) {
        return snapshot.hasData
            ? RecommandEmp(emps: snapshot!.data) 
            : Center(child: Image.asset('assets/images/no.png'));
      },
    ),

或第二个(对于您不确定您的类型的不太可能的情况,即返回动态):

FutureBuilder(
      future: fetchEmp(),
      builder: (context, snapshot) {
        return snapshot.hasData && snapshot is List<Emp>
            ? RecommandEmp(emps: snapshot.data as List<Emp>) 
            : Center(child: Image.asset('assets/images/no.png'));
      },
    ),

【讨论】:

    【解决方案2】:

    groupedTransactionValues 方法正在返回 Object 的映射。相反,返回dynamic 的映射,它是运行时确定的类型。换行:

    List<Map<String, Object>> get groupedTransactionValues {
    

    到:

    List<Map<String, dynamic>> get groupedTransactionValues {
    

    【讨论】:

      猜你喜欢
      • 2021-11-06
      • 2021-08-05
      • 2021-07-07
      • 1970-01-01
      • 2021-08-18
      • 2021-08-29
      • 2021-11-06
      • 2021-07-17
      • 2021-11-06
      相关资源
      最近更新 更多