Skip to main content

Flash Message

Thông báo tin nhắn nhanh trong ứng dụng

Giả định rằng chúng ta sử dụng flash để hiển thị giao diện của Flash hoặc Toast Message.

import 'package:piscale_chat_flutter/piscale_chat_flutter.dart';
import 'package:flash/flash_helper.dart';

class App extends StatelessWidget {
const App({super.key});

@override
Widget build(BuildContext context) {
return MaterialApp.router(
routerConfig: appRouter,
builder: (context, child) {
return Toast(
navigatorKey: rootNavigatorKey,
child: PSChat(
userId: 'USER_ID',
deviceId: 'DEVICE_ID',
apiClientOptions: PSChatApiClientOptions(
appId: ('APP_ID'),
fetchToken: fetchToken,
),
child: child,
),
);
},
);
}
}

Chúng tôi cung cấp 2 Events thông qua Stream để ứng dụng của bạn có thể tuỳ chỉnh nhiều hơn:

  • PSShowFlashMessageEvent: dữ liệu của FlashMessage

  • PSShowToastMessageEvent: dữ liệu của ToastMessage

import 'package:piscale_chat_flutter/piscale_chat_flutter.dart';

class _HomePageState extends State<HomePage> {
StreamSubscription? _showFlashMessageSubscription;
StreamSubscription? _showToastMessageSubscription;
FlashController<bool>? _flashMessageController;
FlashController<bool>? _toastMessageController;

@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback(
(_) {
_showFlashMessageSubscription =
psEventBus.on<PSShowFlashMessageEvent>().listen(
(event) {
_flashMessageController?.tryDismiss();
context.showFlash<bool>(
duration: const Duration(milliseconds: 2000),
builder: (context, controller) {
_flashMessageController = controller;
return PSFlashMessage(
controller: controller,
data: event.data,
onTap: () {
final threadId = event.data.threadId;
final messageId = event.data.messageId;
context.replace(
AppPage.messages.toPath,
extra: MessagesPageExtra(
targetThreadId: threadId,
targetMessageId: messageId,
),
);
},
);
},
);
},
);

_showToastMessageSubscription =
psEventBus.on<PSShowToastMessageEvent>().listen(
(event) {
_toastMessageController?.tryDismiss();
context.showFlash<bool>(
duration: const Duration(milliseconds: 2000),
builder: (context, controller) {
_toastMessageController = controller;
return PSToastMessage(
controller: controller,
data: event.data,
);
},
);
},
);
},
);
super.initState();
}

@override
void dispose() {
_showFlashMessageSubscription?.cancel();
_showToastMessageSubscription?.cancel();
super.dispose();
}
}