flutter - 发生此错误的代码有什么问题?
问题描述
错误:类型“_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,
),
);
}
}
解决方案
在 MyController 中将 fromJson 更改为 fromMap
var listProducts =
getProducts.map((i) => ProdutosModel.fromMap(i)).toList();
推荐阅读
- python - 如何从python调用snowsql客户端
- android - 启用 WorkManager 后,启用直接启动模式的应用程序崩溃?
- avr - AVR gcrt1.S 奇怪的调用
- google-apps-script - 如何确定一个值是否在使用谷歌脚本的单元格范围内?
- sql - 我想从我的员工(我将其命名为 ANGAJATI)中选择其部门的薪水 > avg(salary) 的员工
- node.js - Mongoose/MongoDB 获取一天内查看次数最多的文章
- c++ - 读取大文件(> 2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- python - 我正在尝试在 python (3.8) 中制作一个凯撒密码,并且不断出现错误
- python-3.x - 如何根据新列中的多个条件从数据框的单元格中获取值?
- python - python 相对导入难题 - 为什么这不起作用?