Notify with haptic feedback

This commit is contained in:
2025-12-22 23:12:14 +08:00
parent 62a45317a9
commit b0b227f36b

View File

@@ -4,10 +4,12 @@ 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';
import 'package:flutter/services.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; 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/config.dart';
import 'package:island/route.dart'; import 'package:island/route.dart';
import 'package:island/models/account.dart'; import 'package:island/models/account.dart';
import 'package:island/pods/websocket.dart'; import 'package:island/pods/websocket.dart';
@@ -89,6 +91,7 @@ StreamSubscription<WebSocketPacket> setupNotificationListener(
BuildContext context, BuildContext context,
WidgetRef ref, WidgetRef ref,
) { ) {
final settings = ref.watch(appSettingsProvider);
final ws = ref.watch(websocketProvider); final ws = ref.watch(websocketProvider);
return ws.dataStream.listen((pkt) async { return ws.dataStream.listen((pkt) async {
if (pkt.type == "notifications.new") { if (pkt.type == "notifications.new") {
@@ -98,6 +101,9 @@ StreamSubscription<WebSocketPacket> setupNotificationListener(
talker.info( talker.info(
'[Notification] Showing in-app notification: ${notification.title}', '[Notification] Showing in-app notification: ${notification.title}',
); );
if (settings.notifyWithHaptic) {
HapticFeedback.heavyImpact();
}
showTopSnackBar( showTopSnackBar(
globalOverlay.currentState!, globalOverlay.currentState!,
Center( Center(