From 37ba4788873e5ab4cfcf7850501f71c7c4c80094 Mon Sep 17 00:00:00 2001 From: Satya Malugu Date: Wed, 7 Jun 2023 11:24:22 -0700 Subject: [PATCH 1/2] all files --- .../fullscreen/flutter_module/lib/main.dart | 10 ++++ .../fullscreen/flutter_module/pubspec.yaml | 1 + .../IOSFullScreen.xcodeproj/project.pbxproj | 47 ++++++++++++------- 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/add_to_app/fullscreen/flutter_module/lib/main.dart b/add_to_app/fullscreen/flutter_module/lib/main.dart index 4615a897126..258a946a4bb 100644 --- a/add_to_app/fullscreen/flutter_module/lib/main.dart +++ b/add_to_app/fullscreen/flutter_module/lib/main.dart @@ -4,8 +4,13 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_module/plaid.dart'; import 'package:provider/provider.dart'; +import 'dart:async'; + +import 'package:plaid_flutter/plaid_flutter.dart'; + /// The entrypoint for the flutter module. void main() { // This call ensures the Flutter binding has been set up before creating the @@ -68,6 +73,7 @@ class MyApp extends StatelessWidget { routes: { '/': (context) => const FullScreenView(), '/mini': (context) => const Contents(), + '/plaid': (context) => PlaidApp(), }, ); } @@ -156,6 +162,10 @@ class Contents extends StatelessWidget { child: const Text('Exit this screen'), ), ], + ElevatedButton( + onPressed: () => Navigator.pushNamed(context, '/plaid'), + child: const Text('Start plaid'), + ), ], ), ), diff --git a/add_to_app/fullscreen/flutter_module/pubspec.yaml b/add_to_app/fullscreen/flutter_module/pubspec.yaml index 420858c7344..487286f034f 100644 --- a/add_to_app/fullscreen/flutter_module/pubspec.yaml +++ b/add_to_app/fullscreen/flutter_module/pubspec.yaml @@ -9,6 +9,7 @@ environment: dependencies: flutter: sdk: flutter + plaid_flutter: ^3.1.1 provider: ^6.0.2 dev_dependencies: diff --git a/add_to_app/fullscreen/ios_fullscreen/IOSFullScreen.xcodeproj/project.pbxproj b/add_to_app/fullscreen/ios_fullscreen/IOSFullScreen.xcodeproj/project.pbxproj index c6c8cf44a4e..cf03eccd51d 100644 --- a/add_to_app/fullscreen/ios_fullscreen/IOSFullScreen.xcodeproj/project.pbxproj +++ b/add_to_app/fullscreen/ios_fullscreen/IOSFullScreen.xcodeproj/project.pbxproj @@ -179,7 +179,8 @@ 26DF66D0233136460076ACA6 /* Sources */, 26DF66D1233136460076ACA6 /* Frameworks */, 26DF66D2233136460076ACA6 /* Resources */, - D1C2795C35803D65EBC8B371 /* [CP] Embed Pods Frameworks */, + 2D6DA20CF3D3B0D3695CAB91 /* [CP-User] Embed Flutter Build flutter_module Script */, + 1EB32B86D275CD1133E157AC /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -321,6 +322,33 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + 1EB32B86D275CD1133E157AC /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-IOSFullScreen/Pods-IOSFullScreen-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-IOSFullScreen/Pods-IOSFullScreen-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-IOSFullScreen/Pods-IOSFullScreen-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 2D6DA20CF3D3B0D3695CAB91 /* [CP-User] Embed Flutter Build flutter_module Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + name = "[CP-User] Embed Flutter Build flutter_module Script"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "set -e\nset -u\nsource \"${SRCROOT}/../flutter_module/.ios/Flutter/flutter_export_environment.sh\"\nexport VERBOSE_SCRIPT_LOGGING=1 && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/xcode_backend.sh embed_and_thin"; + }; 79D4306CA9A49DFDB68D2B71 /* [CP-User] Run Flutter Build flutter_module Script */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -375,23 +403,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - D1C2795C35803D65EBC8B371 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-IOSFullScreen/Pods-IOSFullScreen-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-IOSFullScreen/Pods-IOSFullScreen-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-IOSFullScreen/Pods-IOSFullScreen-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ From 383d46cd5716b2752bf16ee0765491a47cbd4971 Mon Sep 17 00:00:00 2001 From: Satya Malugu Date: Wed, 7 Jun 2023 12:47:19 -0700 Subject: [PATCH 2/2] all files --- .../flutter_module/.fvm/flutter_sdk | 1 + .../flutter_module/.fvm/fvm_config.json | 4 + .../fullscreen/flutter_module/lib/plaid.dart | 128 ++++++++++++++++++ .../ios_fullscreen/.fvm/flutter_sdk | 1 + .../ios_fullscreen/.fvm/fvm_config.json | 4 + add_to_app/fullscreen/ios_fullscreen/Podfile | 1 + 6 files changed, 139 insertions(+) create mode 120000 add_to_app/fullscreen/flutter_module/.fvm/flutter_sdk create mode 100644 add_to_app/fullscreen/flutter_module/.fvm/fvm_config.json create mode 100644 add_to_app/fullscreen/flutter_module/lib/plaid.dart create mode 120000 add_to_app/fullscreen/ios_fullscreen/.fvm/flutter_sdk create mode 100644 add_to_app/fullscreen/ios_fullscreen/.fvm/fvm_config.json diff --git a/add_to_app/fullscreen/flutter_module/.fvm/flutter_sdk b/add_to_app/fullscreen/flutter_module/.fvm/flutter_sdk new file mode 120000 index 00000000000..1ab1f406fa0 --- /dev/null +++ b/add_to_app/fullscreen/flutter_module/.fvm/flutter_sdk @@ -0,0 +1 @@ +/Users/smalugu/fvm/versions/3.10.0 \ No newline at end of file diff --git a/add_to_app/fullscreen/flutter_module/.fvm/fvm_config.json b/add_to_app/fullscreen/flutter_module/.fvm/fvm_config.json new file mode 100644 index 00000000000..ba129cfda03 --- /dev/null +++ b/add_to_app/fullscreen/flutter_module/.fvm/fvm_config.json @@ -0,0 +1,4 @@ +{ + "flutterSdkVersion": "3.10.0", + "flavors": {} +} \ No newline at end of file diff --git a/add_to_app/fullscreen/flutter_module/lib/plaid.dart b/add_to_app/fullscreen/flutter_module/lib/plaid.dart new file mode 100644 index 00000000000..cc9b7a72af8 --- /dev/null +++ b/add_to_app/fullscreen/flutter_module/lib/plaid.dart @@ -0,0 +1,128 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:plaid_flutter/plaid_flutter.dart'; + +class PlaidApp extends StatefulWidget { + @override + _PlaidAppState createState() => _PlaidAppState(); +} + +class _PlaidAppState extends State { + LinkConfiguration? _configuration; + StreamSubscription? _streamEvent; + StreamSubscription? _streamExit; + StreamSubscription? _streamSuccess; + LinkObject? _successObject; + + @override + void initState() { + super.initState(); + + _streamEvent = PlaidLink.onEvent.listen(_onEvent); + _streamExit = PlaidLink.onExit.listen(_onExit); + _streamSuccess = PlaidLink.onSuccess.listen(_onSuccess); + } + + @override + void dispose() { + _streamEvent?.cancel(); + _streamExit?.cancel(); + _streamSuccess?.cancel(); + super.dispose(); + } + + void _createLegacyTokenConfiguration() { + setState(() { + _configuration = LegacyLinkConfiguration( + clientName: "CLIENT_NAME", + publicKey: "PUBLIC_KEY", + environment: LinkEnvironment.sandbox, + products: [ + LinkProduct.auth, + ], + language: "en", + countryCodes: ['US'], + userLegalName: "John Appleseed", + userEmailAddress: "jappleseed@youapp.com", + userPhoneNumber: "+1 (512) 555-1234", + ); + }); + } + + void _createLinkTokenConfiguration() { + setState(() { + _configuration = LinkTokenConfiguration( + token: "link-production-xx", + ); + }); + } + + void _onEvent(LinkEvent event) { + final name = event.name; + final metadata = event.metadata.description(); + print("onEvent: $name, metadata: $metadata"); + } + + void _onSuccess(LinkSuccess event) { + final token = event.publicToken; + final metadata = event.metadata.description(); + print("onSuccess: $token, metadata: $metadata"); + setState(() => _successObject = event); + } + + void _onExit(LinkExit event) { + final metadata = event.metadata.description(); + final error = event.error?.description(); + print("onExit metadata: $metadata, error: $error"); + } + + @override + Widget build(BuildContext context) { + return MaterialApp( + home: Scaffold( + body: Container( + width: double.infinity, + color: Colors.grey[200], + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Expanded( + child: Center( + child: Text( + _configuration?.toJson().toString() ?? "", + textAlign: TextAlign.center, + ), + ), + ), + ElevatedButton( + onPressed: _createLegacyTokenConfiguration, + child: Text("Create Legacy Token Configuration"), + ), + SizedBox(height: 15), + ElevatedButton( + onPressed: _createLinkTokenConfiguration, + child: Text("Create Link Token Configuration"), + ), + SizedBox(height: 15), + ElevatedButton( + onPressed: _configuration != null + ? () => PlaidLink.open(configuration: _configuration!) + : null, + child: Text("Open"), + ), + Expanded( + child: Center( + child: Text( + _successObject?.toJson().toString() ?? "", + textAlign: TextAlign.center, + ), + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/add_to_app/fullscreen/ios_fullscreen/.fvm/flutter_sdk b/add_to_app/fullscreen/ios_fullscreen/.fvm/flutter_sdk new file mode 120000 index 00000000000..1ab1f406fa0 --- /dev/null +++ b/add_to_app/fullscreen/ios_fullscreen/.fvm/flutter_sdk @@ -0,0 +1 @@ +/Users/smalugu/fvm/versions/3.10.0 \ No newline at end of file diff --git a/add_to_app/fullscreen/ios_fullscreen/.fvm/fvm_config.json b/add_to_app/fullscreen/ios_fullscreen/.fvm/fvm_config.json new file mode 100644 index 00000000000..ba129cfda03 --- /dev/null +++ b/add_to_app/fullscreen/ios_fullscreen/.fvm/fvm_config.json @@ -0,0 +1,4 @@ +{ + "flutterSdkVersion": "3.10.0", + "flavors": {} +} \ No newline at end of file diff --git a/add_to_app/fullscreen/ios_fullscreen/Podfile b/add_to_app/fullscreen/ios_fullscreen/Podfile index 4140cea7d9f..a8c05f099dc 100644 --- a/add_to_app/fullscreen/ios_fullscreen/Podfile +++ b/add_to_app/fullscreen/ios_fullscreen/Podfile @@ -3,6 +3,7 @@ flutter_application_path = '../flutter_module' load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb') +pod 'Plaid' target 'IOSFullScreen' do # Comment the next line if you don't want to use dynamic frameworks