diff --git a/app/android/app/build.gradle b/app/android/app/build.gradle index fda54d1..0dd6382 100644 --- a/app/android/app/build.gradle +++ b/app/android/app/build.gradle @@ -20,7 +20,7 @@ def flutterVersionName = localProperties.getProperty('flutter.versionName') if (flutterVersionName == null) { flutterVersionName = '1.0' } - +apply plugin: 'com.google.gms.google-services' apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" @@ -44,10 +44,10 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.app" + applicationId "com.agrivator.app" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. - minSdkVersion flutter.minSdkVersion + minSdkVersion 21 targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName @@ -67,5 +67,6 @@ flutter { } dependencies { + implementation platform('com.google.firebase:firebase-bom:31.1.0') implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" } diff --git a/app/android/app/google-services.json b/app/android/app/google-services.json new file mode 100644 index 0000000..6177c1a --- /dev/null +++ b/app/android/app/google-services.json @@ -0,0 +1,47 @@ +{ + "project_info": { + "project_number": "1095884333172", + "project_id": "agrivator-test", + "storage_bucket": "agrivator-test.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:1095884333172:android:b17cb06d6b2b13b0bfb121", + "android_client_info": { + "package_name": "com.agrivator.app" + } + }, + "oauth_client": [ + { + "client_id": "1095884333172-qs0m3qtccptnk9rdon8i5to7u0b6v1kk.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.agrivator.app", + "certificate_hash": "fd6f6e37e910e436c8f86e0cdbb94b3e6dfb8bac" + } + }, + { + "client_id": "1095884333172-eabh9sc51ko98g8s58fbbd4dvsc5f1g1.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCETi7qHyhSSDIXbltfTenZIkCfOqR7Ryc" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "1095884333172-eabh9sc51ko98g8s58fbbd4dvsc5f1g1.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/android/app/src/main/AndroidManifest.xml b/app/android/app/src/main/AndroidManifest.xml index 3f2d403..824e03e 100644 --- a/app/android/app/src/main/AndroidManifest.xml +++ b/app/android/app/src/main/AndroidManifest.xml @@ -1,7 +1,8 @@ + - + android:src="@mipmap/ic_launcher" /> + diff --git a/app/android/app/src/main/res/drawable/launch_background.xml b/app/android/app/src/main/res/drawable/launch_background.xml index 304732f..6a36c4f 100644 --- a/app/android/app/src/main/res/drawable/launch_background.xml +++ b/app/android/app/src/main/res/drawable/launch_background.xml @@ -4,9 +4,9 @@ - + android:src="@mipmap/ic_launcher" /> + diff --git a/app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index db77bb4..54d23f5 100644 Binary files a/app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 17987b7..10f2a88 100644 Binary files a/app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 09d4391..be06a28 100644 Binary files a/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d..cfe7fbb 100644 Binary files a/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372e..d4fdbdb 100644 Binary files a/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app/android/build.gradle b/app/android/build.gradle index 83ae220..d0c3888 100644 --- a/app/android/build.gradle +++ b/app/android/build.gradle @@ -6,6 +6,7 @@ buildscript { } dependencies { + classpath 'com.google.gms:google-services:4.3.13' classpath 'com.android.tools.build:gradle:7.1.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } diff --git a/app/assets/images/img1.png b/app/assets/images/img1.png new file mode 100644 index 0000000..55ff320 Binary files /dev/null and b/app/assets/images/img1.png differ diff --git a/app/assets/images/logo.png b/app/assets/images/logo.png new file mode 100644 index 0000000..97944ae Binary files /dev/null and b/app/assets/images/logo.png differ diff --git a/app/assets/images/profile.png b/app/assets/images/profile.png new file mode 100644 index 0000000..413acee Binary files /dev/null and b/app/assets/images/profile.png differ diff --git a/app/assets/images/profile.svg b/app/assets/images/profile.svg new file mode 100644 index 0000000..6dd665d --- /dev/null +++ b/app/assets/images/profile.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/assets/images/top.png b/app/assets/images/top.png new file mode 100644 index 0000000..4cd5235 Binary files /dev/null and b/app/assets/images/top.png differ diff --git a/app/lib/constants/colors.dart b/app/lib/constants/colors.dart new file mode 100644 index 0000000..2b9f969 --- /dev/null +++ b/app/lib/constants/colors.dart @@ -0,0 +1,5 @@ +import 'package:flutter/material.dart'; +class ConstColors{ + Color backgroudColor =const Color(0xFFE3FDE4); + Color darkGreen = const Color(0xFF46C64F); +} \ No newline at end of file diff --git a/app/lib/main.dart b/app/lib/main.dart index 67ab6e7..d92bc53 100644 --- a/app/lib/main.dart +++ b/app/lib/main.dart @@ -1,20 +1,24 @@ +import './screens/splash_screen.dart'; +import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; +import './screens/login_phone.dart'; +import './screens/otp_verification_screen.dart'; -void main() { - runApp(const MyApp()); +Future main() async { + WidgetsFlutterBinding.ensureInitialized(); + await Firebase.initializeApp(); + runApp(MaterialApp( + debugShowCheckedModeBanner: false, + title: 'Agrivator v3', + theme: ThemeData( + primarySwatch: Colors.green, + ), + home: const SplahScreen(), + routes: { + MyPhone.myPhoneRouteName : ((context) => const MyPhone()), + OTPScreen.otpScreenRouteName:(context) => OTPScreen() + }, + )); } -class MyApp extends StatelessWidget { - const MyApp({super.key}); - @override - Widget build(BuildContext context) { - return MaterialApp( - title: 'Flutter Demo', - theme: ThemeData( - primarySwatch: Colors.blue, - //todo: create home page - ), - ); - } -} diff --git a/app/lib/screens/login_phone.dart b/app/lib/screens/login_phone.dart new file mode 100644 index 0000000..e9def7e --- /dev/null +++ b/app/lib/screens/login_phone.dart @@ -0,0 +1,145 @@ +import 'package:app/constants/colors.dart'; +import 'package:app/service/firebase_service.dart'; +import 'package:flutter/material.dart'; +import '../utils/pop.dart'; +import 'otp_verification_screen.dart'; + +class MyPhone extends StatefulWidget { + static const String myPhoneRouteName = 'MyPhone'; + final String phoneNumber = ""; + const MyPhone({super.key}); + + @override + State createState() => _MyPhoneState(); +} + +class _MyPhoneState extends State { + + final TextEditingController _countryController = TextEditingController(); + + var phone = ''; + @override + void initState() { + _countryController.text = '+91'; + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: ConstColors().backgroudColor, + body: Container( + alignment: Alignment.center, + margin: const EdgeInsets.only(left: 20, right: 20), + child: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset( + 'assets/images/img1.png', + width: 150, + height: 150, + ), + const SizedBox( + height: 10, + ), + const Text( + 'Phone Verification', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 22, + ), + ), + const SizedBox( + height: 10, + ), + const Text( + 'We need to register your phone before getting started!', + style: TextStyle(fontSize: 16), + textAlign: TextAlign.center, + ), + const SizedBox( + height: 10, + ), + Container( + height: 55, + decoration: BoxDecoration( + color: Colors.white, + border: Border.all(color: Colors.grey, width: 1), + borderRadius: BorderRadius.circular(10)), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const SizedBox( + width: 10, + ), + SizedBox( + width: 40, + child: TextField( + keyboardType: TextInputType.numberWithOptions(), + controller: _countryController, + decoration: + const InputDecoration(border: InputBorder.none), + ), + ), + const Text( + '|', + style: TextStyle(fontSize: 33, color: Colors.grey), + ), + const SizedBox( + width: 10, + ), + Expanded( + child: TextField( + + keyboardType: TextInputType.number, + onChanged: (value) { + phone = value; + }, + decoration: const InputDecoration( + border: InputBorder.none, hintText: "Phone")), + ), + ], + ), + ), + const SizedBox( + height: 20, + ), + SizedBox( + height: 45, + width: double.infinity, + child: ElevatedButton( + onPressed: () { + if (_countryController.text.isEmpty) { + PopUp().popUpAlert( + context, + 'Country Code missing', + 'Enter a valid contrycode', + ); + } else if (phone.length < 10||phone.length > 10) { + PopUp().popUpAlert( + context, + 'Phone number error', + 'Enter a valid phonenumber', + ); + } else { + phone = _countryController.text +phone; + FirebaseServices().verifyPhoneNumber(phone); + Navigator.pushNamed(context, OTPScreen.otpScreenRouteName,arguments: phone); + } + }, + style: ElevatedButton.styleFrom( + backgroundColor: Colors.green, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10)), + ), + child: const Text('Send OTP'), + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/app/lib/screens/otp_verification_screen.dart b/app/lib/screens/otp_verification_screen.dart new file mode 100644 index 0000000..4d15f11 --- /dev/null +++ b/app/lib/screens/otp_verification_screen.dart @@ -0,0 +1,191 @@ +import 'package:app/screens/login_phone.dart'; +import 'package:app/service/firebase_service.dart'; +import 'package:flutter/material.dart'; + +import 'package:otp_timer_button/otp_timer_button.dart'; +import 'package:pinput/pinput.dart'; +import '../constants/colors.dart'; +import '../utils/pop.dart'; + +class OTPScreen extends StatefulWidget { + static const String otpScreenRouteName = "otpscreen"; + + OTPScreen({super.key}); + + @override + State createState() => _OTPScreenState(); +} + +class _OTPScreenState extends State { + TextEditingController pinController = TextEditingController(); + String code = ""; + Color focusedBorderColor = Color.fromRGBO(23, 171, 144, 1); + Color fillColor = Color.fromARGB(0, 91, 214, 107); + Color borderColor = Color.fromRGBO(23, 171, 144, 0.4); + + final defaultPinTheme = PinTheme( + width: 56, + height: 56, + textStyle: const TextStyle( + fontSize: 22, + color: Color.fromARGB(255, 68, 176, 108), + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(19), + border: Border.all(color: Color.fromRGBO(23, 171, 144, 0.4)), + ), + ); + @override + Widget build(BuildContext context) { + final phoneNumber = ModalRoute.of(context)?.settings.arguments as String; + return Scaffold( + backgroundColor: ConstColors().backgroudColor, + appBar: AppBar( + elevation: 0, + backgroundColor: Colors.transparent, + leading: IconButton( + onPressed: () { + Navigator.pushNamedAndRemoveUntil( + context, + MyPhone.myPhoneRouteName, + (route) => false, + ); + }, + icon: const Icon(Icons.arrow_back_ios_rounded), + color: Colors.green, + ), + ), + body: Container( + alignment: Alignment.center, + margin: const EdgeInsets.only(left: 20, right: 20), + child: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset( + 'assets/images/img1.png', + width: 150, + height: 150, + ), + const SizedBox( + height: 10, + ), + const Text( + 'OTP SEND SUCCESSFULLY!', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 20, + ), + ), + const SizedBox( + height: 10, + ), + const Text( + 'please enter OTP to verify your number', + style: TextStyle(fontSize: 14), + textAlign: TextAlign.center, + ), + const SizedBox( + height: 10, + ), + const SizedBox( + height: 20, + ), + Pinput( + controller: pinController, + focusedPinTheme: defaultPinTheme.copyWith( + decoration: defaultPinTheme.decoration!.copyWith( + borderRadius: BorderRadius.circular(8), + border: Border.all(color: focusedBorderColor), + ), + ), + submittedPinTheme: defaultPinTheme.copyWith( + decoration: defaultPinTheme.decoration!.copyWith( + color: fillColor, + borderRadius: BorderRadius.circular(19), + border: Border.all(color: focusedBorderColor), + ), + ), + errorPinTheme: defaultPinTheme.copyBorderWith( + border: Border.all(color: Colors.redAccent), + ), + length: 6, + showCursor: true, + onCompleted: ((value) => code = value), + ), + const SizedBox( + height: 10, + ), + OtpTimerButton( + onPressed: () { + FirebaseServices().verifyPhoneNumber(phoneNumber); + }, + text: const Text('Resend OTP'), + duration: 60, + buttonType: ButtonType.text_button, + ), + const SizedBox( + height: 10, + ), + SizedBox( + height: 45, + width: double.infinity, + child: ElevatedButton( + onPressed: () async { + if (pinController.text.isEmpty) { + PopUp().popUpAlert( + context, + 'Enter valid OTP', + "", + ); + } else { + bool result = await FirebaseServices().verifyOTP(code); + if (result == false) { + PopUp().popUpAlert( + context, + 'Wrong OTP', + 'check otp entered', + ); + } else { + PopUp().popUpAlert( + context, + 'Phone number verified', + '', + ); + } + } + }, + style: ElevatedButton.styleFrom( + backgroundColor: Colors.green, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10)), + ), + child: const Text('Verify OTP'), + ), + ), + Row( + children: [ + TextButton( + onPressed: () { + Navigator.pushNamedAndRemoveUntil( + context, + MyPhone.myPhoneRouteName, + (route) => false, + ); + }, + child: const Text( + "Edit phone number?", + style: TextStyle( + color: Colors.black, + ), + ), + ), + ], + ), + ], + ), + ), + ), + ); + } +} diff --git a/app/lib/screens/splash_screen.dart b/app/lib/screens/splash_screen.dart new file mode 100644 index 0000000..e5926da --- /dev/null +++ b/app/lib/screens/splash_screen.dart @@ -0,0 +1,37 @@ +import 'package:animated_splash_screen/animated_splash_screen.dart'; +import 'package:app/constants/colors.dart'; +import './login_phone.dart'; +import 'package:flutter/material.dart'; + +class SplahScreen extends StatelessWidget { + const SplahScreen({super.key}); + + @override + Widget build(BuildContext context) { + return AnimatedSplashScreen( + backgroundColor: ConstColors().backgroudColor, + splash: Container( + alignment: Alignment.center, + margin: const EdgeInsets.only(left: 20, right: 20), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset( + 'assets/images/top.png',width: 150, + height: 150, + ), + + Image.asset( + 'assets/images/logo.png', + width: 150, + height: 150, + ), + ], + ), + ), + splashIconSize: 500, + nextScreen: const MyPhone(), + + ); + } +} diff --git a/app/lib/service/firebase_service.dart b/app/lib/service/firebase_service.dart new file mode 100644 index 0000000..44dcc0e --- /dev/null +++ b/app/lib/service/firebase_service.dart @@ -0,0 +1,30 @@ +import 'package:firebase_auth/firebase_auth.dart'; + +class FirebaseServices { + static String vId = ""; + Future verifyPhoneNumber(String phoneNumber) async { + await FirebaseAuth.instance.verifyPhoneNumber( + phoneNumber: phoneNumber, + verificationCompleted: (phoneAuthCredential) {}, + verificationFailed: (FirebaseAuthException e) {}, + codeSent: (String verificationId, int? resendToken) { + vId = verificationId; + }, + codeAutoRetrievalTimeout: (String verificationId) {}, + ); + } + + Future verifyOTP( String code) async { + try { + PhoneAuthCredential credential = PhoneAuthProvider.credential( + verificationId: vId, + smsCode: code, + ); + await FirebaseAuth.instance.signInWithCredential(credential); + return true; + } catch (e) { + return false; + } + + } +} diff --git a/app/lib/utils/pop.dart b/app/lib/utils/pop.dart new file mode 100644 index 0000000..94adc02 --- /dev/null +++ b/app/lib/utils/pop.dart @@ -0,0 +1,32 @@ +import 'package:flutter/material.dart'; + +import '../constants/colors.dart'; + +class PopUp{ + Future popUpAlert(BuildContext context,String title,String content) { + return showDialog( + context: context, + builder: (BuildContext context) => AlertDialog( + actions: [ + TextButton( + onPressed: () { + Navigator.pop(context); + }, + child: Text( + 'OK', + style: TextStyle( + color: ConstColors().darkGreen, + ), + ), + ) + ], + title: Text(title), + content: SingleChildScrollView( + child: ListBody( + children: [Text(content)], + ), + ), + ), + ); + } +} \ No newline at end of file diff --git a/app/linux/flutter/generated_plugin_registrant.cc b/app/linux/flutter/generated_plugin_registrant.cc index e71a16d..13ceb2a 100644 --- a/app/linux/flutter/generated_plugin_registrant.cc +++ b/app/linux/flutter/generated_plugin_registrant.cc @@ -6,6 +6,10 @@ #include "generated_plugin_registrant.h" +#include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) smart_auth_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "SmartAuthPlugin"); + smart_auth_plugin_register_with_registrar(smart_auth_registrar); } diff --git a/app/linux/flutter/generated_plugins.cmake b/app/linux/flutter/generated_plugins.cmake index 2e1de87..9cadb0a 100644 --- a/app/linux/flutter/generated_plugins.cmake +++ b/app/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + smart_auth ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/app/macos/Flutter/GeneratedPluginRegistrant.swift b/app/macos/Flutter/GeneratedPluginRegistrant.swift index cccf817..0a1a04a 100644 --- a/app/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/app/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,6 +5,14 @@ import FlutterMacOS import Foundation +import firebase_auth +import firebase_core +import shared_preferences_macos +import smart_auth func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin")) + FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) + SmartAuthPlugin.register(with: registry.registrar(forPlugin: "SmartAuthPlugin")) } diff --git a/app/pubspec.lock b/app/pubspec.lock index 9295504..6db51de 100644 --- a/app/pubspec.lock +++ b/app/pubspec.lock @@ -1,6 +1,20 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.9" + animated_splash_screen: + dependency: "direct main" + description: + name: animated_splash_screen + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" async: dependency: transitive description: @@ -29,6 +43,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.1" + cloud_firestore_platform_interface: + dependency: transitive + description: + name: cloud_firestore_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "5.9.0" + cloud_firestore_web: + dependency: transitive + description: + name: cloud_firestore_web + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" collection: dependency: transitive description: @@ -43,6 +71,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.5" + email_validator: + dependency: "direct main" + description: + name: email_validator + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.17" fake_async: dependency: transitive description: @@ -50,6 +85,62 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.4" + firebase_auth: + dependency: "direct main" + description: + name: firebase_auth + url: "https://pub.dartlang.org" + source: hosted + version: "4.1.4" + firebase_auth_platform_interface: + dependency: transitive + description: + name: firebase_auth_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "6.11.3" + firebase_auth_web: + dependency: transitive + description: + name: firebase_auth_web + url: "https://pub.dartlang.org" + source: hosted + version: "5.1.3" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "4.5.2" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" flutter: dependency: "direct main" description: flutter @@ -62,11 +153,58 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.1" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.6" flutter_test: dependency: "direct dev" description: flutter source: sdk version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + font_awesome_flutter: + dependency: "direct main" + description: + name: font_awesome_flutter + url: "https://pub.dartlang.org" + source: hosted + version: "10.2.1" + http: + dependency: "direct main" + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.13.5" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.2" + intl: + dependency: transitive + description: + name: intl + url: "https://pub.dartlang.org" + source: hosted + version: "0.17.0" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.4" lints: dependency: transitive description: @@ -95,6 +233,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.8.0" + nested: + dependency: transitive + description: + name: nested + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + otp_timer_button: + dependency: "direct main" + description: + name: otp_timer_button + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + page_transition: + dependency: transitive + description: + name: page_transition + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.9" path: dependency: transitive description: @@ -102,11 +261,158 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.8.2" + path_drawing: + dependency: transitive + description: + name: path_drawing + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.7" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.3" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "5.1.0" + pinput: + dependency: "direct main" + description: + name: pinput + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.16" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.3" + process: + dependency: transitive + description: + name: process + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.4" + provider: + dependency: "direct main" + description: + name: provider + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.4" + shape_of_view_null_safe: + dependency: "direct main" + description: + name: shape_of_view_null_safe + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.15" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.14" + shared_preferences_ios: + dependency: transitive + description: + name: shared_preferences_ios + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + shared_preferences_macos: + dependency: transitive + description: + name: shared_preferences_macos + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" sky_engine: dependency: transitive description: flutter source: sdk version: "0.0.99" + smart_auth: + dependency: transitive + description: + name: smart_auth + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.6" source_span: dependency: transitive description: @@ -149,6 +455,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.4.12" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" vector_math: dependency: transitive description: @@ -156,5 +469,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.2" + win32: + dependency: transitive + description: + name: win32 + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.1" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0+2" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.0" sdks: dart: ">=2.18.2 <3.0.0" + flutter: ">=3.0.0" diff --git a/app/pubspec.yaml b/app/pubspec.yaml index c33e56e..56d7824 100644 --- a/app/pubspec.yaml +++ b/app/pubspec.yaml @@ -36,6 +36,19 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 + shape_of_view_null_safe: ^2.0.0 + font_awesome_flutter: ^10.2.1 + flutter_svg: ^1.1.6 + email_validator: ^2.1.17 + http: ^0.13.5 + provider: ^6.0.4 + shared_preferences: ^2.0.15 + pinput: ^2.2.16 + otp_timer_button: ^1.1.0 + firebase_core: + firebase_auth: + animated_splash_screen: ^1.3.0 + dev_dependencies: flutter_test: @@ -60,8 +73,8 @@ flutter: uses-material-design: true # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg + assets: + - assets/images/ # - images/a_dot_ham.jpeg # An image asset can refer to one or more resolution-specific "variants", see diff --git a/app/windows/flutter/generated_plugin_registrant.cc b/app/windows/flutter/generated_plugin_registrant.cc index 8b6d468..1e90c87 100644 --- a/app/windows/flutter/generated_plugin_registrant.cc +++ b/app/windows/flutter/generated_plugin_registrant.cc @@ -6,6 +6,9 @@ #include "generated_plugin_registrant.h" +#include void RegisterPlugins(flutter::PluginRegistry* registry) { + SmartAuthPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("SmartAuthPlugin")); } diff --git a/app/windows/flutter/generated_plugins.cmake b/app/windows/flutter/generated_plugins.cmake index b93c4c3..ffb020c 100644 --- a/app/windows/flutter/generated_plugins.cmake +++ b/app/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + smart_auth ) list(APPEND FLUTTER_FFI_PLUGIN_LIST