Skip to content

Commit

Permalink
chore: remove AddPfiConfirmationPage (#159)
Browse files Browse the repository at this point in the history
  • Loading branch information
ethan-tbd authored May 16, 2024
1 parent a26a147 commit ba57bd9
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 146 deletions.
8 changes: 2 additions & 6 deletions lib/features/did_qr/did_qr.dart
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,6 @@ class DidQr {
),
);

static Future<bool> _isValidDid(String did) async {
final result = await DidResolver.resolve(did);
return !result.hasError();
}

static Future<void> _scanQrCode(
BuildContext context,
TextEditingController didTextController,
Expand All @@ -51,7 +46,8 @@ class DidQr {
MaterialPageRoute(builder: (context) => const DidQrScanPage()),
);

final isValid = qrValue != null && await _isValidDid(qrValue);
final isValid =
qrValue != null && !(await DidResolver.resolve(qrValue)).hasError();
didTextController.text = isValid ? qrValue : '';
errorText.value = isValid ? null : errorMessage;
}
Expand Down
59 changes: 0 additions & 59 deletions lib/features/pfis/add_pfi_confirmation_page.dart

This file was deleted.

168 changes: 96 additions & 72 deletions lib/features/pfis/add_pfi_page.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import 'package:didpay/features/device/device_info_service.dart';
import 'package:didpay/features/did_qr/did_qr.dart';
import 'package:didpay/features/pfis/add_pfi_confirmation_page.dart';
import 'package:didpay/features/pfis/pfi.dart';
import 'package:didpay/features/pfis/pfis_notifier.dart';
import 'package:didpay/l10n/app_localizations.dart';
import 'package:didpay/shared/pending_page.dart';
import 'package:didpay/shared/success_page.dart';
import 'package:didpay/shared/theme/grid.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
Expand All @@ -14,11 +17,14 @@ class AddPfiPage extends HookConsumerWidget {

@override
Widget build(BuildContext context, WidgetRef ref) {
final focusNode = useFocusNode();
final isPhysicalDevice = useState(true);
final errorText = useState<String?>(null);
final addPfiState = useState<AsyncValue<Pfi>?>(null);

final pfiDidController = useTextEditingController();

final focusNode = useFocusNode();

useEffect(
() {
Future.microtask(() async {
Expand All @@ -31,53 +37,64 @@ class AddPfiPage extends HookConsumerWidget {
);

return Scaffold(
appBar: AppBar(),
appBar: addPfiState.value != null ? null : AppBar(),
body: SafeArea(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Expanded(
child: SingleChildScrollView(
physics: const BouncingScrollPhysics(),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
_buildHeader(
context,
Loc.of(context).addAPfi,
Loc.of(context).makeSureInfoIsCorrect,
),
_buildDidForm(
context,
pfiDidController,
focusNode,
errorText,
Loc.of(context).invalidDid,
child: addPfiState.value != null
? addPfiState.value!.when(
data: (pfi) => SuccessPage(text: Loc.of(context).pfiAdded),
loading: () => PendingPage(text: Loc.of(context).addingPfi),
error: (error, _) => Text('Error: $error'),
)
: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Expanded(
child: SingleChildScrollView(
physics: const BouncingScrollPhysics(),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
_buildHeader(
context,
Loc.of(context).addAPfi,
Loc.of(context).makeSureInfoIsCorrect,
),
_buildDidForm(
context,
pfiDidController,
focusNode,
errorText,
Loc.of(context).invalidDid,
),
],
),
),
],
),
),
DidQr.buildScanTile(
context,
Loc.of(context).scanPfiQrCode,
pfiDidController,
errorText,
isPhysicalDevice: isPhysicalDevice.value,
),
_buildAddButton(
context,
ref,
pfiDidController,
addPfiState,
errorText.value,
),
],
),
),
DidQr.buildScanTile(
context,
Loc.of(context).scanPfiQrCode,
pfiDidController,
errorText,
isPhysicalDevice: isPhysicalDevice.value,
),
_buildAddButton(
context,
ref,
pfiDidController,
errorText.value,
),
],
),
),
);
}

Widget _buildHeader(BuildContext context, String title, String subtitle) =>
Widget _buildHeader(
BuildContext context,
String title,
String subtitle,
) =>
Padding(
padding: const EdgeInsets.symmetric(
vertical: Grid.xs,
Expand Down Expand Up @@ -138,9 +155,11 @@ class AddPfiPage extends HookConsumerWidget {
onTap: () => errorText.value = null,
onTapOutside: (_) async {
if (pfiDidController.text.isNotEmpty) {
errorText.value = await _isValidDid(pfiDidController.text)
? null
: errorMessage;
errorText.value =
!(await DidResolver.resolve(pfiDidController.text))
.hasError()
? null
: errorMessage;
}
focusNode.unfocus();
},
Expand All @@ -165,34 +184,39 @@ class AddPfiPage extends HookConsumerWidget {
BuildContext context,
WidgetRef ref,
TextEditingController pfiDidController,
ValueNotifier<AsyncValue<Pfi>?> state,
String? errorText,
) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: Grid.side),
child: FilledButton(
onPressed: () {
if ((_formKey.currentState?.validate() ?? false) &&
errorText == null) {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => AddPfiConfirmationPage(
did: pfiDidController.text,
),
),
);
}
},
child: const Text('Add'),
),
);
}
) =>
Padding(
padding: const EdgeInsets.symmetric(horizontal: Grid.side),
child: FilledButton(
onPressed: () {
if ((_formKey.currentState?.validate() ?? false) &&
errorText == null) {
_addPfi(context, ref, pfiDidController.text, state);
}
},
child: const Text('Add'),
),
);

static Future<bool> _isValidDid(String did) async {
try {
final result = await DidResolver.resolve(did);
return !result.hasError();
} on Exception catch (_) {
return false;
}
void _addPfi(
BuildContext context,
WidgetRef ref,
String did,
ValueNotifier<AsyncValue<Pfi>?> state,
) {
state.value = const AsyncLoading();
ref
.read(pfisProvider.notifier)
.add(did)
.then((pfi) => state.value = AsyncData(pfi))
.onError((error, stackTrace) {
state.value = AsyncError(
error ?? Exception('Unable to resolve add PFI'),
stackTrace,
);
throw Exception();
});
}
}
1 change: 1 addition & 0 deletions lib/features/pfis/pfis_notifier.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class PfisNotifier extends StateNotifier<List<Pfi>> {

Future<Pfi> add(String input) async {
final pfi = await pfiService.createPfi(input);
await Future.delayed(const Duration(seconds: 1));

state = [...state, pfi];
await _save();
Expand Down
15 changes: 6 additions & 9 deletions lib/features/send/send_details_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,12 @@ class SendDetailsPage extends HookConsumerWidget {
onTap: () => errorText.value = null,
onTapOutside: (_) async {
if (recipientDidController.text.isNotEmpty) {
errorText.value =
await _isValidDid(recipientDidController.text)
? null
: errorMessage;
errorText.value = !(await DidResolver.resolve(
recipientDidController.text,
))
.hasError()
? null
: errorMessage;
}
focusNode.unfocus();
},
Expand Down Expand Up @@ -155,9 +157,4 @@ class SendDetailsPage extends HookConsumerWidget {
),
);
}

Future<bool> _isValidDid(String did) async {
final result = await DidResolver.resolve(did);
return !result.hasError();
}
}

0 comments on commit ba57bd9

Please sign in to comment.