♻️ 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/firebase_options.dart';
|
||||
import 'package:island/pods/config.dart';
|
||||
import 'package:island/pods/audio.dart';
|
||||
import 'package:island/pods/network.dart';
|
||||
import 'package:island/pods/theme.dart';
|
||||
import 'package:island/pods/userinfo.dart';
|
||||
@@ -339,6 +340,8 @@ class IslandApp extends HookConsumerWidget {
|
||||
final apiClient = ref.read(apiClientProvider);
|
||||
subscribePushNotification(apiClient);
|
||||
initializeLocalNotifications();
|
||||
ref.read(notificationSfxProvider);
|
||||
ref.read(messageSfxProvider);
|
||||
final wsNotifier = ref.read(websocketStateProvider.notifier);
|
||||
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:io';
|
||||
import 'package:just_audio/just_audio.dart';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:firebase_messaging/firebase_messaging.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:go_router/go_router.dart';
|
||||
import 'package:island/main.dart';
|
||||
import 'package:island/pods/audio.dart';
|
||||
import 'package:island/pods/config.dart';
|
||||
import 'package:island/route.dart';
|
||||
import 'package:island/models/account.dart';
|
||||
@@ -105,13 +105,7 @@ StreamSubscription<WebSocketPacket> setupNotificationListener(
|
||||
if (settings.notifyWithHaptic) {
|
||||
HapticFeedback.heavyImpact();
|
||||
}
|
||||
if (settings.soundEffects) {
|
||||
final player = AudioPlayer();
|
||||
await player.setVolume(0.75);
|
||||
await player.setAudioSource(AudioSource.asset('assets/audio/notification.mp3'));
|
||||
await player.play();
|
||||
player.dispose();
|
||||
}
|
||||
playNotificationSfx(ref);
|
||||
showTopSnackBar(
|
||||
globalOverlay.currentState!,
|
||||
Center(
|
||||
@@ -228,4 +222,4 @@ Future<void> _putTokenToRemote(
|
||||
"/ring/notifications/subscription",
|
||||
data: {"provider": provider, "device_token": token},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'package:just_audio/just_audio.dart';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@@ -8,6 +8,7 @@ import 'package:flutter/services.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:island/main.dart';
|
||||
import 'package:island/pods/audio.dart';
|
||||
import 'package:island/pods/config.dart';
|
||||
import 'package:island/route.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/notification_message.dart';
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
|
||||
// Windows notification instance
|
||||
winty.WindowsNotification? windowsNotification;
|
||||
|
||||
@@ -68,13 +67,7 @@ StreamSubscription<WebSocketPacket> setupNotificationListener(
|
||||
if (settings.notifyWithHaptic) {
|
||||
HapticFeedback.heavyImpact();
|
||||
}
|
||||
if (settings.soundEffects) {
|
||||
final player = AudioPlayer();
|
||||
await player.setVolume(0.75);
|
||||
await player.setAudioSource(AudioSource.asset('assets/audio/notification.mp3'));
|
||||
await player.play();
|
||||
player.dispose();
|
||||
}
|
||||
playNotificationSfx(ref);
|
||||
showTopSnackBar(
|
||||
globalOverlay.currentState!,
|
||||
Center(
|
||||
@@ -221,4 +214,4 @@ Future<void> _putTokenToRemote(
|
||||
"/ring/notifications/subscription",
|
||||
data: {"provider": provider, "device_token": token},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user