如何仅访问 Map 中的值

How to access only the values from a Map

我有以下数据json数据。

    {
      "0": "traceroute to www.google.com ( 142.250.180.36 ), 30 hops max", 
      "1": "Hop   Address              Host Name                                     Time      ", 
      "2": "1     0.0.0.0        _gateway                                      3.03ms    ", 
      "3": "2     0.0.0.0          0.0.0.0                                  5.28ms    ", 
      "4": "3     0.0.0.0         0.0.0.0                                7.63ms    ", 
      "5": "4     0.0.0.0        00.0.0.0                                  9.65ms    ", 
      "6": "5     172.19.14.121        172.19.14.121                                 10.55ms   ", 
      "7": "6     58.181.114.10        58.181.114.10                                 29.9ms    ", 
      "8": "7     10.253.4.74          10.253.4.74                                   31.0ms    ", 
      "9": "8     10.253.4.26          10.253.4.26                                   148.22ms  ", 
      "10": "9     74.125.146.188       74.125.146.188                                43.09ms   ", 
      "11": "10    ******************** ********************************************* 5179.56ms ", 
      "12": "11    142.251.51.56        142.251.51.56                                 45.78ms   ", 
      "13": "12    108.170.247.23       108.170.247.23                                43.23ms   ", 
      "14": "13    209.85.240.55        209.85.240.55                                 48.81ms   ", 
      "15": "14    209.85.241.249       209.85.241.249                                42.3ms    ", 
      "16": "15    ***************** ***************************************** 5024.85ms ", 
      "17": "16    142.250.180.36       mct01s14-in-f4.1e100.net                      44.03ms   ", 
      "18": "Reached destination"
    }

我想在未来的构建器中根据键显示值。我的flutter代码如下:

    Container(
                  child: FutureBuilder<Map<String, dynamic>>(
                    future: fetchData(),
                    builder: (context, snapshot) {
                      if (snapshot.hasData) {
                        return Expanded(
                          child: ListView.builder(
                              physics: AlwaysScrollableScrollPhysics(),
                              shrinkWrap: false,
                              itemCount: snapshot.data!.length,
                              itemBuilder: (BuildContext context, int index) {
                                return Container(
                                  height: 50,
                                  color: Colors.white,
                                  child: Center(
                                    child: Text(snapshot.data!.entries
                                        .elementAt(index)
                                        .toString()),
                                  ),
                                );
                              }),
                        );
                      } else if (snapshot.hasError) {
                        return Text("${snapshot.error}");
                      }
                      // By default show a loading spinner.
                      return CircularProgressIndicator();
                    },
                  ),
                ),

我的 fetchData 函数是;

    Future<Map<String, dynamic>> fetchData() async {
        print("Fetch data is called");
        Map<String, String> header = {
          'Content-type': 'application/json',
          'Accept': 'application/json',
          "Access-Control-Allow-Headers": "Access-Control-Allow-Origin, Accept",
          'Authorization': '<Your token>'
        };
    
        final response = await http.get(Uri.parse('http://192.168.100.9:7001/'),
            headers: header);
        if (response.statusCode == 200) {
          var jsonResponse = json.decode(response.body);
          return jsonResponse;
        } else {
          throw Exception('Unexpected error occured!');
        }
      }

我没有找到任何方法来访问我的 json 键在列表视图生成器中迭代它们的值。我找到的唯一方法是

    snapshot.data!.entries
                                            .elementAt(index)
                                            .toString())

但这是在我只想要值的地方打印“MapEntry(key: value)”。 文本小部件中应该包含什么?

使用可以使用 .values 只读取值。

snapshot.data!.values.elementAt(index)

在 Dart Map<K,V> 中,您可以访问 keysvaluesentries 这三个都是 Iterable<T> 但 [=17= 的值] 各不相同。

  1. 键是Iterable<K>
  2. 值为 Iterable<V>
  3. 条目是 Iterable<MapEntry<K,V>>

话虽如此,如果您想继续使用 .entries,您还可以更新 Text 小部件以使用 snapshot.data!.entries.elementAt(index).value

补充阅读:

有关 Dart Map 的更多信息,请访问 docs

要了解有关 MapEntry class 的更多信息,请访问此 doc