我嘗試使用一些代碼從資料庫 mysql 中獲取視頻。但我對“chewiecontroller”有問題尚未初始化我曾嘗試用“ChewieController? 咀嚼控制器'但仍然錯誤。這個問題的任何解決方案?
這是我當前的代碼:
import 'package:chewie/chewie.dart';
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
class PlayVideoChewie extends StatefulWidget {
final String url;
const PlayVideoChewie({required this.url});
@override
State<PlayVideoChewie> createState() => _PlayVideoChewieState();
}
class _PlayVideoChewieState extends State<PlayVideoChewie> {
late VideoPlayerController videoPlayerController;
late ChewieController chewieController;
Future initializeVideo() async {
videoPlayerController = VideoPlayerController.network(widget.url);
await videoPlayerController.initialize();
chewieController = ChewieController(
videoPlayerController: videoPlayerController,
autoPlay: true,
looping: true,
);
setState(() { });
}
@override
void initState() {
initializeVideo();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Playvid"),
),
body: Container(
height: 250,
child: chewieController != null &&
chewieController.videoPlayerController.value.isInitialized
? Chewie(
controller: chewieController,
)
: Container(
child: CircularProgressIndicator(),
),
),
);
}
@override
void dispose() {
videoPlayerController.dispose();
chewieController.dispose();
super.dispose();
}
}
任何幫助對我來說都是有價值的。謝謝你。
uj5u.com熱心網友回復:
因為你必須
await videoPlayerController.initialize();
之后,chewieController 才初始化,因此會導致錯誤。像這樣改變它:
class _PlayVideoChewieState extends State<PlayVideoChewie> {
late VideoPlayerController videoPlayerController;
ChewieController? chewieController;
Future initializeVideo() async {
videoPlayerController = VideoPlayerController.network(widget.url);
await videoPlayerController.initialize();
chewieController = ChewieController(
videoPlayerController: videoPlayerController,
autoPlay: true,
looping: true,
);
setState(() { });
}
@override
void initState() {
initializeVideo();
super.initState();
}
@override
Widget build(BuildContext context) {
if (chewieController == null) {
return Container(
child: CircularProgressIndicator(),
);
}
return Scaffold(
appBar: AppBar(
title: Text("Playvid"),
),
body: Container(
height: 250,
child: Chewie(
controller: chewieController!,
),
),
);
}
@override
void dispose() {
videoPlayerController.dispose();
chewieController?.dispose();
super.dispose();
}
}
uj5u.com熱心網友回復:
您是否嘗試像這樣宣告這兩個變數?
ChewieController? chewieController;
VideoPlayerController? videoPlayerController;
uj5u.com熱心網友回復:
如果第一次構建需要它的結果,這是您呼叫Futurefrom時的常見問題。initState該initState函式不是異步的,因此您不能使用await等待initializeVideo(). 所以發生的情況是該build方法將在初始化之前運行chewieController。
FutureBuilder正確的解決方案是在方法中實作 a build。
lateInitalization即使您嘗試使用以下行進行檢查,您也會收到錯誤訊息,因為使用late關鍵字如果您讀取尚未設定的變數,它將引發錯誤:
if (chewieController == null)
請參閱有關如何創建FutureBuilder.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/515982.html
標籤:扑镖
