83 lines
2.2 KiB
Dart
83 lines
2.2 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:didvan/models/enums.dart';
|
|
import 'package:didvan/models/message_data/message_data.dart';
|
|
import 'package:didvan/providers/core_provider.dart';
|
|
import 'package:didvan/services/network/request.dart';
|
|
import 'package:didvan/services/network/request_helper.dart';
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter_vibrate/flutter_vibrate.dart';
|
|
import 'package:record/record.dart';
|
|
|
|
class DirectState extends CoreProvier {
|
|
final _recorder = Record();
|
|
final List<MessageData> messages = [];
|
|
late final int typeId;
|
|
final Map<String, List<int>> dailyMessages = {};
|
|
|
|
File? recordedFile;
|
|
|
|
bool isRecording = false;
|
|
|
|
Future<void> getMessages() async {
|
|
appState = AppState.busy;
|
|
final RequestService service = RequestService(RequestHelper.direct(typeId));
|
|
await service.httpGet();
|
|
if (service.isSuccess) {
|
|
final messageDatas = service.result['messages'];
|
|
for (var i = 0; i < messageDatas.length; i++) {
|
|
messages.add(MessageData.fromJson(messageDatas[i]));
|
|
final createdAt = messages.last.createdAt.split('T').first;
|
|
if (!dailyMessages.containsKey(createdAt)) {
|
|
dailyMessages.addAll({
|
|
createdAt: [messages.last.id]
|
|
});
|
|
} else {
|
|
dailyMessages[createdAt]!.add(messages.last.id);
|
|
}
|
|
}
|
|
appState = AppState.idle;
|
|
return;
|
|
}
|
|
appState = AppState.failed;
|
|
}
|
|
|
|
void deleteRecordedFile() {
|
|
recordedFile!.delete();
|
|
recordedFile = null;
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> startRecording() async {
|
|
await _recorder.hasPermission();
|
|
if (!kIsWeb) {
|
|
Vibrate.feedback(FeedbackType.medium);
|
|
}
|
|
isRecording = true;
|
|
_recorder.start();
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> stopRecording(bool sendImidiately) async {
|
|
final path = await _recorder.stop();
|
|
isRecording = false;
|
|
if (path == null) {
|
|
notifyListeners();
|
|
return;
|
|
}
|
|
if (kIsWeb) {
|
|
final uri = Uri.file(path);
|
|
recordedFile = File.fromUri(uri);
|
|
} else {
|
|
recordedFile = File(path);
|
|
}
|
|
if (sendImidiately) {
|
|
await sendMessage();
|
|
} else {
|
|
notifyListeners();
|
|
}
|
|
}
|
|
|
|
Future<void> sendMessage() async {}
|
|
}
|