使代码在小部件创建混乱时运行

时间:2020-07-04 01:14:27

标签: flutter dart

我有一个抖动相机应用程序,能够播放录制的视频。问题是,我只能在按下按钮时才能播放它。如何创建创建窗口小部件(屏幕)而不是按下按钮时运行的代码,而不必按下按钮即可播放?这是我的代码:

这是按下按钮时的代码:

//raised button
    RaisedButton(
          onPressed: () {stopButtonPressed();},

//stopButtonPressed
void stopButtonPressed() {
          print('stopButtonPressed hit');
          stopVideoRecording().then((_) {
            print('StopVideoRecording complete');
          });
        }


//stopVideoRecording
Future<void> stopVideoRecording() async {
          print('stopVideoRecording hit');
          await _startVideoPlayer();
        }


//_startVideoPlayer

Future<void> _startVideoPlayer() async {
          print('_startVideoPlayer hit');
          print(Provider.of<SendDataModel>(context, listen: false).displayImageVideo());
          final VideoPlayerController vcontroller =
            VideoPlayerController.file(File(Provider.of<SendDataModel>(context, listen: false).displayImageVideo()));
          videoPlayerListener = () {
            if (videoController != null && videoController.value.size != null) {
              if (mounted) setState(() {});
              videoController.removeListener(videoPlayerListener);
            }
          };
          vcontroller.addListener(videoPlayerListener);
          await vcontroller.setLooping(true);
          await vcontroller.initialize();
          await videoController?.dispose();
          if (mounted) {
            setState(() {
              //saveImagePath = null;
              videoController = vcontroller;
            });
          }
          await vcontroller.play();
        }  //startVideoPlayer

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以从initState()调用该函数。 initState()仅在将StatefulWidget插入到窗口小部件树中时才被调用一次,因此,它是初始化变量或执行您要执行的操作的好地方。

class _MyHomePageState extends State<MyHomePage> {
 
  @override
  void initState() {
    super.initState();
    // Do anything you need done here
    _startVideoPlayer();

    // If you want a slight delay, use Future.delayed

    Future.delayed(Duration(seconds: 1), (){
        _startVideoPlayer();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
    // rest of app
相关问题