Skip to content

Commit

Permalink
feat: add snackbar service (#257)
Browse files Browse the repository at this point in the history
  • Loading branch information
ethan-tbd authored Aug 8, 2024
1 parent 94fa758 commit 8f13e74
Show file tree
Hide file tree
Showing 6 changed files with 132 additions and 169 deletions.
13 changes: 5 additions & 8 deletions lib/features/dap/dap_qr_tile.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:didpay/features/device/device_info_service.dart';
import 'package:didpay/features/did/did_qr_tabs.dart';
import 'package:didpay/l10n/app_localizations.dart';
import 'package:didpay/shared/snackbar/snackbar_service.dart';
import 'package:didpay/shared/theme/grid.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
Expand All @@ -17,6 +18,7 @@ class DapQrTile extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final isPhysicalDevice = useState(true);
final snackbarService = SnackbarService();

useEffect(
() {
Expand Down Expand Up @@ -46,6 +48,7 @@ class DapQrTile extends HookConsumerWidget {
: _simulateScanQrCode(
context,
dapTextController,
snackbarService,
),
),
);
Expand All @@ -67,15 +70,9 @@ class DapQrTile extends HookConsumerWidget {
Future<void> _simulateScanQrCode(
BuildContext context,
TextEditingController didTextController,
SnackbarService snackbarService,
) async {
ScaffoldMessenger.of(context).removeCurrentSnackBar();

ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(Loc.of(context).simulatedQrCodeScan),
),
);

snackbarService.showSnackBar(context, Loc.of(context).simulatedQrCodeScan);
didTextController.text = '@moegrammer/didpay.me';
}
}
41 changes: 8 additions & 33 deletions lib/features/did/did_qr_code_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'package:didpay/features/did/did_storage_service.dart';
import 'package:didpay/features/vcs/vcs_notifier.dart';
import 'package:didpay/l10n/app_localizations.dart';
import 'package:didpay/shared/confirm_dialog.dart';
import 'package:didpay/shared/snackbar/snackbar_service.dart';
import 'package:didpay/shared/theme/grid.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
Expand All @@ -20,6 +21,7 @@ class DidQrCodePage extends HookConsumerWidget {
Widget build(BuildContext context, WidgetRef ref) {
final did = ref.watch(didProvider);
final didStorageService = ref.watch(didServiceProvider);
final snackbarService = SnackbarService();

const maxSize = 400.0;
final screenSize = MediaQuery.of(context).size;
Expand Down Expand Up @@ -67,41 +69,14 @@ class DidQrCodePage extends HookConsumerWidget {
icon: const Icon(Icons.copy),
onPressed: () async {
final did = ref.read(didProvider);
await Clipboard.setData(
ClipboardData(text: did.uri),
);
await Clipboard.setData(ClipboardData(text: did.uri));

if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
Loc.of(context).copiedToClipboard,
style: Theme.of(context)
.textTheme
.titleSmall
?.copyWith(
color: Theme.of(context)
.colorScheme
.onSurface,
),
),
shape: ShapeBorder.lerp(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(Grid.xs),
),
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(Grid.xs),
),
1,
),
margin: const EdgeInsets.symmetric(
horizontal: Grid.xl,
),
behavior: SnackBarBehavior.floating,
duration: const Duration(seconds: 1),
backgroundColor:
Theme.of(context).colorScheme.surface,
),
snackbarService.showSnackBar(
context,
Loc.of(context).copiedToClipboard,
);

Navigator.pop(context);
}
},
Expand Down
12 changes: 5 additions & 7 deletions lib/features/did/did_qr_tile.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:didpay/features/device/device_info_service.dart';
import 'package:didpay/features/did/did_qr_tabs.dart';
import 'package:didpay/l10n/app_localizations.dart';
import 'package:didpay/shared/snackbar/snackbar_service.dart';
import 'package:didpay/shared/theme/grid.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
Expand All @@ -18,6 +19,7 @@ class DidQrTile extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final isPhysicalDevice = useState(true);
final snackbarService = SnackbarService();

useEffect(
() {
Expand Down Expand Up @@ -47,6 +49,7 @@ class DidQrTile extends HookConsumerWidget {
: _simulateScanQrCode(
context,
didTextController,
snackbarService,
),
),
);
Expand All @@ -68,14 +71,9 @@ class DidQrTile extends HookConsumerWidget {
Future<void> _simulateScanQrCode(
BuildContext context,
TextEditingController didTextController,
SnackbarService snackbarService,
) async {
ScaffoldMessenger.of(context).removeCurrentSnackBar();

ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(Loc.of(context).simulatedQrCodeScan),
),
);
snackbarService.showSnackBar(context, Loc.of(context).simulatedQrCodeScan);

final did = await DidDht.create(publish: true);
didTextController.text = did.uri;
Expand Down
35 changes: 7 additions & 28 deletions lib/features/transaction/transaction_tile.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:didpay/features/transaction/transaction_details_page.dart';
import 'package:didpay/features/transaction/transaction_notifier.dart';
import 'package:didpay/l10n/app_localizations.dart';
import 'package:didpay/shared/currency_formatter.dart';
import 'package:didpay/shared/snackbar/snackbar_service.dart';
import 'package:didpay/shared/theme/grid.dart';
import 'package:didpay/shared/tile_container.dart';
import 'package:flutter/material.dart';
Expand All @@ -27,6 +28,7 @@ class TransactionTile extends HookConsumerWidget {
final transaction = ref.watch(transactionProvider(parameters));

final lastStatus = useState<TransactionStatus?>(null);
final snackbarService = SnackbarService();

TransactionNotifier getTransactionsNotifier() =>
ref.read(transactionProvider(parameters).notifier);
Expand All @@ -51,34 +53,11 @@ class TransactionTile extends HookConsumerWidget {
Future.delayed(
Duration.zero,
() {
ScaffoldMessenger.of(context).removeCurrentSnackBar();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'${transaction.value?.status}!',
style: Theme.of(context).textTheme.titleSmall?.copyWith(
color: Transaction.getStatusColor(
context,
transaction.value?.status,
),
),
),
showCloseIcon: true,
closeIconColor: Theme.of(context).colorScheme.onSurface,
shape: ShapeBorder.lerp(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(Grid.xs),
),
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(Grid.xs),
),
1,
),
margin: const EdgeInsets.symmetric(horizontal: Grid.xl),
behavior: SnackBarBehavior.floating,
duration: const Duration(seconds: 1),
backgroundColor: Theme.of(context).colorScheme.surface,
),
if (!context.mounted) return;

snackbarService.showSnackBar(
context,
transaction.value?.status.toString() ?? '',
);
},
);
Expand Down
163 changes: 70 additions & 93 deletions lib/shared/modal/modal_manage_item.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:didpay/l10n/app_localizations.dart';
import 'package:didpay/shared/snackbar/snackbar_service.dart';
import 'package:didpay/shared/theme/grid.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
Expand All @@ -10,108 +11,84 @@ class ModalManageItem {
String removeText,
String copyText,
Future<void> Function() onRemove,
) =>
showModalBottomSheet(
useSafeArea: true,
isScrollControlled: true,
context: context,
builder: (context) => SafeArea(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
const SizedBox(height: Grid.xxs),
ListTile(
trailing: IconButton(
icon: const Icon(Icons.copy),
onPressed: () async {
await Clipboard.setData(ClipboardData(text: copyText));
if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
Loc.of(context).copiedToClipboard,
style: Theme.of(context)
.textTheme
.titleSmall
?.copyWith(
color:
Theme.of(context).colorScheme.onSurface,
),
),
shape: ShapeBorder.lerp(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(Grid.xs),
),
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(Grid.xs),
),
1,
),
margin:
const EdgeInsets.symmetric(horizontal: Grid.xl),
behavior: SnackBarBehavior.floating,
duration: const Duration(seconds: 1),
backgroundColor:
Theme.of(context).colorScheme.surface,
),
);
Navigator.pop(context);
}
},
),
title: Center(
child: Text(
title,
style: Theme.of(context).textTheme.titleMedium?.copyWith(
fontWeight: FontWeight.bold,
),
),
),
),
Divider(
color: Theme.of(context)
.colorScheme
.outlineVariant
.withOpacity(0.1),
),
ListTile(
title: Center(
child: Text(
removeText,
style: TextStyle(color: Theme.of(context).colorScheme.error)
.copyWith(
fontWeight: FontWeight.bold,
),
),
),
onTap: () async {
await onRemove();
) {
final snackbarService = SnackbarService();

return showModalBottomSheet(
useSafeArea: true,
isScrollControlled: true,
context: context,
builder: (context) => SafeArea(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
const SizedBox(height: Grid.xxs),
ListTile(
trailing: IconButton(
icon: const Icon(Icons.copy),
onPressed: () async {
await Clipboard.setData(ClipboardData(text: copyText));

if (context.mounted) {
snackbarService.showSnackBar(
context,
Loc.of(context).copiedToClipboard,
);

Navigator.pop(context);
}
},
),
Divider(
color: Theme.of(context)
.colorScheme
.outlineVariant
.withOpacity(0.1),
title: Center(
child: Text(
title,
style: Theme.of(context).textTheme.titleMedium?.copyWith(
fontWeight: FontWeight.bold,
),
),
),
ListTile(
title: Center(
child: Text(
Loc.of(context).cancel,
style: Theme.of(context).textTheme.bodyLarge?.copyWith(
fontWeight: FontWeight.bold,
),
),
Divider(
color:
Theme.of(context).colorScheme.outlineVariant.withOpacity(0.1),
),
ListTile(
title: Center(
child: Text(
removeText,
style: TextStyle(color: Theme.of(context).colorScheme.error)
.copyWith(
fontWeight: FontWeight.bold,
),
),
onTap: () {
),
onTap: () async {
await onRemove();
if (context.mounted) {
Navigator.pop(context);
},
}
},
),
Divider(
color:
Theme.of(context).colorScheme.outlineVariant.withOpacity(0.1),
),
ListTile(
title: Center(
child: Text(
Loc.of(context).cancel,
style: Theme.of(context).textTheme.bodyLarge?.copyWith(
fontWeight: FontWeight.bold,
),
),
),
],
),
onTap: () {
Navigator.pop(context);
},
),
],
),
);
),
);
}
}
Loading

0 comments on commit 8f13e74

Please sign in to comment.