上下文是TextFormField
和ElevatedButton
。我输入了视频的URL(通常格式为mp4)并按下按钮。下面将显示视频是从这个URL抓取的。我想我应该使用包video_player。但是,在示例代码中,它需要一个initState
上的初始URL(或者onInit,如果使用GetX
包的话)。如何使URL动态化并且只在输入URL后显示?
class CyberDropController extends GetxController with StateMixin<List> {
final dataCyberDrop = DataCyberDrop();
late VideoPlayerController videoController;
var url = ''.obs;
@override
void onInit() {
super.onInit();
playVideo(url.value);
change(null, status: RxStatus.empty());
}
Future<void> playVideo(String url) async {
videoController = VideoPlayerController.network(url);
await videoController.initialize();
await videoController.setLooping(true);
await videoController.play();
update();
}
void fetch({String? link}) async {
change(null, status: RxStatus.loading());
try {
var data = await dataCyberDrop.scraperCyberDrop(link: link);
change(data, status: RxStatus.success());
} catch (e) {
change(null, status: RxStatus.error(e.toString()));
}
}
}
浏览次数:
controller.obx(
(state) => Column(
children: state!
.map(
(e) => e!.toString().contains('.mp4')
? AspectRatio(
aspectRatio: controller
.videoController.value.aspectRatio,
child: VideoPlayer(controller.videoController),
)
: Image.network(e),
)
.toList(),
1条答案
按热度按时间sdnqo3pr1#
既然您说您正在使用
TextFormField
,那么就可以在设置URL之后使用onChanged
属性来执行您的方法: