Flutter 错误:列表<;动态>;不是类型为';字符串';
这是我的两个Dart文件,我从firestore中检索视频,但在其中,我制作了视频数组并尝试检索它,但它给了我一个错误,如果我使用字符串而不是数组,它看起来很好,但在我的项目中,我需要数组,所以请帮助我指出 代码:1 main.dartFlutter 错误:列表<;动态>;不是类型为';字符串';,flutter,google-cloud-firestore,flutter-test,Flutter,Google Cloud Firestore,Flutter Test,这是我的两个Dart文件,我从firestore中检索视频,但在其中,我制作了视频数组并尝试检索它,但它给了我一个错误,如果我使用字符串而不是数组,它看起来很好,但在我的项目中,我需要数组,所以请帮助我指出 代码:1 main.dart import 'dart:io'; import 'chewie_list_item.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'
import 'dart:io';
import 'chewie_list_item.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:video_player/video_player.dart';
void main() {
FlutterError.onError = (FlutterErrorDetails details) {
FlutterError.dumpErrorToConsole(details);
if (kReleaseMode) exit(1);
};
runApp(MaterialApp(
home: CourseApp(),
));
}
class CourseApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Flutter Demo"),
),
body: StreamBuilder(
stream: Firestore.instance.collection("courses").snapshots(),
builder: (context, snapshot) {
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index) {
DocumentSnapshot courses = snapshot.data.documents[index];
return (ChewieListItem(
videoPlayerController: VideoPlayerController.network(
courses['video'] ?? 'default'),
));
},
);
},
));
}
}
[code 2: chewie_list_item.dart]
import 'package:chewie/chewie.dart';
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
class ChewieListItem extends StatefulWidget {
// This will contain the URL/asset path which we want to play
final VideoPlayerController videoPlayerController;
final bool looping;
ChewieListItem({
@required this.videoPlayerController,
this.looping,
Key key,
}) : super(key: key);
@override
_ChewieListItemState createState() => _ChewieListItemState();
}
class _ChewieListItemState extends State<ChewieListItem> {
ChewieController _chewieController;
@override
void initState() {
super.initState();
// Wrapper on top of the videoPlayerController
_chewieController = ChewieController(
videoPlayerController: widget.videoPlayerController,
aspectRatio: 16 / 9,
// Prepare the video to be played and display the first frame
autoInitialize: true,
looping: widget.looping,
// Errors can occur for example when trying to play a video
// from a non-existent URL
errorBuilder: (context, errorMessage) {
return Center(
child: Text(
errorMessage,
style: TextStyle(color: Colors.white),
),
);
},
);
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Chewie(
controller: _chewieController,
),
);
}
@override
void dispose() {
super.dispose();
// IMPORTANT to dispose of all the used resources
widget.videoPlayerController.dispose();
_chewieController.dispose();
}
}
Here I am retrieving my video array from a firebase but I get this error please give me a solution of this code.
导入'dart:io';
导入“chuvie_list_item.dart”;
进口“包装:颤振/基础.dart”;
进口“包装:颤振/材料.省道”;
导入“包:cloud_firestore/cloud_firestore.dart”;
导入“package:video_player/video_player.dart”;
void main(){
flatterError.onError=(flatterErrorDetails){
flatterError.dumpErrorToConsole(详细信息);
如果(kReleaseMode)出口(1);
};
runApp(材料应用程序)(
主页:CourseApp(),
));
}
类CourseApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“颤振演示”),
),
正文:StreamBuilder(
流:Firestore.instance.collection(“课程”).snapshots(),
生成器:(上下文,快照){
返回ListView.builder(
itemCount:snapshot.data.documents.length,
itemBuilder:(上下文,索引){
DocumentSnapshot=snapshot.data.documents[索引];
返回(CHUELISTITEM)(
videoPlayerController:videoPlayerController.network(
课程[“视频”]??“默认设置”),
));
},
);
},
));
}
}
[代码2:Chuie\u list\u item.dart]
进口“包装:丘伊/丘伊.达特”;
进口“包装:颤振/材料.省道”;
导入“package:video_player/video_player.dart”;
类chuvieListItem扩展StatefulWidget{
//这将包含我们想要播放的URL/资产路径
最终视频播放控制器视频播放控制器;
最终布尔循环;
丘维里斯蒂姆({
@需要此。videoPlayerController,
这个,循环,
关键点,
}):super(key:key);
@凌驾
_ChevieListItemState createState()=>\u ChevieListItemState();
}
类_chuvieListItemState扩展状态{
咀嚼控制器;
@凌驾
void initState(){
super.initState();
//videoPlayerController顶部的包装
_咀嚼控制器=咀嚼控制器(
videoPlayerController:widget.videoPlayerController,
专题:16/9,
//准备要播放的视频并显示第一帧
自动初始化:true,
循环:widget.looping,
//例如,尝试播放视频时可能会发生错误
//从一个不存在的URL
errorBuilder:(上下文,errorMessage){
返回中心(
子:文本(
错误消息,
样式:TextStyle(颜色:Colors.white),
),
);
},
);
}
@凌驾
小部件构建(构建上下文){
返回填充(
填充:常数边集全部(8.0),
孩子:朱伊(
控制器:_cheuicontroller,
),
);
}
@凌驾
无效处置(){
super.dispose();
//重要的是要处置所有已使用的资源
widget.videoPlayerController.dispose();
_chouicontroller.dispose();
}
}
在这里,我正在从firebase检索我的视频阵列,但我得到了这个错误,请给我这个代码的解决方案。
DocumentSnapshot=snapshot.data.documents[索引];在此处检查您是否正在获取正确的数据我正在添加该数据(DocumentSnapshot courses=snapshot.data.documents[index];),但它无法获取我的数据。请帮助我清除视频是我的数组,因为我正在添加视频链接。因此,如果您没有获取数据,那么如何呈现列表?你是否收到文件。尝试添加打印语句您可以验证这一点在这段代码中,我手动将我的firestore添加到我的案例集合(课程)。文档(视频)中,因此这里的视频是一种数组类型,当我检索它时,我发现了错误,如果可能,还请向我提供带有更正的代码。