Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 错误:列表<;动态>;不是类型为';字符串';_Flutter_Google Cloud Firestore_Flutter Test - Fatal编程技术网

Flutter 错误:列表<;动态>;不是类型为';字符串';

Flutter 错误:列表<;动态>;不是类型为';字符串';,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'

这是我的两个Dart文件,我从firestore中检索视频,但在其中,我制作了视频数组并尝试检索它,但它给了我一个错误,如果我使用字符串而不是数组,它看起来很好,但在我的项目中,我需要数组,所以请帮助我指出

代码:1 main.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添加到我的案例集合(课程)。文档(视频)中,因此这里的视频是一种数组类型,当我检索它时,我发现了错误,如果可能,还请向我提供带有更正的代码。