From 3ee4e50b71d91ee378c459680074613935c64188 Mon Sep 17 00:00:00 2001 From: Nathan Woodburn Date: Mon, 3 Jun 2024 13:40:27 +1000 Subject: [PATCH] feat: Add account creation --- lib/main.dart | 79 ++++++--- macos/Flutter/GeneratedPluginRegistrant.swift | 2 + pubspec.lock | 159 +++++++++++++++++- pubspec.yaml | 2 + 4 files changed, 218 insertions(+), 24 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index f344412..cec905b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,11 +1,41 @@ import 'package:flutter/material.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:http/http.dart' as http; +import 'dart:convert'; -void main() { - runApp(const MyApp()); +Future main() async { + final prefs = await SharedPreferences.getInstance(); + + // Check for the uuid key in the shared preferences + if (!prefs.containsKey('uuid')) { + // Create an account using https://api.firewallet.au/account + // and get the uuid from the response + final response = await http.post( + Uri.parse('https://api.firewallet.au/account'), + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + }, + body: '{}', + ); + + // Get uuid from { "userID": "..." } + final uuid = jsonDecode(response.body)['userID']; + // Save the uuid to the shared preferences + await prefs.setString('uuid', uuid); + } + + // Get the uuid from the shared preferences + final String? uuid = prefs.getString('uuid'); + runApp(MyApp(uuid: uuid ?? 'null')); } class MyApp extends StatelessWidget { - const MyApp({super.key}); + const MyApp({ + super.key, + required this.uuid, + }); + + final String uuid; // This widget is the root of your application. @override @@ -13,16 +43,27 @@ class MyApp extends StatelessWidget { return MaterialApp( title: 'Fire Wallet', theme: ThemeData( - colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), - useMaterial3: true, + brightness: Brightness.light, + /* light theme settings */ ), - home: const MyHomePage(), + darkTheme: ThemeData( + brightness: Brightness.dark, + /* dark theme settings */ + ), + themeMode: ThemeMode.system, + debugShowCheckedModeBanner: false, + home: MyHomePage(uuid: uuid), ); } } class MyHomePage extends StatefulWidget { - const MyHomePage({super.key}); + const MyHomePage({ + super.key, + required this.uuid, + }); + + final String uuid; @override State createState() => _MyHomePageState(); @@ -66,7 +107,7 @@ class _MyHomePageState extends State { child: SizedBox.expand( child: Center( child: Text( - 'Home page', + 'Welcome to Fire Wallet! 🚀', style: theme.textTheme.titleLarge, ), ), @@ -74,24 +115,16 @@ class _MyHomePageState extends State { ), /// Notifications page - const Padding( - padding: EdgeInsets.all(8.0), + Padding( + padding: const EdgeInsets.all(8.0), child: Column( children: [ Card( - child: ListTile( - leading: Icon(Icons.notifications_sharp), - title: Text('Notification 1'), - subtitle: Text('This is a notification'), - ), - ), - Card( - child: ListTile( - leading: Icon(Icons.notifications_sharp), - title: Text('Notification 2'), - subtitle: Text('This is a notification'), - ), - ), + child: Center( + child: Text( + // UUID of the user + 'UUID: ${widget.uuid}', + ))), ], ), ), diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index cccf817..724bb2a 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,6 +5,8 @@ import FlutterMacOS import Foundation +import shared_preferences_foundation func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) } diff --git a/pubspec.lock b/pubspec.lock index 5dd74f6..c0f6365 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -97,6 +97,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + file: + dependency: transitive + description: + name: file + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" flutter: dependency: "direct main" description: flutter @@ -123,6 +139,27 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + http: + dependency: "direct main" + description: + name: http + sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" image: dependency: transitive description: @@ -203,6 +240,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.0" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + url: "https://pub.dev" + source: hosted + version: "2.2.1" petitparser: dependency: transitive description: @@ -211,6 +272,78 @@ packages: url: "https://pub.dev" source: hosted version: "6.0.2" + platform: + dependency: transitive + description: + name: platform + sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" + url: "https://pub.dev" + source: hosted + version: "3.1.4" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 + url: "https://pub.dev" + source: hosted + version: "2.2.3" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + sha256: "93d0ec9dd902d85f326068e6a899487d1f65ffcd5798721a95330b26c8131577" + url: "https://pub.dev" + source: hosted + version: "2.2.3" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + sha256: "0a8a893bf4fd1152f93fec03a415d11c27c74454d96e2318a7ac38dd18683ab7" + url: "https://pub.dev" + source: hosted + version: "2.4.0" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a" + url: "https://pub.dev" + source: hosted + version: "2.3.0" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + url: "https://pub.dev" + source: hosted + version: "2.3.2" sky_engine: dependency: transitive description: flutter @@ -288,6 +421,30 @@ packages: url: "https://pub.dev" source: hosted version: "14.2.1" + web: + dependency: transitive + description: + name: web + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + url: "https://pub.dev" + source: hosted + version: "0.5.1" + win32: + dependency: transitive + description: + name: win32 + sha256: a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4 + url: "https://pub.dev" + source: hosted + version: "5.5.1" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d + url: "https://pub.dev" + source: hosted + version: "1.0.4" xml: dependency: transitive description: @@ -306,4 +463,4 @@ packages: version: "3.1.2" sdks: dart: ">=3.4.1 <4.0.0" - flutter: ">=3.18.0-18.0.pre.54" + flutter: ">=3.22.0" diff --git a/pubspec.yaml b/pubspec.yaml index 77df376..ef34380 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -35,6 +35,8 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.6 + shared_preferences: ^2.2.3 + http: ^1.2.1 dev_dependencies: flutter_test: