Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 获取小部件创建时运行的代码_Flutter_Dart - Fatal编程技术网

Flutter 获取小部件创建时运行的代码

Flutter 获取小部件创建时运行的代码,flutter,dart,Flutter,Dart,我有一个颤振相机应用程序,能够得到一个录制的视频播放。问题是,我只能在按下按钮时让它播放。我如何让代码在创建小部件(屏幕)时运行,而不是在按下按钮时运行,这样我就不必按下按钮来播放它了?这是我的密码: 按下按钮时的代码如下: //raised button RaisedButton( onPressed: () {stopButtonPressed();}, //stopButtonPressed void stopButtonPressed() {

我有一个颤振相机应用程序,能够得到一个录制的视频播放。问题是,我只能在按下按钮时让它播放。我如何让代码在创建小部件(屏幕)时运行,而不是在按下按钮时运行,这样我就不必按下按钮来播放它了?这是我的密码:

按下按钮时的代码如下:

//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

//升起的按钮
升起的按钮(
按下时:(){stopButtonPressed();},
//停止按钮按下
void stopButtonPressed(){
打印(“stopButtonPressed hit”);
停止录像(){
打印(“停止录像完成”);
});
}
//停止录像
将来的stopVideoRecording()异步{
打印(“停止录像命中”);
等待startVideoPlayer();
}
//_明星视频播放器
Future\u startVideoPlayer()异步{
打印(“U startVideoPlayer hit”);
print(Provider.of(context,listen:false).displayImageVideo());
最终视频播放器控制器vcontroller=
VideoPlayerController.file(文件(Provider.of(context,listen:false).displayImageVideo());
videoPlayerListener=(){
if(videoController!=null&&videoController.value.size!=null){
如果(已安装)设置状态((){});
videoController.RemovelListener(videoPlayerListener);
}
};
vcontroller.addListener(videoPlayerListener);
等待vcontroller.setLooping(真);
等待vcontroller.initialize();
等待videoController?.dispose();
如果(已安装){
设置状态(){
//saveImagePath=null;
视频控制器=视频控制器;
});
}
等待vcontroller.play();
}//startVideoPlayer

谢谢!

您可以从调用函数。
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
class\u MyHomePageState扩展状态{
@凌驾
void initState(){
super.initState();
//你需要在这里做什么
_startVideoPlayer();
//如果您想稍微延迟,请使用Future.delayed
未来。延迟(持续时间(秒:1),(){
_startVideoPlayer();
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
//应用程序的其余部分