首页 > 解决方案 > Flutter FutureBuilder snapshot.data接收null

问题描述

我正在尝试使用 FutureBuilder 从 sqflite 获取数据这是我的代码:

功能从 Sqflite 获取图表

getCharts(table, column_name, ids) async {
   var conn = await database;
   // var li = [];
   var data = await conn.query(table,
       where: "indicator_id IN (${List.filled(ids.length, '?').join(',')})",
       whereArgs: ids);


   return data;
 } 

此函数返回:

[
 {
   id: 1, indicator_id: 1, 
   label: Percentage of population with access to electricity,
   np: 89.9, 
   p1: 88.5,
   p2: 96.3,
   p3: 97.4, 
   p4: 98.9,
   p5: 90.8,
   p6: 44.9,
   p7: 77.1,
   chart_type: pie_chart, 
   name: Access to electricity,
   description: Percentage of population with access to electricity
  }
]

图表服务的功能

Future<List<Chart>> getCharts(List<int> ids) async {
    var res = await _repository!.getCharts('charts', 'indicator_id', ids);

    var mapped = res.map((chart) => new Chart.fromJson(chart)).toList();
    print(mapped);

    return mapped;
  }

此函数返回:

[Instance of 'Chart']

在图表屏幕上

 ChartService _chart2service = ChartService();
Future<List<Chart>>? futureChart;
  @override
  void initState() {
    super.initState();

    futureChart = _chart2service.getCharts(this.widget.ids!);
  }

但是当我尝试 FutureBuilder 时:

 FutureBuilder<List<Chart>>(
            future: futureChart,
            builder: (context, snapshot) {
            print(snapshot.data);
             })

snapshot.data 返回空值。

标签: flutternullflutter-futurebuilder

解决方案


检查是否snapshot.data为空。FutureBuilder准备好后会提供结果。

FutureBuilder<List<Chart>>(
  future: futureChart,
  builder: (context, snapshot) {
    if (snapshot.hasData) {
      print(snapshot.data);
      return Text('Data Loaded');
    }
    return Text('Loading Data...');
  },
);

推荐阅读