android - 无法使用来自 sql Flutter 的数据更新仪表板
问题描述
我的 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}',
));
}
解决方案
我可以看到您正在调用您的 _getExpTotal(); initState() 中的函数返回 Map<String,dynamic> 列表,但您并没有真正使用返回的数据。此外,您不能在 initState() 中使用 await 所以我会说您选择了错误的位置来调用您的 _getExpTotal(); 功能。这里有一些可以帮助你的东西。
@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((){
});
}
推荐阅读
- flutter - 使用颤动向下滚动时如何隐藏bottomAppBar
- python - 使用熊猫(python)根据以前的值添加列
- c++ - UE4工程打包时找不到动画类
- reactjs - React + typeScript + bugsnag 可能吗?
- java - 顺序程序的并行化(迷宫)
- asp.net - 热重载不适用于 Blazor 应用
- keras - 在 Keras 中创建具有可变输入大小的自定义数据生成器
- ruby-on-rails - 如何使用夹具测试带有 Mongoid 的 Rails 5 应用程序
- python - pygame 的问题 - 加载 libmeg123.dll 失败
- python - 无法获取 mac 地址 - Kali Linux