Список флаттера не является подтипом списка типов

#flutter #dart

Вопрос:

У меня есть файл json со следующей структурой:

 [  {  "name": "Kejadian",  "playList": "Kejadian",  "videos": [  "q2ZZlUsnX5Y",  "ANpas6oyZjw",  "5qwP-SOEdKg",  "hWm62l-d3DE",  "F07RJdvQ77w",  ]  },  ... ]  

Я могу получить все данные этого списка, за исключением videos массива, когда я пытаюсь получить строковый список videos , в котором говорится:

 type 'Listlt;dynamicgt;' is not a subtype of type 'Listlt;Stringgt;'  

вот мой код:

my json file class

 class VideoDetails {  final String name, playList;  final Listlt;Stringgt; videos;   VideoDetails({  required this.name,  required this.playList,  required this.videos,  });   factory VideoDetails.fromJson(Maplt;String, dynamicgt; json) {  return VideoDetails(  name: json['name'],  playList: json['playList'],  videos: json["videos"],  );  } }  

getting data from my json file

 getPlayerList() async {  String data = await DefaultAssetBundle.of(context).loadString("assets/lists/v-player.json");  final jsonResult = jsonDecode(data);  return jsonResult; }  

returning data of my list in FutureBuilder

 FutureBuilder(  future: getPlayerList(),  builder: (BuildContext context, AsyncSnapshotlt;dynamicgt; snapshot) {  if (snapshot.data == null) {  return const Center(child: Text("Loading..."), );  } else {  return ListView.builder(  itemCount: snapshot.data.length,  itemBuilder: (context, index) {  var item = snapshot.data[index];  return ListTile(  leading: const FaIcon(FontAwesomeIcons.video),  title: Text(item['name']),  trailing: Row(  mainAxisSize: MainAxisSize.min,  children: [  Text('${item['videos'].length}'),  const Icon(Icons.arrow_forward_ios_rounded),  ],  ),  onTap: () {  if(item['videos'].isNotEmpty) {  Navigator.pushNamed(context, '/player', arguments: VideoArguments(  item['name'],  item['playList'],  item['videos'], // error caused here.  ));  } else {  //...  }  },  );  }  );  }  } )  

И на моем втором экране, где я получаю список видео (прокомментированных в коде выше) У меня есть следующий код:

 class VideoListPlayer extends StatefulWidget {  final Listlt;Stringgt; videosList; // getting videos list  final String playList;  const VideoListPlayer({Key? key, required this.videosList, required this.playList}) : super(key: key);   @override  _VideoListPlayerState createState() =gt; _VideoListPlayerState(); }  

Также вот мой класс аргументов, в котором список видео должен быть отправлен на второй экран:

 class VideoArguments {  final String name;  final String playList;  final Listlt;Stringgt; videos;   VideoArguments(this.name, this.playList, this.videos); }  

Есть какие-нибудь предложения?

Комментарии:

1. Обновите свой videos: json["videos"], с помощью этого: videos: json["videos"].castlt;Stringgt;(),

2. @Кишандханкеча, это не сработало

3. Я не могу найти место, где можно конвертировать json в видеодетекторы в вашем коде

4. Я поделился своим решением. Спасибо

Ответ №1:

Решение

Что помогло мне решить эту проблему, так это:

 List.from()  

code

 Navigator.pushNamed(context, '/player', arguments: VideoArguments(  item['name'],  item['playList'],  List.from(item['videos']), ));