Refactor profiles

This commit is contained in:
problematicconsumer
2023-11-26 21:20:58 +03:30
parent e2f5f51176
commit 829d58a1a2
49 changed files with 1206 additions and 1024 deletions

View File

@@ -0,0 +1,97 @@
import 'package:flutter/material.dart';
import 'package:hiddify/domain/failures.dart';
import 'package:hiddify/features/common/adaptive_root_scaffold.dart';
import 'package:hiddify/utils/utils.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:toastification/toastification.dart';
part 'in_app_notification_controller.g.dart';
@Riverpod(keepAlive: true)
InAppNotificationController inAppNotificationController(
InAppNotificationControllerRef ref,
) {
return InAppNotificationController();
}
enum NotificationType {
info,
error,
success,
}
class InAppNotificationController with AppLogger {
void showToast(
BuildContext context,
String message, {
NotificationType type = NotificationType.info,
Duration duration = const Duration(seconds: 3),
}) {
toastification.show(
context: context,
title: message,
type: type._toastificationType,
alignment: Alignment.bottomLeft,
autoCloseDuration: duration,
style: ToastificationStyle.fillColored,
pauseOnHover: true,
showProgressBar: false,
dragToClose: true,
closeOnClick: true,
closeButtonShowType: CloseButtonShowType.onHover,
);
}
void showErrorToast(String message) {
final context = RootScaffold.stateKey.currentContext;
if (context == null) {
loggy.warning("context is null");
return;
}
showToast(
context,
message,
type: NotificationType.error,
duration: const Duration(seconds: 5),
);
}
void showSuccessToast(String message) {
final context = RootScaffold.stateKey.currentContext;
if (context == null) {
loggy.warning("context is null");
return;
}
showToast(
context,
message,
type: NotificationType.success,
);
}
void showInfoToast(String message) {
final context = RootScaffold.stateKey.currentContext;
if (context == null) {
loggy.warning("context is null");
return;
}
showToast(context, message);
}
Future<void> showErrorDialog(PresentableError error) async {
final context = RootScaffold.stateKey.currentContext;
if (context == null) {
loggy.warning("context is null");
return;
}
CustomAlertDialog.fromErr(error).show(context);
}
}
extension NotificationTypeX on NotificationType {
ToastificationType get _toastificationType => switch (this) {
NotificationType.success => ToastificationType.success,
NotificationType.error => ToastificationType.error,
NotificationType.info => ToastificationType.info,
};
}