基于滚动值的 Flutter Web 视频播放

Posted

技术标签:

【中文标题】基于滚动值的 Flutter Web 视频播放【英文标题】:Flutter Web Video Plays based on scrolling values 【发布时间】:2021-12-16 10:12:24 【问题描述】:

我正在开发一个仅显示全屏视频的 Flutter 网站。现在,该视频不会自动播放,也不会使用播放/暂停按钮;相反,tt 会根据用户的滚动来寻找视频。

我尝试的是获取视频播放器控制器和滚动控制器,并使用视频控制器的 seek 方法,在其侦听器中传递 scrollController 值。

问题是我应该在哪里使用这个滚动控制器

ListViewSingleChildScrollView 需要内容来获取滚动值,但我只有全屏视频。我仍在探索许多选项,例如 GestureDetector 中的 verticalDrag 等。任何指导或解决方案都会非常有帮助。

【问题讨论】:

很好的问题,关于使用视频控制器寻找的好想法。你很亲近!让我为你写一个小演示。 【参考方案1】:

您可以为此使用Listener 小部件,并监听PointerScrollEvent

  Listener(
    onPointerSignal: (event) 
      if (event is PointerScrollEvent) 
        print('user scrolled: $event.scrollDelta');
      
    ,
    child: FlutterLogo(size: 2000),
  )

演示:

完整源代码:

import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';

void main() 
  runApp(const MyApp());


class MyApp extends StatelessWidget 
  const MyApp(Key? key) : super(key: key);

  @override
  Widget build(BuildContext context) 
    return const MaterialApp(
      title: 'Flutter Demo',
      home: MyHomePage(),
    );
  


class MyHomePage extends StatefulWidget 
  const MyHomePage(Key? key) : super(key: key);

  @override
  State<MyHomePage> createState() => _MyHomePageState();


class _MyHomePageState extends State<MyHomePage> 
  double _value = 0.5;

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(title: const Text('Flutter Demo')),
      body: Center(
        child: Listener(
          onPointerSignal: (event) 
            if (event is PointerScrollEvent) 
              print('user scrolled: $event.scrollDelta');
              setState(() 
                _value += event.scrollDelta.dy / 1000;
                _value = _value.clamp(0.0, 1.0);
              );
            
          ,
          child: LinearProgressIndicator(
            minHeight: 400,
            value: _value,
          ),
        ),
      ),
    );
  

【讨论】:

这正是我所需要的。我对这些值做了一些数学运算,它奏效了。谢谢!

以上是关于基于滚动值的 Flutter Web 视频播放的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 中用于 Web、移动和桌面应用程序的视频播放器?

使用 Flutter Web 和 Firebase 存储播放视频

Flutter Web - 播放 uint8list n 视频播放器

当网页(由 Flutter for Web 创建)向上或向下滚动时,嵌入式 Youtube 视频小部件消失

Flutter开发--视频播放器

flutter视频播放videoplayer与chewie