Browse Source

[Fix]修复录音页返回,音频录制未暂停问题

zhipeng 1 year ago
parent
commit
fe2cf18b6e
3 changed files with 27 additions and 22 deletions
  1. 14 9
      lib/module/record/controller.dart
  2. 1 1
      lib/module/record/view.dart
  3. 12 12
      pubspec.lock

+ 14 - 9
lib/module/record/controller.dart

@@ -52,7 +52,7 @@ class RecordController extends BaseController {
     var currentRecordFile = await _getCurrentRecordFile();
     var fileLength = currentRecordFile.lengthSync();
     if (currentRecordFile.existsSync() && fileLength > 0) {
-      currentStatus.value = RecordStatus.paused;
+      _changeRecordStatus(RecordStatus.paused);
       currentDuration.value = await _getPcmDuration(
           fileLength, recordConfig.sampleRate, 16, recordConfig.numChannels);
     }
@@ -60,10 +60,10 @@ class RecordController extends BaseController {
 
   void addShortcut() {}
 
-  void onBackClick(BuildContext context) {
+  void onBackClick() {
     if (currentStatus.value == RecordStatus.pending ||
         currentStatus.value == RecordStatus.paused) {
-      Navigator.pop(context);
+      Get.back();
     } else {
       EAAlertDialog.show(
         title: "是否保存当前录音?",
@@ -75,7 +75,7 @@ class RecordController extends BaseController {
         },
         cancelOnTap: () {
           EAAlertDialog.dismiss();
-          Navigator.pop(context);
+          _stopRecord().then((_) => Get.back());
         },
       );
     }
@@ -123,23 +123,23 @@ class RecordController extends BaseController {
     }
     File targetFile = await _getCurrentRecordFile();
     Stream<Uint8List> recordStream = await record.startStream(recordConfig);
-    currentStatus.value = RecordStatus.recording;
+    _changeRecordStatus(RecordStatus.recording);
     recordStream.listen((data) async {
       targetFile.writeAsBytesSync(data, mode: FileMode.append);
       currentDuration.value = currentDuration.value +
           await _getPcmDuration(data.length, recordConfig.sampleRate, 16,
               recordConfig.numChannels);
     }, onDone: () {
-      currentStatus.value = RecordStatus.paused;
+      _changeRecordStatus(RecordStatus.paused);
     }, onError: (error) {
-      currentStatus.value = RecordStatus.paused;
+      _changeRecordStatus(RecordStatus.paused);
     });
   }
 
   _onRecordPermissionDenied() {}
 
   Future<void> _stopRecord() {
-    return record.stop().then((_) => currentStatus.value = RecordStatus.paused);
+    return record.stop().then((_) => _changeRecordStatus(RecordStatus.paused));
   }
 
   Future<File> _getCurrentRecordFile() async {
@@ -166,7 +166,7 @@ class RecordController extends BaseController {
       }
     }).then((_) {
       currentDuration.value = 0;
-      currentStatus.value = RecordStatus.pending;
+      _changeRecordStatus(RecordStatus.pending);
     });
   }
 
@@ -191,6 +191,11 @@ class RecordController extends BaseController {
     });
   }
 
+  void _changeRecordStatus(RecordStatus status) {
+    currentStatus.value = status;
+    status == RecordStatus.recording ? frameAnimationController.play() : null;
+  }
+
   static Future<File> getRecordFile(String talkId) async {
     Directory documentDir = await getApplicationDocumentsDirectory();
     return File("${documentDir.path}/.atmob/record/$talkId.wav");

+ 1 - 1
lib/module/record/view.dart

@@ -44,7 +44,7 @@ class RecordPage extends BasePage<RecordController> {
             icon: const Icon(Icons.arrow_back_ios_new_rounded),
             color: ColorName.white,
             onPressed: () {
-              controller.onBackClick(context);
+              controller.onBackClick();
             },
           ),
           scrolledUnderElevation: 0,

+ 12 - 12
pubspec.lock

@@ -436,18 +436,18 @@ packages:
     dependency: transitive
     description:
       name: leak_tracker
-      sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a"
+      sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
       url: "https://pub.dev"
     source: hosted
-    version: "10.0.4"
+    version: "10.0.5"
   leak_tracker_flutter_testing:
     dependency: transitive
     description:
       name: leak_tracker_flutter_testing
-      sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8"
+      sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
       url: "https://pub.dev"
     source: hosted
-    version: "3.0.3"
+    version: "3.0.5"
   leak_tracker_testing:
     dependency: transitive
     description:
@@ -492,18 +492,18 @@ packages:
     dependency: transitive
     description:
       name: material_color_utilities
-      sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
+      sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
       url: "https://pub.dev"
     source: hosted
-    version: "0.8.0"
+    version: "0.11.1"
   meta:
     dependency: transitive
     description:
       name: meta
-      sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
+      sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
       url: "https://pub.dev"
     source: hosted
-    version: "1.12.0"
+    version: "1.15.0"
   mime:
     dependency: transitive
     description:
@@ -865,10 +865,10 @@ packages:
     dependency: transitive
     description:
       name: test_api
-      sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f"
+      sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
       url: "https://pub.dev"
     source: hosted
-    version: "0.7.0"
+    version: "0.7.2"
   time:
     dependency: transitive
     description:
@@ -937,10 +937,10 @@ packages:
     dependency: transitive
     description:
       name: vm_service
-      sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec"
+      sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc
       url: "https://pub.dev"
     source: hosted
-    version: "14.2.1"
+    version: "14.2.4"
   watcher:
     dependency: transitive
     description: