Use toast instead of snackbar in dialog to prevent it showing underneath

This commit is contained in:
Ming Ming 2023-05-21 19:23:10 +08:00
parent 6d25f47412
commit 15687879ba
8 changed files with 66 additions and 58 deletions

View file

@ -992,10 +992,6 @@
"@fixTooltip": {
"description": "Fix an issue"
},
"fixButtonLabel": "FIX",
"@fixButtonLabel": {
"description": "Fix an issue"
},
"fixAllTooltip": "Fix all",
"@fixAllTooltip": {
"description": "Fix all listed issues"

17
app/lib/toast.dart Normal file
View file

@ -0,0 +1,17 @@
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
class AppToast {
static Future<bool?> showToast(
BuildContext context, {
required String msg,
required Duration duration,
}) {
return Fluttertoast.showToast(
msg: msg,
timeInSecForIosWeb: duration.inSeconds,
backgroundColor: Theme.of(context).snackBarTheme.backgroundColor,
textColor: Theme.of(context).snackBarTheme.contentTextStyle!.color,
);
}
}

View file

@ -14,7 +14,7 @@ import 'package:nc_photos/entity/collection_item.dart';
import 'package:nc_photos/exception_event.dart';
import 'package:nc_photos/exception_util.dart' as exception_util;
import 'package:nc_photos/k.dart' as k;
import 'package:nc_photos/snack_bar_manager.dart';
import 'package:nc_photos/toast.dart';
import 'package:nc_photos/widget/processing_dialog.dart';
import 'package:np_codegen/np_codegen.dart';
import 'package:to_string/to_string.dart';
@ -73,10 +73,11 @@ class _WrappedExportCollectionDialogState
listenWhen: (previous, current) => previous.error != current.error,
listener: (_, state) {
if (state.error != null) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(exception_util.toUserString(state.error!.error)),
AppToast.showToast(
context,
msg: exception_util.toUserString(state.error!.error),
duration: k.snackBarDurationNormal,
));
);
}
},
),

View file

@ -22,7 +22,7 @@ import 'package:nc_photos/k.dart' as k;
import 'package:nc_photos/mobile/share.dart';
import 'package:nc_photos/platform/k.dart' as platform_k;
import 'package:nc_photos/remote_storage_util.dart' as remote_storage_util;
import 'package:nc_photos/snack_bar_manager.dart';
import 'package:nc_photos/toast.dart';
import 'package:nc_photos/use_case/copy.dart';
import 'package:nc_photos/use_case/create_dir.dart';
import 'package:nc_photos/use_case/create_share.dart';
@ -83,16 +83,17 @@ class _WrappedFileSharer extends StatelessWidget {
listener: (context, state) {
if (state.error != null) {
if (state.error!.error is PermissionException) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(L10n.global().errorNoStoragePermission),
AppToast.showToast(
context,
msg: L10n.global().errorNoStoragePermission,
duration: k.snackBarDurationNormal,
));
);
} else {
SnackBarManager().showSnackBar(SnackBar(
content:
Text(exception_util.toUserString(state.error!.error)),
AppToast.showToast(
context,
msg: exception_util.toUserString(state.error!.error),
duration: k.snackBarDurationNormal,
));
);
}
}
},
@ -102,10 +103,11 @@ class _WrappedFileSharer extends StatelessWidget {
previous.message != current.message,
listener: (context, state) {
if (state.message != null) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(state.message!),
AppToast.showToast(
context,
msg: state.message!,
duration: k.snackBarDurationNormal,
));
);
}
},
),

View file

@ -23,7 +23,7 @@ import 'package:nc_photos/exception_util.dart' as exception_util;
import 'package:nc_photos/k.dart' as k;
import 'package:nc_photos/object_extension.dart';
import 'package:nc_photos/pref.dart';
import 'package:nc_photos/snack_bar_manager.dart';
import 'package:nc_photos/toast.dart';
import 'package:nc_photos/widget/album_dir_picker.dart';
import 'package:nc_photos/widget/processing_dialog.dart';
import 'package:nc_photos/widget/tag_picker_dialog.dart';
@ -93,10 +93,11 @@ class _WrappedNewCollectionDialogState
listenWhen: (previous, current) => previous.error != current.error,
listener: (context, state) {
if (state.error != null) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(exception_util.toUserString(state.error!.error)),
AppToast.showToast(
context,
msg: exception_util.toUserString(state.error!.error),
duration: k.snackBarDurationNormal,
));
);
}
},
),
@ -188,8 +189,9 @@ class _WrappedNewCollectionDialogState
..pop(collection);
} catch (e, stackTrace) {
_log.shout("[_onResult] Failed", e, stackTrace);
SnackBarManager().showSnackBar(SnackBar(
content: Text(exception_util.toUserString(e)),
unawaited(AppToast.showToast(
context,
msg: exception_util.toUserString(e),
duration: k.snackBarDurationNormal,
));
Navigator.of(context)

View file

@ -13,16 +13,14 @@ import 'package:nc_photos/controller/account_controller.dart';
import 'package:nc_photos/controller/collections_controller.dart';
import 'package:nc_photos/di_container.dart';
import 'package:nc_photos/entity/collection.dart';
import 'package:nc_photos/entity/collection/content_provider/album.dart';
import 'package:nc_photos/entity/collection/util.dart';
import 'package:nc_photos/entity/sharee.dart';
import 'package:nc_photos/exception.dart';
import 'package:nc_photos/exception_event.dart';
import 'package:nc_photos/exception_util.dart' as exception_util;
import 'package:nc_photos/k.dart' as k;
import 'package:nc_photos/snack_bar_manager.dart';
import 'package:nc_photos/suggester.dart';
import 'package:nc_photos/widget/album_share_outlier_browser.dart';
import 'package:nc_photos/toast.dart';
import 'package:np_codegen/np_codegen.dart';
import 'package:np_common/ci_string.dart';
import 'package:to_string/to_string.dart';
@ -86,34 +84,28 @@ class _WrappedShareCollectionDialogState
if (state.error != null) {
if (state.error!.error is CollectionPartialShareException) {
final e = state.error!.error as CollectionPartialShareException;
SnackBarManager().showSnackBar(SnackBar(
content: Text(L10n.global()
.shareAlbumSuccessWithErrorNotification(e.shareeName)),
action: SnackBarAction(
label: L10n.global().fixButtonLabel,
onPressed: _onFixPressed,
),
AppToast.showToast(
context,
msg: L10n.global()
.shareAlbumSuccessWithErrorNotification(e.shareeName),
duration: k.snackBarDurationNormal,
));
);
} else if (state.error!.error
is CollectionPartialUnshareException) {
final e =
state.error!.error as CollectionPartialUnshareException;
SnackBarManager().showSnackBar(SnackBar(
content: Text(L10n.global()
.unshareAlbumSuccessWithErrorNotification(e.shareeName)),
action: SnackBarAction(
label: L10n.global().fixButtonLabel,
onPressed: _onFixPressed,
),
AppToast.showToast(
context,
msg: L10n.global()
.unshareAlbumSuccessWithErrorNotification(e.shareeName),
duration: k.snackBarDurationNormal,
));
);
} else {
SnackBarManager().showSnackBar(SnackBar(
content:
Text(exception_util.toUserString(state.error!.error)),
AppToast.showToast(
context,
msg: exception_util.toUserString(state.error!.error),
duration: k.snackBarDurationNormal,
));
);
}
}
},
@ -146,16 +138,6 @@ class _WrappedShareCollectionDialogState
);
}
void _onFixPressed() {
final bloc = context.read<_Bloc>();
final collection = bloc.state.collection;
final album = (collection.contentProvider as CollectionAlbumProvider).album;
Navigator.of(context).pushNamed(
AlbumShareOutlierBrowser.routeName,
arguments: AlbumShareOutlierBrowserArguments(bloc.account, album),
);
}
late final _bloc = context.read<_Bloc>();
}

View file

@ -616,6 +616,13 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
fluttertoast:
dependency: "direct main"
description:
name: fluttertoast
url: "https://pub.dartlang.org"
source: hosted
version: "8.2.1"
frontend_server_client:
dependency: transitive
description:

View file

@ -59,6 +59,7 @@ dependencies:
git:
url: https://gitlab.com/nc-photos/exifdart.git
ref: 1.3.0
fluttertoast: ^8.2.1
flutter_background_service:
git:
url: https://gitlab.com/nc-photos/flutter_background_service.git