mobile_audio_recorder 1.0.0+1 mobile_audio_recorder: ^1.0.0+1 copied to clipboard
A new flutter plugin project.
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:mobile_audio_recorder/mobile_audio_recorder.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final _controller = TextEditingController(text: '192.168.251.50:8964');
bool _isWorking = false;
bool get isWorking => _isWorking;
bool get isNotWorking => !_isWorking;
bool _isRecording = false;
Socket _socket;
dynamic _error;
String _format = FormatAAC;
@override
void dispose() {
_stop();
super.dispose();
}
_start() async {
setState(() {
_isWorking = true;
_error = null;
});
try {
// connect server
final address = _controller.text.trim();
final index = address.indexOf(':');
final host = address.substring(0, index);
final port = int.parse(address.substring(index + 1));
_socket = await Socket.connect(host, port);
// start recording
await MobileAudioRecorder.start(
format: _format,
onData: (buffer) {
//debugPrint('send ${buffer.length}');
_socket?.add(buffer);
},
);
setState(() {
_isRecording = true;
_isWorking = false;
});
} catch (e) {
if (_socket != null) {
_socket.close();
_socket = null;
}
setState(() {
_isWorking = false;
_error = e;
});
debugPrint('$e');
}
}
_stop() async {
setState(() {
_isWorking = true;
_error = null;
});
try {
await MobileAudioRecorder.stop();
if (_socket != null) {
_socket.close();
_socket = null;
}
setState(() {
_isWorking = false;
_isRecording = false;
});
} catch (e) {
setState(() {
_isWorking = false;
_error = e;
});
debugPrint('$e');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('mobile recorder test'),
),
body: ListView(
children: <Widget>[
TextFormField(
readOnly: isWorking,
controller: _controller,
decoration: InputDecoration(
labelText: 'server address',
prefixIcon: Icon(Icons.network_cell),
),
),
FlatButton(
child: Text("start"),
onPressed: isWorking ? null : _start,
),
FlatButton(
child: Text("stop"),
onPressed: isWorking ? null : _stop,
),
Icon(_isRecording ? Icons.mic : Icons.mic_off),
Column(
children: MobileAudioRecorder.formats
.map<Widget>(
(format) => RadioListTile(
title: Text(format),
value: format,
groupValue: _format,
onChanged: isWorking | _isRecording
? null
: (val) {
setState(() {
_format = val;
});
}),
)
.toList(),
),
Offstage(
offstage: _error == null,
child: Container(
padding: EdgeInsets.all(5),
child: Text(
'$_error',
style: TextStyle(color: Theme.of(context).errorColor),
),
),
),
],
),
),
);
}
}