didvan-app/lib/pages/home/direct/direct_state.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 {}
}