无法使用SQL Flutter中的数据更新仪表板

时间:2020-06-30 11:39:06

标签: android flutter sqflite

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

我可以看到您正在调用_getExpTot​​al();来自initState()的函数,该函数返回Map 的列表,但您并未真正使用返回的数据。另外,您不能在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((){
    
  });
}