|
@@ -5,9 +5,10 @@ import 'package:electronic_assistant/data/api/atmob_file_api.dart';
|
|
|
import 'package:electronic_assistant/data/api/request/talk_create_request.dart';
|
|
import 'package:electronic_assistant/data/api/request/talk_create_request.dart';
|
|
|
import 'package:electronic_assistant/data/api/request/talk_delete_request.dart';
|
|
import 'package:electronic_assistant/data/api/request/talk_delete_request.dart';
|
|
|
import 'package:electronic_assistant/data/api/request/talk_file_request.dart';
|
|
import 'package:electronic_assistant/data/api/request/talk_file_request.dart';
|
|
|
-import 'package:flutter/cupertino.dart';
|
|
|
|
|
|
|
+import 'package:flutter_foreground_task/flutter_foreground_task.dart';
|
|
|
import 'package:get/get.dart';
|
|
import 'package:get/get.dart';
|
|
|
|
|
|
|
|
|
|
+import '../../utils/foreground_util.dart';
|
|
|
import '../../utils/http_handler.dart';
|
|
import '../../utils/http_handler.dart';
|
|
|
import '../api/request/talk_generate_request.dart';
|
|
import '../api/request/talk_generate_request.dart';
|
|
|
import '../api/request/talk_paginate_request.dart';
|
|
import '../api/request/talk_paginate_request.dart';
|
|
@@ -145,6 +146,11 @@ class TalkRepository {
|
|
|
|
|
|
|
|
Future<String> uploadTalkFile(String talkId, double duration, File file) {
|
|
Future<String> uploadTalkFile(String talkId, double duration, File file) {
|
|
|
_uploadingTalkIds.add(talkId);
|
|
_uploadingTalkIds.add(talkId);
|
|
|
|
|
+ startForegroundService(
|
|
|
|
|
+ serviceId: talkId.hashCode,
|
|
|
|
|
+ notificationTitle: '正在上传录音',
|
|
|
|
|
+ notificationText: '请勿关闭应用',
|
|
|
|
|
+ callback: setUploadCallback);
|
|
|
_uploadingTalkProgress[talkId] = RxDouble(0);
|
|
_uploadingTalkProgress[talkId] = RxDouble(0);
|
|
|
return atmobFileApi
|
|
return atmobFileApi
|
|
|
.uploadTalkFile(TalkFileRequest(talkId, duration, file: file).toJson(),
|
|
.uploadTalkFile(TalkFileRequest(talkId, duration, file: file).toJson(),
|
|
@@ -163,6 +169,9 @@ class TalkRepository {
|
|
|
.catchError((error) {
|
|
.catchError((error) {
|
|
|
_uploadingTalkIds.remove(talkId);
|
|
_uploadingTalkIds.remove(talkId);
|
|
|
throw error;
|
|
throw error;
|
|
|
|
|
+ })
|
|
|
|
|
+ .whenComplete(() {
|
|
|
|
|
+ stopForegroundService();
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -174,4 +183,29 @@ class TalkRepository {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+class UploadTaskHandler extends TaskHandler {
|
|
|
|
|
+ @override
|
|
|
|
|
+ Future<void> onDestroy(DateTime timestamp) {
|
|
|
|
|
+ // TODO: implement onDestroy
|
|
|
|
|
+ return Future.value();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @override
|
|
|
|
|
+ void onRepeatEvent(DateTime timestamp) {
|
|
|
|
|
+ // TODO: implement onRepeatEvent
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @override
|
|
|
|
|
+ Future<void> onStart(DateTime timestamp, TaskStarter starter) {
|
|
|
|
|
+ // TODO: implement onStart
|
|
|
|
|
+ return Future.value();
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+@pragma('vm:entry-point')
|
|
|
|
|
+void setUploadCallback() {
|
|
|
|
|
+ // The setTaskHandler function must be called to handle the task in the background.
|
|
|
|
|
+ FlutterForegroundTask.setTaskHandler(UploadTaskHandler());
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
final talkRepository = TalkRepository._();
|
|
final talkRepository = TalkRepository._();
|