首页 > 解决方案 > 无法使用来自 sql Flutter 的数据更新仪表板

问题描述

我的 Flutter 应用程序有一个带有图表的仪表板作为第一个屏幕。图表的数据来自本地 sql 数据库。我有一个 Future 异步调用来通过数据库提供程序获取数据。

我当前的问题是,在真实设备上,init() 调用不会获取数据,因此不会填充图表。但是,当我导航到另一个屏幕并返回仪表板时,会填充数据。

感谢任何帮助让我知道可能是什么问题。

下面是我调用函数 _getExpTot​​al(); 的 initState 代码;

class _DashboardPageState extends State<DashboardPage> {

  @override
  void initState() {
    super.initState();
    _seriesLineData = List<charts.Series<Sales, int>>();
    _getExpTotal();
  }

下面是 Future 异步函数 _getExpTot​​al()

  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}',
    ));
  }

标签: androidfluttersqflite

解决方案


我可以看到您正在调用您的 _getExpTot​​al(); initState() 中的函数返回 Map<String,dynamic> 列表,但您并没有真正使用返回的数据。此外,您不能在 initState() 中使用 await 所以我会说您选择了错误的位置来调用您的 _getExpTot​​al(); 功能。这里有一些可以帮助你的东西。

@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((){
    
  });
}

推荐阅读