flutter_simple_record_and_player 1.0.0+0.4 copy "flutter_simple_record_and_player: ^1.0.0+0.4" to clipboard
flutter_simple_record_and_player: ^1.0.0+0.4 copied to clipboard

It is very simple to use recording and playback voice, supports Android and Apple, and has its own permission acquisition control

example/lib/main.dart

import 'dart:io';

import 'package:audioplayer/audioplayer.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_simple_record_and_player/fluttersimplerecordandplayer.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';

void main() {
  runApp(new MyApp());
}

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

class _MyAppState extends State<MyApp> {
  String path = '';

  AudioPlayer _audioPlayer;

  String currentTime = '0:0';
  String allTime = '0:0';

  SimpleSoundRecordAndPlayer _recordAndPlayer;

  Duration allDate;
  @override
  void initState() {
    super.initState();
    _recordAndPlayer = SimpleSoundRecordAndPlayer();
    _recordAndPlayer.onAudioPlayerPositionChanged.listen((event) {
      setState(() {
        currentTime = '${event.inMinutes}:${event.inSeconds}';
      });
    });

    _audioPlayer = new AudioPlayer();
    _audioPlayer.onAudioPositionChanged.listen((duration) {
      setState(() {
        currentTime = '${duration.inMinutes}\'${duration.inSeconds % 60}\'\'';
      });
    });
    _audioPlayer.onPlayerStateChanged.listen((event) {
      print('状态变更:${event.toString()}');
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
//      type: MaterialType.card,
      home: Scaffold(
        appBar: AppBar(
          title: Text('title'),
        ),
        body: Container(
          alignment: Alignment.center,
          child: Column(
            children: <Widget>[
              FlatButton(
                onPressed: () async {
                  try {
                    _recordAndPlayer.startRecord(null, (error) {
                      print(error);
                    });
                  } catch (e) {
                    print(e);
                  }
                },
                child: Text('开始'),
              ),
              FlatButton(
                onPressed: () async {
                  bool s = _recordAndPlayer.stopRecord;
                  print('结束:$s');
                },
                child: Text('结束'),
              ),
              Text(path),
              FlatButton(
                onPressed: () async {
                  String s = _recordAndPlayer.recordListPath.last;
                  print('mp3URL:$s');
                  _recordAndPlayer.play(s, isLocal: true);
                },
                child: Text('play'),
              ),
              FlatButton(
                onPressed: () async {
//                  bool s = await RecordMp3.instance.stop();
//                  _audioPlayer?.pause();
                  _recordAndPlayer?.pausePlay();
                },
                child: Text('暂停'),
              ),
              FlatButton(
                onPressed: () async {
//                  bool s = await RecordMp3.instance.stop();
                  _recordAndPlayer?.stopPlay();
                },
                child: Text('结束'),
              ),
              Text('$currentTime/${_recordAndPlayer?.duration}'),
              Text(
                  '$currentTime/${_audioPlayer?.duration.inMinutes}\'${_audioPlayer?.duration.inSeconds % 60}\'\''),
              FlatButton(
                onPressed: () async {
                  _recordAndPlayer.play(
                      'http://music.163.com/song/media/outer/url?id=1447126763.mp3',
                      isLocal: false);
                },
                child: Text('播放网络语音'),
              ),
              FlatButton(
                onPressed: () async {
                  final f = await _recordAndPlayer.getRecordLastData;
                  print('$f');
                },
                child: Text('输出最后文件'),
              ),
              FlatButton(
                onPressed: () async {
                  _recordAndPlayer.clearDiskCache();
                },
                child: Text('清空文件目录'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  Future<bool> fileExists(String path) async {
    return await File(path).exists();
  }

  Future<String> _createPath() async {
    String p = await _getPath();
    final date = DateTime.now();

    final directory = Directory(p);
    if (directory.existsSync() == false) {
      final success = await directory.create();
      if (success != null) {
        return '$p/${date.year}${date.month}${date.day}${date.hour}${date.minute}${date.second}.mp3';
      }
    }
    return '$p/${date.year}${date.month}${date.day}${date.hour}${date.minute}${date.second}.mp3';
  }

  Future<String> _getPath() async {
    final p = await getTemporaryDirectory();
    print(p);
    return p.path + '/mp3';
  }

  void _play(String path) {}
}
2
likes
25
pub points
0%
popularity

Publisher

unverified uploader

It is very simple to use recording and playback voice, supports Android and Apple, and has its own permission acquisition control

Homepage
Repository (GitHub)
View/report issues

License

MIT (LICENSE)

Dependencies

audioplayer, flutter, path_provider, permission_handler, record_mp3

More

Packages that depend on flutter_simple_record_and_player