首页 > 解决方案 > 发生此错误的代码有什么问题?

问题描述

错误:类型“_InternalLinkedHashMap<String, dynamic>”不是类型转换中“List<dynamic>”类型的子类型

我只是想在屏幕上显示数据,非常简单,但无论如何都不起作用。API 正在正确地向我返回必要的数据,因为在控制台上显示我但不知道如何在 View 中调用。

我的模型:

class ProdutosModel {
  int codigo;
  String codigoBarras;
  String descricao;
  double preco;

  ProdutosModel({
    this.codigo,
    this.codigoBarras,
    this.descricao,
    this.preco,
  });

  Map<String, dynamic> toMap() {
    return {
      'codigo': codigo,
      'codigoBarras': codigoBarras,
      'descricao': descricao,
      'preco': preco,
    };
  }

  factory ProdutosModel.fromMap(Map<String, dynamic> map) {
    return ProdutosModel(
      codigo: map['codigo'],
      codigoBarras: map['codigoBarras'],
      descricao: map['descricao'],
      preco: map['preco'],
    );
  }

  String toJson() => json.encode(toMap());

  factory ProdutosModel.fromJson(String source) =>
      ProdutosModel.fromMap(json.decode(source));
}

我的控制器:

Future getterProducts() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    final token = prefs.getString('token');

    try {
      final response = await Dio().get(
        'CONFIDENTIAL#CONFIDENTIAL#CONFIDENTIAL#',
        options: Options(
          headers: {'Token': token},
        ),
      );

      print(response.data);

      if (response.statusCode == 200 || response.statusCode == 201) {
        var getProducts = response.data as List;
        var listProducts =
            getProducts.map((i) => ProdutosModel.fromJson(i)).toList();
        return listProducts;
      }
    } on DioError catch (e) {
      print(e);
    }
  }

而我的观点:

class HomeView extends GetView<HomeController> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: PreferredSize(
        preferredSize: Size.fromHeight(150.0),
        child: AppBar(
          elevation: 10,
          flexibleSpace: Container(
            decoration: BoxDecoration(
              gradient: LinearGradient(
                colors: [
                  Color(0xff38EF7D),
                  Color(0xff11998E),
                ],
              ),
            ),
          ),
          title: Text(''),
          centerTitle: true,
        ),
      ),
      body: FutureBuilder(
        future: controller.listProducts,
        builder: (context, snapshot) {
          if (snapshot.hasData) {
            return ListView.builder(
                itemCount: snapshot.data.length,
                itemBuilder: (context, index) {
                  
                  var prod = (snapshot.data as List<ProdutosModel>)[index];
                  return ListTile(
                    title: Text('${prod.descricao}'),
                  );
                },
                /* itemCount: (snapshot.data as List<ProdutosModel>).length */);
          } else if (snapshot.hasError) {
            return Center(child: Text('${snapshot.error}'));
          }
          return Center(
            child:
                CircularProgressIndicator(backgroundColor: Colors.cyanAccent),
          );
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          //
        },
        child: Icon(
          Icons.refresh,
          color: Colors.green[700],
        ),
        backgroundColor: Colors.greenAccent,
      ),
    );
  }
}

标签: flutterdart

解决方案


在 MyController 中将 fromJson 更改为 fromMap

var listProducts =
            getProducts.map((i) => ProdutosModel.fromMap(i)).toList();
       

推荐阅读