“我的Flutter”应用有一个带有图表的仪表板作为第一个屏幕。该图表的数据来自本地sql数据库。我有一个Future异步调用来通过数据库提供程序获取数据。
我当前的问题是在实际设备上,init()调用不会获取数据,因此不会填充图表。但是,当我导航到另一个屏幕并返回到仪表板时,将填充数据。
感谢任何帮助让我知道可能是什么问题。
下面是我的initState代码,调用函数_getExpTotal();
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}',
));
}
答案 0 :(得分:0)
我可以看到您正在调用_getExpTotal();来自initState()的函数,该函数返回Map
@override
void initState() {
super.initState();
_seriesLineData = List<charts.Series<Sales, int>>();
_renderGraph();
//Stop calling _getExpTotal() here.
}
创建一个函数“ renderGraph()”
void _renderGraph() async {
List<Map<String,dynamic>> returnedData = await _getExpTotal();
//Use returned data here however you want.
setState((){
});
}