错误:没有名称为“videoId”youtube_player_iframe的命名参数

问题描述 投票:0回答:1

我已经面对这个问题一个多月了,到目前为止我还没有找到解决方案。我搜索并使用过 ChatGPT、Google Bard、Github Copilot 等人工智能工具,但都无法提供合适的解决方案。

在使用“flutter run”构建项目时,由于使用“youtube_player_iframe”,我遇到了几个问题。

我已经解决了大部分问题,但有一个问题我还没有解决。错误如下:

lib/screens/items/youtube_videos.dart:28:13: Error: No named parameter with the name 'videoId'.
            videoId:
            ^^^^^^^
/C:/Users/Sheko/AppData/Local/Pub/Cache/hosted/pub.dev/youtube_player_iframe-4.0.4/lib/src/controller/youtube_player_controller.dart:27:3: Context: Found this candidate, but the arguments don't match.
  YoutubePlayerController({
  ^^^^^^^^^^^^^^^^^^^^^^^
Target kernel_snapshot failed: Exception

失败:构建已完成,但有 2 次失败。

版本:

  • Flutter:3.18.0-0.2.pre • 通道测试版
  • Dart:3.3.0-174.3.beta
  • youtube_player_iframe:5.0.0

这是出现问题的“youtube_videos.dart”文件。

import 'package:flutter/material.dart';
import 'package:youtube_player_iframe/youtube_player_iframe.dart';
import 'package:be_app_mobile/models/side_item.dart';
import 'package:be_app_mobile/models/general.dart';
import 'package:be_app_mobile/helpers/font_helper.dart';

class YouTubeVideos extends StatefulWidget {
  const YouTubeVideos({Key? key, required this.item, required this.general})
      : super(key: key);

  final SideItem item;
  final General general;

  @override
  State<YouTubeVideos> createState() => _YouTubeVideosState();
}

class _YouTubeVideosState extends State<YouTubeVideos> {
  double size = 0.0;
  late List<YoutubePlayerController> _controllers;

  @override
  void initState() {
    super.initState();
    _controllers = widget.item.youtubeVideos
        .map<YoutubePlayerController>(
          (video) => YoutubePlayerController(
            videoId:
                YoutubePlayerController.convertUrlToId(video.videoUrl) ?? '',
            params: YoutubePlayerParams(
              showControls: !video.hideControls,
              showFullscreenButton: true,
              loop: video.isLive,
            ),
          ),
        )
        .toList();
  }

  @override
  void dispose() {
    for (var controller in _controllers) {
      controller.close();
    }
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: widget.general.getApplicationColor(),
      body: Stack(
        children: [
          ListView.separated(
            itemBuilder: (context, index) {
              return Column(
                children: [
                  YoutubePlayer(
                    controller: _controllers[index],
                    aspectRatio: 16 / 9,
                  ),
                  Stack(
                    children: [
                      Container(
                        color: Colors.black,
                        height: 80,
                      ),
                      Padding(
                        padding: const EdgeInsets.symmetric(horizontal: 10),
                        child: Text(
                          widget.item.youtubeVideos[index].videoTitle,
                          overflow: TextOverflow.ellipsis,
                          maxLines: 2,
                          style: getFontStyle(16, Colors.white,
                              FontWeight.normal, widget.general),
                        ),
                      ),
                    ],
                  )
                ],
              );
            },
            itemCount: _controllers.length,
            separatorBuilder: (context, _) {
              return SizedBox(height: size);
            },
          ),
        ],
      ),
    );
  }
}

我已经面对这个问题一个多月了,到目前为止我还没有找到解决方案。我搜索并使用过 ChatGPT、Google Bard、Github Copilot 等人工智能工具,但都无法提供合适的解决方案。

在使用“flutter run”构建项目时,由于使用“youtube_player_iframe”,我遇到了几个问题。

我已经解决了大部分问题,但有一个问题我还没有解决。错误如下:

lib/screens/items/youtube_videos.dart:28:13: Error: No named parameter with the name 'videoId'.
            videoId:
            ^^^^^^^
/C:/Users/Sheko/AppData/Local/Pub/Cache/hosted/pub.dev/youtube_player_iframe-4.0.4/lib/src/controller/youtube_player_controller.dart:27:3: Context: Found this candidate, but the arguments don't match.
  YoutubePlayerController({
  ^^^^^^^^^^^^^^^^^^^^^^^
Target kernel_snapshot failed: Exception

失败:构建已完成,但有 2 次失败。

android flutter dart youtube-player-flutter
1个回答
0
投票

查看文档,您可以看到 YoutubeVideoController 有一个名为 initialVideoId:

的命名参数
YoutubePlayerController _controller = YoutubePlayerController(
    initialVideoId: 'iLnmTe5Q2Qw',  /// <------------ HERE
    flags: YoutubePlayerFlags(
        autoPlay: true,
        mute: true,
    ),
);

因此,您需要使用它,因为没有像 videoId 这样的命名参数。

这也可以在项目本身内部得到证明:

 YoutubePlayerController({
    required this.initialVideoId,
    this.flags = const YoutubePlayerFlags(),
  }) : super(YoutubePlayerValue());
© www.soinside.com 2019 - 2024. All rights reserved.