#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']), ));