【发布时间】:2020-10-20 16:58:13
【问题描述】:
我的 Flutter 应用有一个仪表板,其中第一个屏幕是图表。图表的数据来自本地 sql 数据库。我有一个 Future 异步调用来通过数据库提供程序获取数据。
我当前的问题是,在真实设备上,init() 调用不会获取数据,因此不会填充图表。但是,当我导航到另一个屏幕并返回仪表板时,会填充数据。
感谢任何帮助,让我知道可能是什么问题。
下面是我调用函数_getExpTotal();的initState代码
class _DashboardPageState extends State<DashboardPage> {
@override
void initState() {
super.initState();
_seriesLineData = List<charts.Series<Sales, int>>();
_getExpTotal();
}
下面是Future异步函数_getExpTotal()
Future<List<Map<String, dynamic>>> _getExpTotal() async {
final result = await databaseProvider.getCatExpTotal();
expTotal = result;
count = result.length;
print(count);
_getChartData();
return result;
}
Future<int> _getChartData() async {
for (int i = 0; i < count; i++) {
String mon = (expTotal[i]['mon-Year']);
int exp = (expTotal[i]['TranAmount']);
mon = mon.substring(0, 2);
print(int.parse(mon));
linesalesdata.add(Sales(int.parse(mon), exp));
}
_generateData();
}
最后是 _generateData() 来更新图表:
_generateData() {
_seriesLineData.add(charts.Series(
colorFn: (__, _) => charts.ColorUtil.fromDartColor((Colors.blueGrey)),
id: 'Expense by Month',
data: linesalesdata,
domainFn: (Sales sales, _) => sales.yearval,
measureFn: (Sales sales, _) => sales.salesval,
labelAccessorFn: (Sales row, _) => '${row.yearval}',
));
}
【问题讨论】: