mms 1.1.0 mms: ^1.1.0 copied to clipboard
A new flutter plugin project.
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}');
}
}