【问题标题】:I/flutter ( 2680): type 'List<dynamic>' is not a subtype of type 'Map<dynamic, dynamic>' in type castI/flutter(2680):类型“列表<动态>”不是类型转换中“地图<动态、动态>”类型的子类型
【发布时间】:2021-01-04 23:06:45
【问题描述】:

您好,我是 Flutter 的新手。我试图访问设备中可用的文件夹名称。我是 storage_Path 来获取它。这个错误来了。 我的应用程序尝试在 json 文件中获取文件夹的名称。然后 json 文件被解码并传递给映射变量。映射变量被传递给一个列表变量,该变量通过未来的构建器返回。但是当我尝试访问变量 thi发生错误。

import 'dart:convert';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:ext_storage/ext_storage.dart';
import 'package:flutter/services.dart';
import 'package:storage_path/storage_path.dart';
import 'dart:async';
import 'package:permissions_plugin/permissions_plugin.dart';


void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build (BuildContext context) {
    Future<List> hello() async{
      String vidPath="";
      Map<String,dynamic> map=null;
      List<dynamic> data=null;
      try {
         vidPath = await StoragePath.videoPath; //contains vidoe path and folder name in json format

         map=await json.decode(vidPath) as Map;
         if(map!=null){
           try{
         data=map["foldername"] as List;
         print("has data");
           }
           catch(Exception){
             print(Exception);
           }

         }
         else{
           print("Null data");
         }
      } on PlatformException {
        print(PlatformException);
         vidPath =  "none";
      }
      print(data);
      return (data);
    };




    return MaterialApp(

      title: 'Welcome to Flutter',
      home: Scaffold(
        appBar:AppBar(
          toolbarHeight: 70,
          centerTitle: true,
          elevation: 10,
          backgroundColor: Colors.black,
          title: Text("Cassette")),

        body:
        Center(
          child:FutureBuilder<List>(
            future: hello(),

            builder: (context,AsyncSnapshot<List> snapshot){
            List<dynamic> msg=null;
              if(snapshot.hasData){


            }else if(snapshot.hasError){
            print(snapshot.error);
              Text("no data1");
          }

            return(Text(snapshot.data[0]["foldername"]));
            }

          )
        )
        ),

    );

  }

}

**Error

I/flutter ( 2680): type 'List<dynamic>' is not a subtype of type 'Map<dynamic, dynamic>' in type cast

**





【问题讨论】:

    标签: android json flutter dart flutter-layout


    【解决方案1】:

    这是你会收到的那种 o json:

    [
      {
        "files": [
          {
            "path": "/storage/emulated/0/DCIM/Camera/VID_20190304_112455.mp4",
            "dateAdded": "1551678904",
            "displayName": "VID_20190304_112455.mp4",
            "duration": "7147",
            "size": "12787914"
          }
        ],
        "folderName": "Camera"
      }
    ]
    

    所以你的代码应该是这样的:

    String vidPath="";
    List vidPaths = List();
      
          try {
             vidPaths=await jsonDecode(vidPath);
    
             if(vidPaths.length == 0){
                print("no data");
              } else {
                vidPaths.forEach((element) {
                print(element["folderName"]);
              });
    
             }
            
          } catch(e) {
            print(e);
             vidPath =  "none";
          }
    
    

    【讨论】:

    • 如何访问“文件”中的数据?
    • 而不是element["folderName"] 你可以做这样的事情element["files"][0]["path"]
    猜你喜欢
    • 1970-01-01
    • 2020-07-29
    • 2020-03-20
    • 2021-09-29
    • 2021-07-08
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多