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 messages = []; late final int typeId; final Map> dailyMessages = {}; File? recordedFile; bool isRecording = false; Future 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 startRecording() async { await _recorder.hasPermission(); if (!kIsWeb) { Vibrate.feedback(FeedbackType.medium); } isRecording = true; _recorder.start(); notifyListeners(); } Future 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 sendMessage() async {} }