Flutter Video_player ускоряет перемотку вперед на 10 секунд с помощью seekto не работает

#flutter #flutter-dependencies

#flutter #flutter-зависимости

Вопрос:

Я использую плагин Flutter Video_Player и замечаю некоторые проблемы, когда хочу ускорить перемотку вперед на 10 секунд, поэтому хочу проверить, правильно ли я использую код.

Что я испытываю, так это то, что для быстрой перемотки воспроизведения требуется много времени, если это происходит, то тенденция заключается в том, чтобы снова нажать быструю перемотку вперед, и если я нажимаю ее несколько раз, я замечаю, что звук либо не синхронизирован, либо его больше не слышно.

Вот мой код:

 GestureDetector(
                      onTap: () async {
                        print('FORWARD 10 SECS');
                        await _controller.seekTo(Duration(
                            seconds:
                                _controller.value.position.inSeconds   10));
                      },
 

Я был бы очень признателен, если бы смог получить некоторую помощь в этом, поскольку приложение, над которым я работаю, ориентировано на видео, поэтому эти элементы управления должны работать правильно.

Большое вам спасибо за любую помощь в этом. Если у вас есть какие-либо вопросы, пожалуйста, дайте мне знать.

Ответ №1:

Согласно этой ссылке git. Я думаю, вам не нужно добавлять await _controller.seekTo(Duration(seconds:_controller.value.position.inSeconds 10) . Вместо этого добавьте это await _controller.seekTo((await _controller.position)! Duration(seconds: 10)); . Не уверен, что setState это необходимо.

Ответ №2:

Вам не нужно ждать seekTo(), вот рабочий код: введите описание изображения здесь

Проверьте полный код, надеюсь, это поможет 🙂

 import 'dart:async';

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

void main() => runApp(const VideoPlayerApp());

class VideoPlayerApp extends StatelessWidget {
  const VideoPlayerApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Video Player Demo',
      home: VideoPlayerScreen(),
    );
  }
}

class VideoPlayerScreen extends StatefulWidget {
  const VideoPlayerScreen({Key? key}) : super(key: key);

  @override
  _VideoPlayerScreenState createState() => _VideoPlayerScreenState();
}

class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
  late VideoPlayerController _controller;
  late Future<void> _initializeVideoPlayerFuture;

  @override
  void initState() {
    // Create and store the VideoPlayerController. The VideoPlayerController
    // offers several different constructors to play videos from assets, files,
    // or the internet.
    _controller = VideoPlayerController.network(
      'https://media.w3.org/2010/05/sintel/trailer.mp4',
    );

    // Initialize the controller and store the Future for later use.
    _initializeVideoPlayerFuture = _controller.initialize();

    // Use the controller to loop the video.
    _controller.setLooping(true);

    super.initState();
    _controller.play();
  }

  @override
  void dispose() {
    // Ensure disposing of the VideoPlayerController to free up resources.
    _controller.dispose();

    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Video'),
      ),
      // Use a FutureBuilder to display a loading spinner while waiting for the
      // VideoPlayerController to finish initializing.
      body: FutureBuilder(
        future: _initializeVideoPlayerFuture,
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            // If the VideoPlayerController has finished initialization, use
            // the data it provides to limit the aspect ratio of the video.
            return AspectRatio(
              aspectRatio: _controller.value.aspectRatio,
              // Use the VideoPlayer widget to display the video.
              child: VideoPlayer(_controller),
            );
          } else {
            // If the VideoPlayerController is still initializing, show a
            // loading spinner.
            return const Center(
              child: CircularProgressIndicator(),
            );
          }
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          Duration currentPosition = _controller.value.position;
          Duration targetPosition = currentPosition   const Duration(seconds: 10);
          _controller.seekTo(targetPosition);
        },
        child: const Icon(
          Icons.arrow_forward,
        ),
      ),
    );
  }
}