♻️ Optimize the sfx playing
This commit is contained in:
@@ -16,6 +16,7 @@ import 'package:island/services/analytics_service.dart';
|
|||||||
import 'package:island/talker.dart';
|
import 'package:island/talker.dart';
|
||||||
import 'package:island/firebase_options.dart';
|
import 'package:island/firebase_options.dart';
|
||||||
import 'package:island/pods/config.dart';
|
import 'package:island/pods/config.dart';
|
||||||
|
import 'package:island/pods/audio.dart';
|
||||||
import 'package:island/pods/network.dart';
|
import 'package:island/pods/network.dart';
|
||||||
import 'package:island/pods/theme.dart';
|
import 'package:island/pods/theme.dart';
|
||||||
import 'package:island/pods/userinfo.dart';
|
import 'package:island/pods/userinfo.dart';
|
||||||
@@ -339,6 +340,8 @@ class IslandApp extends HookConsumerWidget {
|
|||||||
final apiClient = ref.read(apiClientProvider);
|
final apiClient = ref.read(apiClientProvider);
|
||||||
subscribePushNotification(apiClient);
|
subscribePushNotification(apiClient);
|
||||||
initializeLocalNotifications();
|
initializeLocalNotifications();
|
||||||
|
ref.read(notificationSfxProvider);
|
||||||
|
ref.read(messageSfxProvider);
|
||||||
final wsNotifier = ref.read(websocketStateProvider.notifier);
|
final wsNotifier = ref.read(websocketStateProvider.notifier);
|
||||||
wsNotifier.connect();
|
wsNotifier.connect();
|
||||||
}
|
}
|
||||||
|
|||||||
42
lib/pods/audio.dart
Normal file
42
lib/pods/audio.dart
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
import 'package:just_audio/just_audio.dart';
|
||||||
|
import 'package:island/pods/config.dart';
|
||||||
|
|
||||||
|
final sfxPlayerProvider = Provider<AudioPlayer>((ref) {
|
||||||
|
final player = AudioPlayer();
|
||||||
|
ref.onDispose(() {
|
||||||
|
player.dispose();
|
||||||
|
});
|
||||||
|
return player;
|
||||||
|
});
|
||||||
|
|
||||||
|
final notificationSfxProvider = FutureProvider<void>((ref) async {
|
||||||
|
final player = ref.watch(sfxPlayerProvider);
|
||||||
|
await player.setVolume(0.75);
|
||||||
|
await player.setAudioSource(
|
||||||
|
AudioSource.asset('assets/audio/notification.mp3'),
|
||||||
|
preload: true,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
final messageSfxProvider = FutureProvider<void>((ref) async {
|
||||||
|
final player = ref.watch(sfxPlayerProvider);
|
||||||
|
await player.setAudioSource(
|
||||||
|
AudioSource.asset('assets/audio/messages.mp3'),
|
||||||
|
preload: true,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
void playNotificationSfx(WidgetRef ref) {
|
||||||
|
final settings = ref.read(appSettingsProvider);
|
||||||
|
if (!settings.soundEffects) return;
|
||||||
|
final player = ref.read(sfxPlayerProvider);
|
||||||
|
player.play();
|
||||||
|
}
|
||||||
|
|
||||||
|
void playMessageSfx(WidgetRef ref) {
|
||||||
|
final settings = ref.read(appSettingsProvider);
|
||||||
|
if (!settings.soundEffects) return;
|
||||||
|
final player = ref.read(sfxPlayerProvider);
|
||||||
|
player.play();
|
||||||
|
}
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'package:just_audio/just_audio.dart';
|
|
||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
@@ -10,6 +9,7 @@ import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
|||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:island/main.dart';
|
import 'package:island/main.dart';
|
||||||
|
import 'package:island/pods/audio.dart';
|
||||||
import 'package:island/pods/config.dart';
|
import 'package:island/pods/config.dart';
|
||||||
import 'package:island/route.dart';
|
import 'package:island/route.dart';
|
||||||
import 'package:island/models/account.dart';
|
import 'package:island/models/account.dart';
|
||||||
@@ -105,13 +105,7 @@ StreamSubscription<WebSocketPacket> setupNotificationListener(
|
|||||||
if (settings.notifyWithHaptic) {
|
if (settings.notifyWithHaptic) {
|
||||||
HapticFeedback.heavyImpact();
|
HapticFeedback.heavyImpact();
|
||||||
}
|
}
|
||||||
if (settings.soundEffects) {
|
playNotificationSfx(ref);
|
||||||
final player = AudioPlayer();
|
|
||||||
await player.setVolume(0.75);
|
|
||||||
await player.setAudioSource(AudioSource.asset('assets/audio/notification.mp3'));
|
|
||||||
await player.play();
|
|
||||||
player.dispose();
|
|
||||||
}
|
|
||||||
showTopSnackBar(
|
showTopSnackBar(
|
||||||
globalOverlay.currentState!,
|
globalOverlay.currentState!,
|
||||||
Center(
|
Center(
|
||||||
@@ -228,4 +222,4 @@ Future<void> _putTokenToRemote(
|
|||||||
"/ring/notifications/subscription",
|
"/ring/notifications/subscription",
|
||||||
data: {"provider": provider, "device_token": token},
|
data: {"provider": provider, "device_token": token},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'package:just_audio/just_audio.dart';
|
import 'package:dio/dio.dart';
|
||||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@@ -8,6 +8,7 @@ import 'package:flutter/services.dart';
|
|||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:island/main.dart';
|
import 'package:island/main.dart';
|
||||||
|
import 'package:island/pods/audio.dart';
|
||||||
import 'package:island/pods/config.dart';
|
import 'package:island/pods/config.dart';
|
||||||
import 'package:island/route.dart';
|
import 'package:island/route.dart';
|
||||||
import 'package:island/models/account.dart';
|
import 'package:island/models/account.dart';
|
||||||
@@ -20,8 +21,6 @@ import 'package:flutter_cache_manager/flutter_cache_manager.dart';
|
|||||||
import 'package:windows_notification/windows_notification.dart' as winty;
|
import 'package:windows_notification/windows_notification.dart' as winty;
|
||||||
import 'package:windows_notification/notification_message.dart';
|
import 'package:windows_notification/notification_message.dart';
|
||||||
|
|
||||||
import 'package:dio/dio.dart';
|
|
||||||
|
|
||||||
// Windows notification instance
|
// Windows notification instance
|
||||||
winty.WindowsNotification? windowsNotification;
|
winty.WindowsNotification? windowsNotification;
|
||||||
|
|
||||||
@@ -68,13 +67,7 @@ StreamSubscription<WebSocketPacket> setupNotificationListener(
|
|||||||
if (settings.notifyWithHaptic) {
|
if (settings.notifyWithHaptic) {
|
||||||
HapticFeedback.heavyImpact();
|
HapticFeedback.heavyImpact();
|
||||||
}
|
}
|
||||||
if (settings.soundEffects) {
|
playNotificationSfx(ref);
|
||||||
final player = AudioPlayer();
|
|
||||||
await player.setVolume(0.75);
|
|
||||||
await player.setAudioSource(AudioSource.asset('assets/audio/notification.mp3'));
|
|
||||||
await player.play();
|
|
||||||
player.dispose();
|
|
||||||
}
|
|
||||||
showTopSnackBar(
|
showTopSnackBar(
|
||||||
globalOverlay.currentState!,
|
globalOverlay.currentState!,
|
||||||
Center(
|
Center(
|
||||||
@@ -221,4 +214,4 @@ Future<void> _putTokenToRemote(
|
|||||||
"/ring/notifications/subscription",
|
"/ring/notifications/subscription",
|
||||||
data: {"provider": provider, "device_token": token},
|
data: {"provider": provider, "device_token": token},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user