direct waiting

This commit is contained in:
Amir Hossein Mousavi 2024-09-24 17:40:43 +03:30
parent fbb9db5103
commit 2b1be1989a
5 changed files with 64 additions and 30 deletions

View File

@ -71,6 +71,10 @@ PODS:
- GoogleUtilities/UserDefaults (~> 7.8)
- nanopb (< 2.30911.0, >= 2.30908.0)
- Flutter (1.0.0)
- flutter_background_service_ios (0.0.3):
- Flutter
- flutter_local_notifications (0.0.1):
- Flutter
- flutter_secure_storage (6.0.0):
- Flutter
- flutter_vibrate (0.0.1):
@ -157,6 +161,8 @@ DEPENDENCIES:
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
- Flutter (from `Flutter`)
- flutter_background_service_ios (from `.symlinks/plugins/flutter_background_service_ios/ios`)
- flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
- flutter_vibrate (from `.symlinks/plugins/flutter_vibrate/ios`)
- home_widget (from `.symlinks/plugins/home_widget/ios`)
@ -205,6 +211,10 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/firebase_messaging/ios"
Flutter:
:path: Flutter
flutter_background_service_ios:
:path: ".symlinks/plugins/flutter_background_service_ios/ios"
flutter_local_notifications:
:path: ".symlinks/plugins/flutter_local_notifications/ios"
flutter_secure_storage:
:path: ".symlinks/plugins/flutter_secure_storage/ios"
flutter_vibrate:
@ -252,6 +262,8 @@ SPEC CHECKSUMS:
FirebaseInstallations: 913cf60d0400ebd5d6b63a28b290372ab44590dd
FirebaseMessaging: 7b5d8033e183ab59eb5b852a53201559e976d366
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_background_service_ios: e30e0d3ee69e4cee66272d0c78eacd48c2e94aac
flutter_local_notifications: 4cde75091f6327eb8517fa068a0a5950212d2086
flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be
flutter_vibrate: 9f4c2ab57008965f78969472367c329dd77eb801
GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a
@ -275,7 +287,7 @@ SPEC CHECKSUMS:
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3
wakelock_plus: 78ec7c5b202cab7761af8e2b2b3d0671be6c4ae1
webview_flutter_wkwebview: be0f0d33777f1bfd0c9fdcb594786704dbf65f36
webview_flutter_wkwebview: 2a23822e9039b7b1bc52e5add778e5d89ad488d1
PODFILE CHECKSUM: 76346ded4b0438dd89826a25813fc91ef681eb1f

View File

@ -15,6 +15,7 @@ class MessageData {
final RadarAttachment? radar;
final File? audioFile;
final int? audioDuration;
final double? duration;
MessageData({
required this.id,
@ -27,6 +28,7 @@ class MessageData {
this.radar,
this.audioFile,
this.audioDuration,
this.duration,
});
factory MessageData.fromJson(Map<String, dynamic> json) => MessageData(
@ -36,6 +38,7 @@ class MessageData {
writedByAdmin: json['writedByAdmin'],
readed: json['readed'],
createdAt: json['createdAt'],
duration: json['duration'],
audioDuration: json['waveform'] == null
? null
: jsonDecode(json['waveform'])['duration'] ?? 0,
@ -53,6 +56,7 @@ class MessageData {
'writedByAdmin': writedByAdmin,
'readed': readed,
'createdAt': createdAt,
'duration': duration,
'news': news?.toJson(),
'radar': radar?.toJson(),
};

View File

@ -2,6 +2,7 @@
import 'dart:convert';
import 'dart:developer';
import 'dart:typed_data';
import 'package:didvan/services/storage/storage.dart';
// ignore: depend_on_referenced_packages
@ -160,6 +161,46 @@ class RequestService {
}
}
Future<void> multipartBytes({
required Uint8List file,
required String method,
required String fileName,
required String fieldName,
required String mediaFormat,
required String mediaExtension,
}) async {
try {
final request = http.MultipartRequest(method, Uri.parse(url));
_headers.update('Content-Type', (_) => 'multipart/form-data');
request.headers.addAll(_headers);
if (_requestBody != null) {
_requestBody!.forEach((key, value) {
request.fields.addAll({key.toString(): value.toString()});
});
}
request.files.add(
http.MultipartFile.fromBytes(
fieldName,
file,
filename: '$fileName.$mediaExtension',
contentType: parser.MediaType(mediaFormat, mediaExtension),
),
);
final streamedResponse = await request
.send()
.timeout(
const Duration(seconds: 30),
)
.catchError(
(e) => throw e,
);
final response = await http.Response.fromStream(streamedResponse);
_handleResponse(response);
} catch (e) {
_handleError(null);
}
}
Future<void> put() async {
try {
final response = await http

View File

@ -38,13 +38,14 @@ class _AudioWaveState extends State<AudioWave> {
@override
void initState() {
super.initState();
print(widget.file);
WidgetsBinding.instance.addPostFrameCallback((_) async {
if (widget.totalDuration == null) {
await VoiceService.getDuration(src: widget.file).then((duration) {
setState(() {
totalDuration = duration;
if (kDebugMode) {
print(totalDuration!.inSeconds);
print(totalDuration?.inSeconds);
}
});
});

View File

@ -4,6 +4,7 @@ import 'package:didvan/constants/app_icons.dart';
import 'package:didvan/models/message_data/message_data.dart';
import 'package:didvan/services/media/voice.dart';
import 'package:didvan/utils/date_time.dart';
import 'package:didvan/views/ai/widgets/audio_wave.dart';
import 'package:didvan/views/direct/direct_state.dart';
import 'package:didvan/views/direct/widgets/audio_widget.dart';
import 'package:didvan/views/widgets/didvan/divider.dart';
@ -86,34 +87,9 @@ class Message extends StatelessWidget {
children: [
if (message.text != null) DidvanText(message.text!),
if (message.audio != null || message.audioFile != null)
FutureBuilder(
future: VoiceService.getDuration(
src: message.audioFile == null
? message.audio!
: message.audioFile!.path),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Row(
mainAxisAlignment:
MainAxisAlignment.center,
children: List.generate(
5,
(index) => SpinKitWave(
color: Theme.of(context)
.colorScheme
.primary
.withOpacity(0.4),
size: 32,
itemCount: 10,
)));
}
return AudioWidget(
audioFile: message.audioFile,
audioUrl: message.audio,
id: message.id,
duration: snapshot.data,
);
}),
AudioWave(
file: message.audio ?? message.audioFile!.path,
),
if (message.radar != null || message.news != null)
const DidvanDivider(),
if (message.radar != null || message.news != null)