Flutter VideoPlayercontroller сбрасывает инициализацию - почему VideoPlayerCrontroller ведет себя странно? - PullRequest
0 голосов
/ 29 марта 2020

У меня проблема с плагином flutter video_player. Первая проблема заключается в том, что мне нужен эскиз, и я использую для этого video_player, но он каким-то образом инициализируется, а затем не инициализируется во второй сборке.

import 'dart:io';

import 'package:flutter/material.dart';

import 'package:video_player/video_player.dart';

class MyVideoThumbnail extends StatefulWidget {

  MyVideoThumbnail({File file}) : videoPlayerController = VideoPlayerController.file(file);

  final VideoPlayerController videoPlayerController;

  @override
  State<StatefulWidget> createState() => _MyVideoThumbnailState();
}

class _MyVideoThumbnailState extends State<MyVideoThumbnail> {

  @override
  void initState() {
    super.initState();
    widget.videoPlayerController.addListener(() => setState(() {}));
    widget.videoPlayerController.initialize();
  }

  @override
  void dispose() {
    super.dispose();
    widget.videoPlayerController.dispose();
  }

  @override
  Widget build(BuildContext context) {
    print('hashCode:${this.hashCode} - initState:${widget.videoPlayerController.value.initialized}'); // ----> this is the important print statement
    return widget.videoPlayerController.value.initialized ?
      AspectRatio(
        aspectRatio: widget.videoPlayerController.value.aspectRatio,
        child: Stack(
          alignment: Alignment.bottomRight,
          children: <Widget>[
            VideoPlayer(widget.videoPlayerController),
            Text(
                _printDuration(widget.videoPlayerController.value.duration),
                style: TextStyle(
                  color: Colors.grey,
                )
            )
          ],
        ),
      ) : Padding(
        padding: const EdgeInsets.all(25.0),
        child: CircularProgressIndicator(),
    );
  }

  String _printDuration(Duration duration) {
    if (duration == null) {
      return '00:00';
    }
    String twoDigits(int n) {
      if (n >= 10) return "$n";
      return "0$n";
    }

    String twoDigitMinutes = twoDigits(duration.inMinutes.remainder(60));
    String twoDigitSeconds = twoDigits(duration.inSeconds.remainder(60));
    String twoDigitHours = twoDigits(duration.inHours);
    return "${twoDigitHours == '00' ? '' : twoDigitHours + ':'}$twoDigitMinutes:$twoDigitSeconds";
  }
}

Важной частью является вывод этого:

flutter: hashCode:203704917 - initState:false
flutter: hashCode:203704917 - initState:true
flutter: hashCode:203704917 - initState:true
flutter: hashCode:203704917 - initState:false

Почему сначала это правда, а потом снова ложь? Что я делаю не так?

...