listview - Flutter - 具有服务和模型的 Future Builder
问题描述
我正在尝试使用 FutureBuilder 来显示无限列表。我想在不同的 .dart 文件中使用模型和服务,所以我需要在 FutureBuilder 中注入服务。我认为服务不返回列表的问题,但我不知道为什么。代码是
模型
class Datameter {
int idAgrupacion;
int nroSerie;
String fecha;
///
double latitud;
double longitud;
String contador;
String sensor;
Datameter(
{this.idAgrupacion,
this.nroSerie,
this.fecha,
///
this.latitud,
this.longitud,
this.contador,
this.sensor});
factory Datameter.fromJson(json) => new Datameter(
nroSerie: json["nro_serie"],
idAgrupacion: json["id_agrupacion"],
fecha: json["fecha"],
//
latitud: json["latitud"],
longitud: json["longitud"],
contador: json["contador"],
sensor: json["sensor"],
);
}
服务
static Future<Datameter> getDatameters(dropdown) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
final token = prefs.getString('token');
final response = await http.get(
'http://192.168.3.64:8080/datameter/agrupacion/info?agrupacion=' +
dropdown +
'&limite=0',
headers: {
HttpHeaders.authorizationHeader: "Token " + token
}).catchError((error) {
print(error.toString());
});
if (response.statusCode == 200) {
var responseJson = json.decode(response.body);
return responseJson["body"].map((item) => Datameter.fromJson(item)).toList();
}
return null;
}
看法
FutureBuilder(
future: DatameterService.getInstalations("2"),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return snapshot.data; ListView.separated(
separatorBuilder: (context, index) => Divider(
color: Colors.grey,
),
itemCount: snapshot.data.length,
itemBuilder: (context, i) {
return ListTile(
leading: Icon(FontAwesomeIcons.tint,
size: 24, color: Colors.black),
trailing: Text(DateFormat('yyyy/MM/dd HH:mm')
.format(DateTime.fromMillisecondsSinceEpoch(
snapshot.data[i]['fecha']))
.toString()),
onTap: null,
title: Text(
snapshot.data[i]['nro_serie'],
));
});
} else {
return CircularProgressIndicator();
}
}),
问题:返回'type DatameterList不是'Widget'类型的子类型'
那么:使用 FutureBuilder 显示列表的正确方法是什么?
解决方案
builder 函数应该返回一个 Widget,就像您注释掉的一样:
FutureBuilder(
future: DatameterService.getInstalations("2"),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return ListView.separated(
separatorBuilder: (context, index) => Divider(
color: Colors.grey,
),
itemCount: snapshot.data.length,
itemBuilder: (context, i) {
return ListTile(
leading: Icon(FontAwesomeIcons.tint, size: 24, color: Colors.black),
trailing: Text(DateFormat('yyyy/MM/dd HH:mm')
.format(DateTime.fromMillisecondsSinceEpoch(
snapshot.data[i]['fecha'])
).toString()
),
onTap: null,
title: Text(
snapshot.data[i]['nro_serie'],
),
);
});
} else {
return CircularProgressIndicator();
}
}),
推荐阅读
- java - Swagger 3.0.0 + WebFlux:我的设置有什么问题或缺失?
- rest - 如何使用 Rest 在 SharePoint 中获取多个模板类型列表
- vscode-settings - 在 Visual Studio Code 中拖放复制并排编辑器
- android - 仅允许我的应用程序的用户将值从 false 更改为 true 的最安全的安全规则是什么?
- r - 如何在 R 中将表格重新构造为特定的模板格式?
- android - 如何在 Android 的 BOOT_COMPLETED 事件上启动后台服务?
- python - Python 3.9.1 argparse exit_on_error 在某些情况下不起作用
- redis - 使用 py-redis 在集合中插入元素期间出现问题
- db2 - 从 DBVisualizer 运行 XQuery 时出错
- python - 将 CSV 转换为数组 - Python