json 为什么Map< String,dynamic>的值保持为空(Flutter应用程序)?

zujrkrfu  于 4个月前  发布在  Flutter
关注(0)|答案(1)|浏览(100)

我有一个文件,里面有下面的代码,我想通过导入在另一个文件中使用它,但是Map<String,dynamic> dataList的值总是为空。为什么?

import 'package:http/http.dart' as http;
import 'dart:convert';

class Structure {
  Map<String, dynamic> dataList = <String, dynamic>{};
  final String apiKey = "Dx6Raz0w6yVEEilPlk2edTmDSJBvTJh7qkou7OwW";
  String query = "Cheddar Cheese";
  String dataType = "SR Legacy";
  String pageSize = "25";
  String pageNumber = "2";
  String sortBy = "publishedDate";
  String sortOrder = "asc";

  Future<void> readData() async {
    query.replaceAll(' ', '%20');
    dataType.replaceAll(' ', '%20');
    String request =
        "https://api.nal.usda.gov/fdc/v1/foods/search?query=$query&dataType=$dataType&pageSize=$pageSize&pageNumber=$pageNumber&sortBy=$sortBy&sortOrder=$sortOrder&api_key=$apiKey";

    final response = await http.get(Uri.parse(request));

    if (response.statusCode == 200) {
      Map<String, dynamic> data = jsonDecode(response.body);
      dataList = data;
    } else {
      throw Exception('Failed to fetch data');
    }
  }
}

字符串
然后在我尝试的另一个文件中:

Structure s = Structure();
s.readData();
print('$s.dataList');


我也试过:

Structure s = Structure();
setState(() {s.readData();});
print('$s.dataList');


但是dataList总是空的,为什么?

bnl4lu3b

bnl4lu3b1#

代码中有2处错误
1.你必须使用等待-
等待s.readData();
1.您需要在print语句中使用{},如下所示-
打印(“${s.数据列表}”);
所以你的另一个文件代码是-

Structure s = Structure();
await s.readData();
print('${s.dataList}');

字符串
如果你想在一个小部件中使用它,比如一个升高的按钮,你可以这样使用它-

ElevatedButton(
  child: const Text('Load Data'),
  onPressed: () async {
    dataList = await s.readData();
    setState(() {});
  },
),

相关问题