Flutter:操作符“[]”不是为类型“Future〈Map〈dynamic,dynamic>>定义的

r1zhe5dt  于 2023-05-01  发布在  Flutter
关注(0)|答案(2)|浏览(253)

我正在编写类的代码
class _DashboardState使用SingleTickerProviderStateMixin { late Future _summaryData;Future_chartData;

@override
  initState() {
    super.initState();
    Future<Map> data = fetchData();
    _summaryData= data['summaryData']; // ERROR HERE
    _chartData= data['chartData']; // ERROR HERE
  }

  Future<Map> fetchData() async {
    ...
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: _summaryData,
      builder: ...);
  }

但我面临一个错误The operator '[]' isn't defined for the type 'Future<Map<dynamic, dynamic>>'. Try defining the operator '[]'.
请告诉我原因和如何解决?谢谢!

4zcjmb1e

4zcjmb1e1#

这里的问题是您试图从Future<Map>而不是Map访问summaryData和chartData。在你的fetchData()函数中,让它返回Map而不是Future<Map>,如下所示:

Map fetchData() async {
 return await fetchDataAPICall(); /// Whatever way you are fetching the data
}

这将返回一个Map,您应该能够在其中访问所需的数据。
Happy Coding:)

1qczuiv0

1qczuiv02#

将您的代码更改为以下内容。

@override
  initState() {
    super.initState();
    getData();
  }

void getData()async{
Future<Map> data = await fetchData();
    _summaryData= data['summaryData']; // ERROR FIX
    _chartData= data['chartData']; // ERROR FIX
}

  Future<Map> fetchData() async {
    ...
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: _summaryData,
      builder: ...);
  }

由于await不能被添加到init方法中,我们创建一个单独的方法并将其标记为async以等待API调用数据。

相关问题