diff --git a/frontend/ios/Podfile.lock b/frontend/ios/Podfile.lock index 099abaec..7d0d790f 100644 --- a/frontend/ios/Podfile.lock +++ b/frontend/ios/Podfile.lock @@ -5,8 +5,6 @@ PODS: - path_provider_foundation (0.0.1): - Flutter - FlutterMacOS - - url_launcher_ios (0.0.1): - - Flutter - webview_flutter_wkwebview (0.0.1): - Flutter @@ -14,7 +12,6 @@ DEPENDENCIES: - Flutter (from `Flutter`) - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`) EXTERNAL SOURCES: @@ -24,8 +21,6 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/flutter_secure_storage/ios" path_provider_foundation: :path: ".symlinks/plugins/path_provider_foundation/darwin" - url_launcher_ios: - :path: ".symlinks/plugins/url_launcher_ios/ios" webview_flutter_wkwebview: :path: ".symlinks/plugins/webview_flutter_wkwebview/ios" @@ -33,7 +28,6 @@ SPEC CHECKSUMS: Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 - url_launcher_ios: bf5ce03e0e2088bad9cc378ea97fa0ed5b49673b webview_flutter_wkwebview: 2e2d318f21a5e036e2c3f26171342e95908bd60a PODFILE CHECKSUM: 70d9d25280d0dd177a5f637cdb0f0b0b12c6a189 diff --git a/frontend/lib/features/home/home_page.dart b/frontend/lib/features/home/home_page.dart index c09949dd..dcae11e0 100644 --- a/frontend/lib/features/home/home_page.dart +++ b/frontend/lib/features/home/home_page.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_starter/features/pfis/pfi_providers.dart'; +import 'package:flutter_starter/features/pfis/pfi_verification_page.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:url_launcher/url_launcher.dart'; class HomePage extends HookConsumerWidget { const HomePage({super.key}); @@ -14,12 +14,16 @@ class HomePage extends HookConsumerWidget { body: ListView( children: [ ...pfis.map( - (e) => ListTile( - title: Text(e.name), - subtitle: Text(e.id), + (pfi) => ListTile( + title: Text(pfi.name), + subtitle: Text(pfi.id), trailing: const Icon(Icons.chevron_right), onTap: () { - _launchUrl(e.widgetUrl); + Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => PfiVerificationPage(pfi: pfi), + ), + ); }, ), ) @@ -27,10 +31,4 @@ class HomePage extends HookConsumerWidget { ), ); } - - Future _launchUrl(String url) async { - if (!await launchUrl(Uri.parse(url))) { - throw Exception('Could not launch $url'); - } - } } diff --git a/frontend/lib/features/pfis/pfi_providers.dart b/frontend/lib/features/pfis/pfi_providers.dart index 31beef80..0a8b6426 100644 --- a/frontend/lib/features/pfis/pfi_providers.dart +++ b/frontend/lib/features/pfis/pfi_providers.dart @@ -3,7 +3,16 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; final pfisProvider = Provider>( (ref) => [ - Pfi(id: 'africa', name: 'Africa', widgetUrl: 'https://tbd.website'), - Pfi(id: 'mexico', name: 'Mexico', widgetUrl: 'https://block.xyz'), + Pfi( + id: 'africa', + name: 'Africa', + widgetUrl: 'https://tbd.website', + ), + Pfi( + id: 'mexico', + name: 'Mexico', + widgetUrl: + 'https://robustdisastrousstartups.wesbillman.repl.co/?proof=moeisreal&callback_uri=didpay://wes', + ), ], ); diff --git a/frontend/lib/features/pfis/pfi_verification_page.dart b/frontend/lib/features/pfis/pfi_verification_page.dart new file mode 100644 index 00000000..7f63391b --- /dev/null +++ b/frontend/lib/features/pfis/pfi_verification_page.dart @@ -0,0 +1,49 @@ +import 'package:webview_flutter/webview_flutter.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_starter/features/pfis/pfi.dart'; + +class PfiVerificationPage extends StatelessWidget { + final Pfi pfi; + + const PfiVerificationPage({required this.pfi, super.key}); + + @override + Widget build(BuildContext context) { + final controller = WebViewController() + ..setBackgroundColor(Theme.of(context).colorScheme.background) + ..setNavigationDelegate( + NavigationDelegate( + onProgress: (int progress) { + // Update loading bar. + }, + onPageStarted: (String url) {}, + onPageFinished: (String url) {}, + onWebResourceError: (WebResourceError error) {}, + onNavigationRequest: (NavigationRequest request) { + if (request.url.startsWith('didpay://')) { + _handleDidPay(context, request.url); + return NavigationDecision.prevent; + } + return NavigationDecision.navigate; + }, + ), + ) + ..loadRequest(Uri.parse(pfi.widgetUrl)); + + return Scaffold( + appBar: AppBar(title: const Text('PFI Verification')), + body: WebViewWidget( + controller: controller, + ), + ); + } + + void _handleDidPay(BuildContext context, String url) { + final snackBar = SnackBar( + content: Text('Received custom URL callback: $url'), + ); + + ScaffoldMessenger.of(context).showSnackBar(snackBar); + Navigator.of(context).pop(); + } +} diff --git a/frontend/pubspec.lock b/frontend/pubspec.lock index 7fc5bb90..32b46b5f 100644 --- a/frontend/pubspec.lock +++ b/frontend/pubspec.lock @@ -387,70 +387,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" - url_launcher: - dependency: "direct main" - description: - name: url_launcher - sha256: e9aa5ea75c84cf46b3db4eea212523591211c3cf2e13099ee4ec147f54201c86 - url: "https://pub.dev" - source: hosted - version: "6.2.2" - url_launcher_android: - dependency: transitive - description: - name: url_launcher_android - sha256: "31222ffb0063171b526d3e569079cf1f8b294075ba323443fdc690842bfd4def" - url: "https://pub.dev" - source: hosted - version: "6.2.0" - url_launcher_ios: - dependency: transitive - description: - name: url_launcher_ios - sha256: bba3373219b7abb6b5e0d071b0fe66dfbe005d07517a68e38d4fc3638f35c6d3 - url: "https://pub.dev" - source: hosted - version: "6.2.1" - url_launcher_linux: - dependency: transitive - description: - name: url_launcher_linux - sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 - url: "https://pub.dev" - source: hosted - version: "3.1.1" - url_launcher_macos: - dependency: transitive - description: - name: url_launcher_macos - sha256: b7244901ea3cf489c5335bdacda07264a6e960b1c1b1a9f91e4bc371d9e68234 - url: "https://pub.dev" - source: hosted - version: "3.1.0" - url_launcher_platform_interface: - dependency: transitive - description: - name: url_launcher_platform_interface - sha256: "980e8d9af422f477be6948bdfb68df8433be71f5743a188968b0c1b887807e50" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - url_launcher_web: - dependency: transitive - description: - name: url_launcher_web - sha256: "7286aec002c8feecc338cc33269e96b73955ab227456e9fb2a91f7fab8a358e9" - url: "https://pub.dev" - source: hosted - version: "2.2.2" - url_launcher_windows: - dependency: transitive - description: - name: url_launcher_windows - sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 - url: "https://pub.dev" - source: hosted - version: "3.1.1" vector_math: dependency: transitive description: @@ -516,5 +452,5 @@ packages: source: hosted version: "1.0.3" sdks: - dart: ">=3.2.0 <4.0.0" - flutter: ">=3.16.0" + dart: ">=3.2.0-194.0.dev <4.0.0" + flutter: ">=3.10.0" diff --git a/frontend/pubspec.yaml b/frontend/pubspec.yaml index 0018e0ea..f8fb6107 100644 --- a/frontend/pubspec.yaml +++ b/frontend/pubspec.yaml @@ -21,7 +21,6 @@ dependencies: flutter_secure_storage: ^9.0.0 hooks_riverpod: ^2.4.9 intl: ^0.18.1 - url_launcher: ^6.2.2 webview_flutter: ^4.4.2 dev_dependencies: