import 'dart:io';

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

void main() {
  runApp(
    MaterialApp(
      home: VideoPicker(),
    ),
  );
}

class VideoPicker extends StatefulWidget {
  @override
  _VideoPickerState createState() => _VideoPickerState();
}

class _VideoPickerState extends State {
  XFile? _pickedFile;
  final picker = ImagePicker();

  Future getVideo() async {
    var v = ImageSource.gallery;
    XFile? pickedFile = await picker.pickVideo(source: v);

    setState(() {
      if (pickedFile != null) {
        _pickedFile = pickedFile;
        initializeVideo();
      } else {
        print('No image selected.');
      }
    });
  }

  void initializeVideo() {
    if (_pickedFile != null) {
      if (kIsWeb) {
        _controller = VideoPlayerController.network(_pickedFile!.path);
      } else {
        _controller = VideoPlayerController.file(File(_pickedFile!.path));
      }
      _controller.initialize().then((value) => setState(() {}));
    } else {
      _controller = VideoPlayerController.file(File(''));
    }
  }

  late VideoPlayerController _controller;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    initializeVideo();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('Image Picker Example'),
        ),
        body: Center(
          child: Builder(
            builder: (c) {
              if (_pickedFile == null) return Text('Select Video!');
              return VideoPlayer(_controller);
            },
          ),
        ),
        floatingActionButton: Row(
          mainAxisAlignment: MainAxisAlignment.end,
          children: [
            FloatingActionButton(
              onPressed: () {
                getVideo();
              },
              tooltip: 'Pick Video',
              child: Icon(Icons.add_a_photo),
            ),
            SizedBox(
              width: 20,
            ),
            FloatingActionButton(
              onPressed: () {
                setState(() {
                  // If the video is playing, pause it.
                  if (_controller.value.isPlaying) {
                    _controller.pause();
                  } else {
                    // If the video is paused, play it.
                    _controller.play();
                  }
                });
              },
              tooltip: 'Pick Video',
              child: Icon(
                _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
              ),
            ),
          ],
        ));
  }
}

image_picker 0.8.5+3

image_picker_for_web 2.1.8

같이