mms 1.1.0 copy "mms: ^1.1.0" to clipboard
mms: ^1.1.0 copied to clipboard

A new flutter plugin project.

example/lib/main.dart

import 'dart:io';

import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
import 'dart:async';

import 'package:mms/mms.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';

List<CameraDescription> cameras;

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  cameras = await availableCameras();
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  CameraController _controller;
  String _videoPath;

  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();

  @override
  void initState() {
    super.initState();

    _controller = CameraController(cameras[0], ResolutionPreset.medium);
    _controller.initialize().then((value) {
      if (!mounted) {
        return;
      }
      setState(() {

      });
    });
  }

  @override
  void dispose() {
    _controller?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        key: _scaffoldKey,
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Column(
          children: [
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              mainAxisSize: MainAxisSize.max,
              children: <Widget>[
                IconButton(
                  icon: const Icon(Icons.videocam),
                  color: Colors.blue,
                  onPressed: _controller != null &&
                      _controller.value.isInitialized &&
                      !_controller.value.isRecordingVideo
                      ? onVideoRecordButtonPressed
                      : null,
                ),
                IconButton(
                  icon: const Icon(Icons.stop),
                  color: Colors.red,
                  onPressed: _controller != null &&
                      _controller.value.isInitialized &&
                      _controller.value.isRecordingVideo
                      ? onSendDirectlyButtonPressed
                      : null,
                )
              ],
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              mainAxisSize: MainAxisSize.max,
              children: <Widget>[
                IconButton(
                  icon: const Icon(Icons.stop),
                  color: Colors.yellow,
                  onPressed: _controller != null &&
                      _controller.value.isInitialized &&
                      _controller.value.isRecordingVideo
                      ? onUseDefaultButtonPressed
                      : null,
                )
              ],
            ),
          ],
        ),
      ),
    );
  }

  void showInSnackBar(String message) {
    // ignore: deprecated_member_use
    _scaffoldKey.currentState.showSnackBar(SnackBar(content: Text(message)));
  }

  String timestamp() => DateTime.now().millisecondsSinceEpoch.toString();

  void logError(String code, String message) =>
      print('Error: $code\nError Message: $message');

  void onVideoRecordButtonPressed() {
    startVideoRecording().then((String filePath) {
      if (mounted) setState(() {});
      if (filePath != null) showInSnackBar('Saving video to $filePath');
    });
  }

  void onSendDirectlyButtonPressed() {
    stopVideoRecording().then((_) {
      if (mounted) setState(() {});
      showInSnackBar('Video recorded to: $_videoPath');
      Permission.sms.request().isGranted.then((value) {

        // Add phone number(s) as a string here in a list (e.g. ['123-456-7890'])
        Mms().sendVideo(_videoPath, ['']);
      });
    });
  }

  void onUseDefaultButtonPressed() {
    stopVideoRecording().then((_) {
      if (mounted) setState(() {});
      showInSnackBar('Video recorded to: $_videoPath');
      Permission.sms.request().isGranted.then((value) {

        // Add phone number(s) as a string here in a list (e.g. ['123-456-7890'])
        Mms().sendVideoWithDefaultApp("Test", _videoPath, ['1234567890']);
      });
    });
  }

  Future<String> startVideoRecording() async {
    if (!_controller.value.isInitialized) {
      showInSnackBar('Error: select a camera first.');
      return null;
    }

    Directory baseDir;
    if (Platform.isIOS) {
      baseDir = await getApplicationDocumentsDirectory();
    } else {
      baseDir = await getExternalStorageDirectory();
    }
    final String dirPath = '${baseDir.path}/Movies/flutter_test';
    await Directory(dirPath).create(recursive: true);
    final String filePath = '$dirPath/${timestamp()}.mp4';

    if (_controller.value.isRecordingVideo) {
      // A recording is already started, do nothing.
      return null;
    }

    try {
      _videoPath = filePath;
      await _controller.startVideoRecording(filePath);
    } on CameraException catch (e) {
      _showCameraException(e);
      return null;
    }
    return filePath;
  }

  Future<void> stopVideoRecording() async {
    if (!_controller.value.isRecordingVideo) {
      return null;
    }

    try {
      await _controller.stopVideoRecording();
    } on CameraException catch (e) {
      _showCameraException(e);
      return null;
    }
  }

  void _showCameraException(CameraException e) {
    logError(e.code, e.description);
    showInSnackBar('Error: ${e.code}\n${e.description}');
  }
}
0
likes
30
pub points
0%
popularity

Publisher

unverified uploader

A new flutter plugin project.

Repository (GitHub)
View/report issues

License

MIT (LICENSE)

Dependencies

flutter, mms_platform_interface

More

Packages that depend on mms