flutter - Flutter FutureBuilder snapshot.data接收null
问题描述
我正在尝试使用 FutureBuilder 从 sqflite 获取数据这是我的代码:
功能从 Sqflite 获取图表
getCharts(table, column_name, ids) async {
var conn = await database;
// var li = [];
var data = await conn.query(table,
where: "indicator_id IN (${List.filled(ids.length, '?').join(',')})",
whereArgs: ids);
return data;
}
此函数返回:
[
{
id: 1, indicator_id: 1,
label: Percentage of population with access to electricity,
np: 89.9,
p1: 88.5,
p2: 96.3,
p3: 97.4,
p4: 98.9,
p5: 90.8,
p6: 44.9,
p7: 77.1,
chart_type: pie_chart,
name: Access to electricity,
description: Percentage of population with access to electricity
}
]
图表服务的功能
Future<List<Chart>> getCharts(List<int> ids) async {
var res = await _repository!.getCharts('charts', 'indicator_id', ids);
var mapped = res.map((chart) => new Chart.fromJson(chart)).toList();
print(mapped);
return mapped;
}
此函数返回:
[Instance of 'Chart']
在图表屏幕上
ChartService _chart2service = ChartService();
Future<List<Chart>>? futureChart;
@override
void initState() {
super.initState();
futureChart = _chart2service.getCharts(this.widget.ids!);
}
但是当我尝试 FutureBuilder 时:
FutureBuilder<List<Chart>>(
future: futureChart,
builder: (context, snapshot) {
print(snapshot.data);
})
snapshot.data 返回空值。
解决方案
检查是否snapshot.data
为空。FutureBuilder
准备好后会提供结果。
FutureBuilder<List<Chart>>(
future: futureChart,
builder: (context, snapshot) {
if (snapshot.hasData) {
print(snapshot.data);
return Text('Data Loaded');
}
return Text('Loading Data...');
},
);