diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index d727a2f..2a8ac42 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig index 592ceee..ec97fc6 100644 --- a/ios/Flutter/Debug.xcconfig +++ b/ios/Flutter/Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig index 592ceee..c4855bf 100644 --- a/ios/Flutter/Release.xcconfig +++ b/ios/Flutter/Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/ios/Podfile b/ios/Podfile new file mode 100644 index 0000000..5ad9c9e --- /dev/null +++ b/ios/Podfile @@ -0,0 +1,44 @@ +# Uncomment this line to define a global platform for your project + platform :ios, '12.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + # target 'RunnerTests' do + # inherit! :search_paths + # end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/ios/Podfile.lock b/ios/Podfile.lock new file mode 100644 index 0000000..e0d14e8 --- /dev/null +++ b/ios/Podfile.lock @@ -0,0 +1,36 @@ +PODS: + - connectivity_plus (0.0.1): + - Flutter + - ReachabilitySwift + - Flutter (1.0.0) + - ReachabilitySwift (5.0.0) + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`) + - Flutter (from `Flutter`) + - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) + +SPEC REPOS: + trunk: + - ReachabilitySwift + +EXTERNAL SOURCES: + connectivity_plus: + :path: ".symlinks/plugins/connectivity_plus/ios" + Flutter: + :path: Flutter + shared_preferences_foundation: + :path: ".symlinks/plugins/shared_preferences_foundation/darwin" + +SPEC CHECKSUMS: + connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d + Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 + ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 + shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695 + +PODFILE CHECKSUM: 87eb8569d101acc3edb071281a9b070909b01eb4 + +COCOAPODS: 1.14.3 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 50e2b2a..26f4827 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -13,6 +13,7 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E5A02B025B4501F2442035D9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9AEE7FE48B5BD5E5BD1E337 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -31,10 +32,12 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2BC458090944EAB20D4B99D4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 92E17F8AAD32B5210B15E16E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -42,6 +45,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E9AEE7FE48B5BD5E5BD1E337 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F6B542C25973661E38B50C2F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -49,12 +54,21 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E5A02B025B4501F2442035D9 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 312FD79F642630CA20F866A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + E9AEE7FE48B5BD5E5BD1E337 /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -72,6 +86,8 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, + C89F5C8D77FA7378EC45576A /* Pods */, + 312FD79F642630CA20F866A0 /* Frameworks */, ); sourceTree = ""; }; @@ -98,6 +114,17 @@ path = Runner; sourceTree = ""; }; + C89F5C8D77FA7378EC45576A /* Pods */ = { + isa = PBXGroup; + children = ( + F6B542C25973661E38B50C2F /* Pods-Runner.debug.xcconfig */, + 92E17F8AAD32B5210B15E16E /* Pods-Runner.release.xcconfig */, + 2BC458090944EAB20D4B99D4 /* Pods-Runner.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -105,12 +132,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + F8F084BCF7BD9B22A56A9676 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 0B649054ED34D466116A76B4 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -127,7 +156,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1430; ORGANIZATIONNAME = ""; TargetAttributes = { 97C146ED1CF9000F007C117D = { @@ -169,6 +198,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 0B649054ED34D466116A76B4 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -176,6 +222,7 @@ files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( @@ -199,6 +246,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + F8F084BCF7BD9B22A56A9676 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + 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; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -274,7 +343,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -351,7 +420,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -400,7 +469,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index c87d15a..a6b826d 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ + + diff --git a/lib/Utils/Common/CustomTextFormField.dart b/lib/Utils/Common/CustomTextFormField.dart new file mode 100644 index 0000000..bca2da0 --- /dev/null +++ b/lib/Utils/Common/CustomTextFormField.dart @@ -0,0 +1,140 @@ +import 'package:flutter/material.dart'; +import 'package:glassmorphism/glassmorphism.dart'; + +class CustomTextFormField extends StatefulWidget { + const CustomTextFormField({ + Key? key, + this.validator, + this.textEditingController, + this.hintText, + this.leadingIcon, + this.prefixIconColor = const Color(0xFF737373), + this.isInputPassword = false, + this.validatorText, + this.value, + this.readonly = false, + this.enabled = true, + this.maxlines = 1, + this.texttype, + this.inputFormatters, + this.onInput, + }) : super(key: key); + + final dynamic validator; + final TextEditingController? textEditingController; + final String? hintText; + final Widget? leadingIcon; + final Color prefixIconColor; + final bool isInputPassword; + final String? validatorText; + final String? value; + final bool readonly; + final bool enabled; + final int maxlines; + final TextInputType? texttype; + final dynamic inputFormatters; + final Function(String)? onInput; + + @override + State createState() => _CustomTextFormFieldState(); +} + +class _CustomTextFormFieldState extends State { + late bool obscureText; + + @override + void initState() { + super.initState(); + obscureText = widget.isInputPassword; + } + + @override + Widget build(BuildContext context) { + return GlassmorphicContainer( + width: double.infinity, + height: 50, + borderRadius: 8, + blur: 10, + alignment: Alignment.bottomCenter, + border: 2, + linearGradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + Color(0xFFffffff).withOpacity(0.1), + Color(0xFFFFFFFF).withOpacity(0.05), + ], + stops: [ + 0.1, + 1, + ]), + borderGradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + Color(0xff9A0000).withOpacity(0.5), + Color(0xFFffffff).withOpacity(0.5), + ], + ), + child: TextFormField( + cursorColor: Colors.red, + initialValue: widget.value, + readOnly: widget.readonly, + enabled: widget.enabled, + enableInteractiveSelection: false, + maxLines: widget.maxlines, + autovalidateMode: AutovalidateMode.onUserInteraction, + obscureText: obscureText, + controller: widget.textEditingController, + decoration: InputDecoration( + hintText: widget.hintText, + prefixIconColor: widget.prefixIconColor, + // ignore: prefer_null_aware_operators + prefixIcon: widget.leadingIcon == null ? null : widget.leadingIcon!, + suffixIcon: widget.isInputPassword + ? GestureDetector( + onTap: () => setState(() => obscureText = !obscureText), + child: obscureText + ? const Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: EdgeInsets.only(right: 20.0), + child: Icon(Icons.remove_red_eye), + ), + ], + ) + : const Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: EdgeInsets.only(right: 20.0), + child: Icon( + Icons.remove_red_eye_outlined, + color: Color(0xFF959595), + ), + ), + ], + ), + ) + : null, + border: InputBorder.none, + contentPadding: EdgeInsets.symmetric(horizontal: 10), + ), + style: TextStyle(color: Colors.white), + keyboardType: widget.texttype, + validator: widget.validator ?? + (value) { + if (value == null || value.isEmpty) { + return "Empty value"; + } + return null; + }, + inputFormatters: widget.inputFormatters, + onChanged: (value) { + widget.onInput?.call(value); + }, + ), + ); + } +} diff --git a/lib/Utils/Common/commonBotton.dart b/lib/Utils/Common/commonBotton.dart new file mode 100644 index 0000000..1c6b2f5 --- /dev/null +++ b/lib/Utils/Common/commonBotton.dart @@ -0,0 +1,25 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +Widget CommonBtn({void Function()? onTap, required String text}) { + return InkWell( + onTap: onTap, + child: Container( + width: double.infinity, + height: 50.h, + decoration: BoxDecoration( + color: Color(0xff9A0000), borderRadius: BorderRadius.circular(5)), + child: Center( + child: Text( + text, + textAlign: TextAlign.center, + style: TextStyle( + color: Colors.white, + fontSize: 20.sp, + fontFamily: 'Cambria', + fontWeight: FontWeight.w400, + ), + ), + ), + )); +} diff --git a/lib/Utils/Common/noInternet.dart b/lib/Utils/Common/noInternet.dart new file mode 100644 index 0000000..b931c95 --- /dev/null +++ b/lib/Utils/Common/noInternet.dart @@ -0,0 +1,40 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:traderscircuit/Utils/Common/sized_box.dart'; + +class NoInternet extends StatefulWidget { + const NoInternet({super.key}); + + @override + State createState() => _NoInternetState(); +} + +class _NoInternetState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + body: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Container( + width: double.infinity, + height: 900.h, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + 'No Internet !', + style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20), + ), + sizedBoxHeight(15.h), + Text( + 'Please Check Your Internet\nConnection', + style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20), + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/Utils/Common/sized_box.dart b/lib/Utils/Common/sized_box.dart new file mode 100644 index 0000000..4f5bb77 --- /dev/null +++ b/lib/Utils/Common/sized_box.dart @@ -0,0 +1,13 @@ +import 'package:flutter/widgets.dart'; + +Widget sizedBoxHeight(double? height) { + return SizedBox( + height: height, + ); +} + +Widget sizedBoxWidth(double? width) { + return SizedBox( + width: width, + ); +} \ No newline at end of file diff --git a/lib/Utils/Common/text.dart b/lib/Utils/Common/text.dart new file mode 100644 index 0000000..db4b0da --- /dev/null +++ b/lib/Utils/Common/text.dart @@ -0,0 +1,13 @@ +import 'package:flutter/widgets.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +Widget textgray14W400cambria(String text) { + return Text( + text, + style: TextStyle( + fontSize: 14.sp, + color: const Color(0xffA1A1A1), + fontWeight: FontWeight.w400, + fontFamily: 'Cambria'), + ); +} diff --git a/lib/main.dart b/lib/main.dart index 008fa38..2ee17b2 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,115 +1,109 @@ -import 'package:flutter/material.dart'; +import 'dart:async'; -void main() { - runApp(const MyApp()); +import 'package:connectivity_plus/connectivity_plus.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:traderscircuit/resources/routes/route_name.dart'; +import 'package:traderscircuit/resources/routes/routes.dart'; + +Future main() async { + WidgetsFlutterBinding.ensureInitialized(); + SharedPreferences prefs = await SharedPreferences.getInstance(); + // GlobalVariables globalVariables = GlobalVariables(); + //token = prefs.getString('token'); +// OnBoard = prefs.getBool("OnBoard"); + SystemChrome.setPreferredOrientations([ + DeviceOrientation.portraitUp, + ]).then((value) => runApp(const MyApp())); } -class MyApp extends StatelessWidget { +class MyApp extends StatefulWidget { const MyApp({super.key}); + @override + State createState() => _MyAppState(); +} + +class _MyAppState extends State with WidgetsBindingObserver { + var _connectionStatus = ConnectivityResult.values.toString(); + late StreamSubscription subscription; + Connectivity connectivity = Connectivity(); + + // @override + // void initState() { + // super.initState(); + // WidgetsBinding.instance.addObserver(this); + + // connectivity = Connectivity(); + // checkInternet(); + // subscription = + // connectivity.onConnectivityChanged.listen((ConnectivityResult result) { + // _connectionStatus = result.toString(); + // if (result == ConnectivityResult.wifi || + // result == ConnectivityResult.mobile) { + // setState(() { + // _connectionStatus = result.toString(); + + // Get.back(result: true); + // }); + // } else { + // setState(() { + // _connectionStatus = result.toString(); + // Get.toNamed(RouteName.nointernet); + // }); + // } + // }); + // // print(_connectionStatus); + // } + + // Future checkInternet() async { + // final connectivityResult = await (Connectivity().checkConnectivity()); + + // if (connectivityResult == ConnectivityResult.wifi || + // connectivityResult == ConnectivityResult.mobile) { + // setState(() { + // _connectionStatus = connectivityResult.toString(); + // }); + // } else { + // setState(() { + // _connectionStatus = connectivityResult.toString(); + // print(_connectionStatus.toString()); + // Get.toNamed(RouteName.nointernet); + + // // Navigator.pushReplacementNamed(context, "/noInternet"); + // }); + // } + // } + + // @override + // void dispose() { + // super.dispose(); + // WidgetsBinding.instance.removeObserver(this); + + // subscription.cancel(); + // } + // This widget is the root of your application. @override Widget build(BuildContext context) { - return MaterialApp( - title: 'Flutter Demo', - theme: ThemeData( - // This is the theme of your application. - // - // Try running your application with "flutter run". You'll see the - // application has a blue toolbar. Then, without quitting the app, try - // changing the primarySwatch below to Colors.green and then invoke - // "hot reload" (press "r" in the console where you ran "flutter run", - // or simply save your changes to "hot reload" in a Flutter IDE). - // Notice that the counter didn't reset back to zero; the application - // is not restarted. - primarySwatch: Colors.blue, - ), - home: const MyHomePage(title: 'Flutter Demo Home Page'), - ); - } -} - -class MyHomePage extends StatefulWidget { - const MyHomePage({super.key, required this.title}); - - // This widget is the home page of your application. It is stateful, meaning - // that it has a State object (defined below) that contains fields that affect - // how it looks. - - // This class is the configuration for the state. It holds the values (in this - // case the title) provided by the parent (in this case the App widget) and - // used by the build method of the State. Fields in a Widget subclass are - // always marked "final". - - final String title; - - @override - State createState() => _MyHomePageState(); -} - -class _MyHomePageState extends State { - int _counter = 0; - - void _incrementCounter() { - setState(() { - // This call to setState tells the Flutter framework that something has - // changed in this State, which causes it to rerun the build method below - // so that the display can reflect the updated values. If we changed - // _counter without calling setState(), then the build method would not be - // called again, and so nothing would appear to happen. - _counter++; - }); - } - - @override - Widget build(BuildContext context) { - // This method is rerun every time setState is called, for instance as done - // by the _incrementCounter method above. - // - // The Flutter framework has been optimized to make rerunning build methods - // fast, so that you can just rebuild anything that needs updating rather - // than having to individually change instances of widgets. - return Scaffold( - appBar: AppBar( - // Here we take the value from the MyHomePage object that was created by - // the App.build method, and use it to set our appbar title. - title: Text(widget.title), - ), - body: Center( - // Center is a layout widget. It takes a single child and positions it - // in the middle of the parent. - child: Column( - // Column is also a layout widget. It takes a list of children and - // arranges them vertically. By default, it sizes itself to fit its - // children horizontally, and tries to be as tall as its parent. - // - // Invoke "debug painting" (press "p" in the console, choose the - // "Toggle Debug Paint" action from the Flutter Inspector in Android - // Studio, or the "Toggle Debug Paint" command in Visual Studio Code) - // to see the wireframe for each widget. - // - // Column has various properties to control how it sizes itself and - // how it positions its children. Here we use mainAxisAlignment to - // center the children vertically; the main axis here is the vertical - // axis because Columns are vertical (the cross axis would be - // horizontal). - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Text( - 'You have pushed the button this many times:', - ), - Text( - '$_counter', - style: Theme.of(context).textTheme.headlineMedium, - ), - ], + return ScreenUtilInit( + builder: (BuildContext context, Widget? child) => GetMaterialApp( + title: 'Trader\'s Circuit', + theme: ThemeData( + primarySwatch: Colors.blue, + fontFamily: 'manrope', + // textTheme: GoogleFonts.manropeTextTheme(), ), + debugShowCheckedModeBanner: false, + initialRoute: RouteName.splashScreen, + + //initialRoute: RouteName.mainScreen, + getPages: AppRoutes.appRoutes(), ), - floatingActionButton: FloatingActionButton( - onPressed: _incrementCounter, - tooltip: 'Increment', - child: const Icon(Icons.add), - ), // This trailing comma makes auto-formatting nicer for build methods. + designSize: const Size(390, 844), ); } } diff --git a/lib/resources/routes/route_name.dart b/lib/resources/routes/route_name.dart new file mode 100644 index 0000000..e1a33fa --- /dev/null +++ b/lib/resources/routes/route_name.dart @@ -0,0 +1,8 @@ +class RouteName { + static const String splashScreen = '/'; + static const String nointernet = '/nointernet'; + static const String sliderscreen1 = '/sliderscreen1'; + static const String sliderscreen2 = '/sliderscreen2'; + static const String sliderscreen3 = '/sliderscreen3'; + static const String loginscreen = '/loginscreen'; +} diff --git a/lib/resources/routes/routes.dart b/lib/resources/routes/routes.dart new file mode 100644 index 0000000..4f45edd --- /dev/null +++ b/lib/resources/routes/routes.dart @@ -0,0 +1,37 @@ +import 'package:get/get.dart'; +import 'package:traderscircuit/Utils/Common/noInternet.dart'; +import 'package:traderscircuit/resources/routes/route_name.dart'; +import 'package:traderscircuit/view/login/LoginScreen.dart'; +import 'package:traderscircuit/view/onBoarding/splashScreen.dart'; +import 'package:traderscircuit/view/onBoarding/splashScreen1.dart'; +import 'package:traderscircuit/view/onBoarding/splashScreen2.dart'; +import 'package:traderscircuit/view/onBoarding/splashScreen3.dart'; + +class AppRoutes { + static appRoutes() => [ + GetPage( + name: RouteName.splashScreen, + page: () => const SplashScreen(), + ), + GetPage( + name: RouteName.nointernet, + page: () => const NoInternet(), + ), + GetPage( + name: RouteName.sliderscreen1, + page: () => const Sliderscreen1(), + ), + GetPage( + name: RouteName.sliderscreen2, + page: () => const Sliderscreen2(), + ), + GetPage( + name: RouteName.sliderscreen3, + page: () => const Sliderscreen3(), + ), + GetPage( + name: RouteName.loginscreen, + page: () => const LoginScreen(), + ), + ]; +} diff --git a/lib/view/login/LoginScreen.dart b/lib/view/login/LoginScreen.dart new file mode 100644 index 0000000..9fc94ba --- /dev/null +++ b/lib/view/login/LoginScreen.dart @@ -0,0 +1,142 @@ +import 'dart:ui'; + +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:glassmorphism/glassmorphism.dart'; +import 'package:traderscircuit/Utils/Common/CustomTextFormField.dart'; +import 'package:traderscircuit/Utils/Common/commonBotton.dart'; +import 'package:traderscircuit/view/onBoarding/splashScreen1.dart'; + +class LoginScreen extends StatefulWidget { + const LoginScreen({super.key}); + + @override + State createState() => _LoginScreenState(); +} + +class _LoginScreenState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.black, + extendBody: true, + body: Stack( + children: [ + CommonBlurLeft(), + CommonBlurRight(), + Stack( + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16), + child: ListView( + physics: BouncingScrollPhysics(), + // mainAxisAlignment: MainAxisAlignment.start, + // crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 70.h, + ), + const Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "Traders Circuit", + style: TextStyle( + color: Colors.white, + fontSize: 25, + fontWeight: FontWeight.w600), + ), + ], + ), + SizedBox( + height: 42.h, + ), + const Text( + "Lets get started ", + style: TextStyle( + color: Colors.white, + fontSize: 24, + fontWeight: FontWeight.w700), + ), + SizedBox( + height: 10.h, + ), + const Text( + "Enter your mobile number to get otp", + style: TextStyle( + color: Colors.white, + fontSize: 18, + fontWeight: FontWeight.w800), + ), + SizedBox( + height: 35.h, + ), + Row( + children: [ + GlassmorphicContainer( + width: 60, + height: 50, + borderRadius: 8, + blur: 10, + alignment: Alignment.center, + border: 2, + linearGradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + Colors.white.withOpacity(0.1), + Color(0xFFFFFFFF).withOpacity(0.05), + ], + stops: [ + 0.1, + 1, + ]), + borderGradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + Color(0xff9A0000).withOpacity(0.5), + Color(0xFFffffff).withOpacity(0.5), + ], + ), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon(Icons.flag), + Text( + "+91", + style: TextStyle( + fontSize: 15, + color: Colors.white, + ), + ) + ], + ), + ), + SizedBox( + width: 10, + ), + Container( + width: 250, + child: CustomTextFormField(), + ) + ], + ), + SizedBox( + height: 10, + ), + Text( + "We’ll send six digit code to the registered number. Standard data rates may apply", + style: TextStyle(color: Colors.white), + ) + ], + ), + ), + ], + ), + ], + ), + ); + } +} diff --git a/lib/view/onBoarding/splashScreen.dart b/lib/view/onBoarding/splashScreen.dart new file mode 100644 index 0000000..9c7dae7 --- /dev/null +++ b/lib/view/onBoarding/splashScreen.dart @@ -0,0 +1,152 @@ +// ignore_for_file: prefer_final_fields, file_names + +import 'dart:async'; +import 'dart:developer'; +import 'package:connectivity_plus/connectivity_plus.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:traderscircuit/resources/routes/route_name.dart'; + +class SplashScreen extends StatefulWidget { + const SplashScreen({super.key}); + + @override + State createState() => _SplashScreenState(); +} + +class _SplashScreenState extends State + with TickerProviderStateMixin { + late AnimationController _scaleController; + late Animation _scaleAnimation; + late AnimationController _slideController; + var _connectionStatus; + + Future checkInternet() async { + final connectivityResult = await (Connectivity().checkConnectivity()); + + if (connectivityResult == ConnectivityResult.wifi || + connectivityResult == ConnectivityResult.mobile) { + setState(() { + _connectionStatus = connectivityResult; + }); + } else { + setState(() { + _connectionStatus = connectivityResult; + + // Navigator.pushReplacementNamed(context, "/noInternet"); + }); + } + } + + @override + void initState() { + super.initState(); + checkInternet(); + log(_connectionStatus.toString()); + Future.delayed(Duration(seconds: 2), () async { + Get.toNamed(RouteName.sliderscreen1); + // if (_connectionStatus == ConnectivityResult.none) { + // var result = await Get.to(NoInternet()); + // if (result != null && result) { + // Timer(const Duration(seconds: 1), () async { + // SharedPreferences prefs = await SharedPreferences.getInstance(); + // token = prefs.getString('token'); + // myusername = prefs.getString('name'); + // phonenumber = prefs.getString('contact_number'); + // OnBoard = prefs.getBool('OnBoard') ?? false; + // if (OnBoard == false) { + // Get.toNamed(RouteName.sliderscreen1); + // } else { + // if (token == null || token!.isEmpty) { + // Get.offAndToNamed(RouteName.loginScreen); + // } else { + // GetProfile().GetProfileAPI().then((value) { + // Get.toNamed(RouteName.mainScreen, arguments: 0); + // }); + // } + // } + // }); + // } + // } else { + // Timer(const Duration(seconds: 2), () async { + // SharedPreferences prefs = await SharedPreferences.getInstance(); + + // token = prefs.getString('token'); + // myusername = prefs.getString('name'); + // phonenumber = prefs.getString('contact_number'); + // OnBoard = prefs.getBool('OnBoard') ?? false; + // if (OnBoard == false) { + // Get.toNamed(RouteName.sliderscreen1); + // } else { + // if (token == null || token!.isEmpty) { + // Get.offAndToNamed(RouteName.loginScreen); + // } else { + // GetProfile().GetProfileAPI().then((value) { + // Get.toNamed(RouteName.mainScreen, arguments: 0); + // }); + // } + // } + // }); + // } + }); + // for scaleTansition + _scaleController = AnimationController( + vsync: this, + duration: const Duration(seconds: 2), + ); + _scaleAnimation = + Tween(begin: 0.0, end: 1.0).animate(_scaleController); + _scaleController.forward(); + // for slideTansition + _slideController = AnimationController( + vsync: this, + duration: const Duration(seconds: 1), + ); + Timer(const Duration(seconds: 3), () { + _slideController.forward(); + }); + } + + @override + void dispose() { + _scaleController.dispose(); + _slideController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.black, + body: SafeArea( + child: Center( + child: Padding( + padding: EdgeInsets.all(16.w), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + ScaleTransition( + scale: _scaleAnimation, + child: Text( + "Trader\'s Circuit", + style: TextStyle( + fontSize: 50, + fontWeight: FontWeight.w600, + color: Colors.white), + ), + // Image.asset( + // 'assets/images/logo.png', + // width: 200, + // height: 200, + // ), + ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/lib/view/onBoarding/splashScreen1.dart b/lib/view/onBoarding/splashScreen1.dart new file mode 100644 index 0000000..082fd43 --- /dev/null +++ b/lib/view/onBoarding/splashScreen1.dart @@ -0,0 +1,218 @@ +// ignore_for_file: file_names, prefer_const_constructors, prefer_const_literals_to_create_immutables + +import 'dart:ui'; + +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:traderscircuit/Utils/Common/commonBotton.dart'; +import 'package:traderscircuit/resources/routes/route_name.dart'; + +class Sliderscreen1 extends StatefulWidget { + const Sliderscreen1({super.key}); + + @override + State createState() => _Sliderscreen1State(); +} + +class _Sliderscreen1State extends State + with SingleTickerProviderStateMixin { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.black, + extendBody: true, + body: Stack( + children: [ + CommonBlurLeft(), + CommonBlurRight(), + Stack( + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + SizedBox( + height: 20, + ), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + GestureDetector( + onTap: () { + Get.toNamed('/sliderscreen3'); + }, + child: Text( + 'Skip', + style: TextStyle( + color: Colors.white, + fontSize: 18, + fontWeight: FontWeight.w500, + ), + ), + ), + ], + ), + SizedBox( + height: 20, + ), + Image.asset( + 'assets/images/png/slider1.png', + // width: 300.w, + ), + ], + ), + ), + Positioned( + bottom: 0, + child: Container( + width: 390.w, + height: 300.h, + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.only( + topLeft: Radius.circular(30), + topRight: Radius.circular(30), + ), + boxShadow: [ + BoxShadow( + color: Color(0xffAFAFAF), + offset: const Offset( + 5.0, + 5.0, + ), + blurRadius: 10.0, + spreadRadius: 2.5, + ), + ], + ), + child: Padding( + padding: const EdgeInsets.all(20), + child: Column( + children: [ + Text( + 'Unlock a world of diversified investment opportunities with our app', + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w400, + color: Colors.white), + ), + SizedBox( + height: 30.h, + ), + Row( + children: [ + Container( + width: 30.w, + height: 4.h, + decoration: BoxDecoration( + color: Color(0xFFFFFFFF), + borderRadius: BorderRadius.circular(10), + ), + ), + SizedBox( + width: 10, + ), + Container( + width: 30.w, + height: 4.h, + decoration: BoxDecoration( + color: Color(0xFF4F4F4F), + borderRadius: BorderRadius.circular(10), + ), + ), + SizedBox( + width: 10, + ), + Container( + width: 30.w, + height: 4.h, + decoration: BoxDecoration( + color: Color(0xFF4F4F4F), + borderRadius: BorderRadius.circular(10), + ), + ), + ], + ), + SizedBox( + height: 30.h, + ), + CommonBtn( + text: 'Next', + onTap: () { + Get.toNamed(RouteName.sliderscreen2); + }, + ) + ], + ), + ), + ), + ), + ], + ), + ], + ), + ); + } +} + +class CommonBlurLeft extends StatelessWidget { + const CommonBlurLeft({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return Positioned( + top: 150, + left: -50, + child: Container( + height: 200, + width: 200, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Color(0xFF9A0000).withOpacity(0.5), + ), + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 60, sigmaY: 60), + child: Container( + height: 200, + width: 200, + color: Colors.transparent, + ), + ), + ), + ); + } +} + +class CommonBlurRight extends StatelessWidget { + const CommonBlurRight({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return Positioned( + top: 450, + right: -50, + child: Container( + height: 200, + width: 200, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Color(0xFF9A0000).withOpacity(0.5), + ), + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 60, sigmaY: 60), + child: Container( + height: 200, + width: 200, + color: Colors.transparent, + ), + ), + ), + ); + } +} diff --git a/lib/view/onBoarding/splashScreen2.dart b/lib/view/onBoarding/splashScreen2.dart new file mode 100644 index 0000000..dff2b13 --- /dev/null +++ b/lib/view/onBoarding/splashScreen2.dart @@ -0,0 +1,164 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:traderscircuit/Utils/Common/commonBotton.dart'; +import 'package:traderscircuit/resources/routes/route_name.dart'; +import 'package:traderscircuit/view/onBoarding/splashScreen1.dart'; + +class Sliderscreen2 extends StatefulWidget { + const Sliderscreen2({super.key}); + + @override + State createState() => _Sliderscreen2State(); +} + +class _Sliderscreen2State extends State + with SingleTickerProviderStateMixin { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.black, + extendBody: true, + body: Stack( + children: [ + CommonBlurLeft(), + CommonBlurRight(), + Stack( + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + SizedBox( + height: 20, + ), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + GestureDetector( + onTap: () { + Get.toNamed('/sliderscreen3'); + }, + child: Text( + 'Skip', + style: TextStyle( + color: Colors.white, + fontSize: 18, + fontWeight: FontWeight.w500, + ), + ), + ), + ], + ), + SizedBox( + height: 20, + ), + Image.asset( + 'assets/images/png/slider2.png', + // width: 300.w, + ), + ], + ), + ), + Positioned( + bottom: 0, + child: Container( + width: 390.w, + height: 300.h, + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.only( + topLeft: Radius.circular(30), + topRight: Radius.circular(30), + ), + boxShadow: [ + BoxShadow( + color: Color(0xffAFAFAF), + offset: const Offset( + 5.0, + 5.0, + ), + blurRadius: 10.0, + spreadRadius: 2.5, + ), + ], + ), + child: Padding( + padding: const EdgeInsets.all(20), + child: Column( + children: [ + RichText( + text: const TextSpan( + text: + 'Your one-stop solution for effortless and diversified fund investments ', + style: TextStyle( + fontFamily: 'manrope', + fontSize: 20, + fontWeight: FontWeight.w400, + color: Colors.white), + children: [ + TextSpan( + text: ' bold', + style: TextStyle(color: Colors.black)), + ], + ), + ), + SizedBox( + height: 30.h, + ), + Row( + children: [ + Container( + width: 30.w, + height: 4.h, + decoration: BoxDecoration( + color: Color(0xFF4F4F4F), + borderRadius: BorderRadius.circular(10), + ), + ), + SizedBox( + width: 10, + ), + Container( + width: 30.w, + height: 4.h, + decoration: BoxDecoration( + color: Color(0xFFFFFFFF), + borderRadius: BorderRadius.circular(10), + ), + ), + SizedBox( + width: 10, + ), + Container( + width: 30.w, + height: 4.h, + decoration: BoxDecoration( + color: Color(0xFF4F4F4F), + borderRadius: BorderRadius.circular(10), + ), + ), + ], + ), + SizedBox( + height: 30.h, + ), + CommonBtn( + text: 'Next', + onTap: () { + Get.toNamed(RouteName.sliderscreen3); + }, + ) + ], + ), + ), + ), + ), + ], + ), + ], + ), + ); + } +} diff --git a/lib/view/onBoarding/splashScreen3.dart b/lib/view/onBoarding/splashScreen3.dart new file mode 100644 index 0000000..339c26d --- /dev/null +++ b/lib/view/onBoarding/splashScreen3.dart @@ -0,0 +1,141 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:traderscircuit/Utils/Common/commonBotton.dart'; +import 'package:traderscircuit/resources/routes/route_name.dart'; +import 'package:traderscircuit/view/onBoarding/splashScreen1.dart'; + +class Sliderscreen3 extends StatefulWidget { + const Sliderscreen3({super.key}); + + @override + State createState() => _Sliderscreen3State(); +} + +class _Sliderscreen3State extends State + with SingleTickerProviderStateMixin { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.black, + extendBody: true, + body: Stack( + children: [ + CommonBlurLeft(), + CommonBlurRight(), + Stack( + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + SizedBox( + height: 20, + ), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [], + ), + SizedBox( + height: 20, + ), + Image.asset( + 'assets/images/png/slider3.png', + // width: 300.w, + ), + ], + ), + ), + Positioned( + bottom: 0, + child: Container( + width: 390.w, + height: 300.h, + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.only( + topLeft: Radius.circular(30), + topRight: Radius.circular(30), + ), + boxShadow: [ + BoxShadow( + color: Color(0xffAFAFAF), + offset: const Offset( + 5.0, + 5.0, + ), + blurRadius: 10.0, + spreadRadius: 2.5, + ), + ], + ), + child: Padding( + padding: const EdgeInsets.all(20), + child: Column( + children: [ + Text( + 'Unlock a world of diversified investment opportunities with our app', + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w400, + color: Colors.white), + ), + SizedBox( + height: 30.h, + ), + Row( + children: [ + Container( + width: 30.w, + height: 4.h, + decoration: BoxDecoration( + color: Color(0xFF4F4F4F), + borderRadius: BorderRadius.circular(10), + ), + ), + SizedBox( + width: 10, + ), + Container( + width: 30.w, + height: 4.h, + decoration: BoxDecoration( + color: Color(0xFF4F4F4F), + borderRadius: BorderRadius.circular(10), + ), + ), + SizedBox( + width: 10, + ), + Container( + width: 30.w, + height: 4.h, + decoration: BoxDecoration( + color: Color(0xFFFFFFFF), + borderRadius: BorderRadius.circular(10), + ), + ), + ], + ), + SizedBox( + height: 30.h, + ), + CommonBtn( + text: 'Next', + onTap: () { + Get.toNamed(RouteName.loginscreen); + }, + ) + ], + ), + ), + ), + ), + ], + ), + ], + ), + ); + } +} diff --git a/pubspec.lock b/pubspec.lock index 58af1ee..510fa38 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,14 +1,22 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + args: + dependency: transitive + description: + name: args + sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + url: "https://pub.dev" + source: hosted + version: "2.4.2" async: dependency: transitive description: name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.11.0" boolean_selector: dependency: transitive description: @@ -21,10 +29,10 @@ packages: dependency: transitive description: name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.3.0" clock: dependency: transitive description: @@ -37,10 +45,26 @@ packages: dependency: transitive description: name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.18.0" + connectivity_plus: + dependency: "direct main" + description: + name: connectivity_plus + sha256: "224a77051d52a11fbad53dd57827594d3bd24f945af28bd70bab376d68d437f0" + url: "https://pub.dev" + source: hosted + version: "5.0.2" + connectivity_plus_platform_interface: + dependency: transitive + description: + name: connectivity_plus_platform_interface + sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a + url: "https://pub.dev" + source: hosted + version: "1.2.4" cupertino_icons: dependency: "direct main" description: @@ -49,6 +73,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.6" + dbus: + dependency: transitive + description: + name: dbus + sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" + url: "https://pub.dev" + source: hosted + version: "0.7.10" fake_async: dependency: transitive description: @@ -57,6 +89,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + file: + dependency: transitive + description: + name: file + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" flutter: dependency: "direct main" description: flutter @@ -70,19 +118,72 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" + flutter_screenutil: + dependency: "direct main" + description: + name: flutter_screenutil + sha256: "8cf100b8e4973dc570b6415a2090b0bfaa8756ad333db46939efc3e774ee100d" + url: "https://pub.dev" + source: hosted + version: "5.9.0" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" + url: "https://pub.dev" + source: hosted + version: "2.0.10+1" 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" + get: + dependency: "direct main" + description: + name: get + sha256: e4e7335ede17452b391ed3b2ede016545706c01a02292a6c97619705e7d2a85e + url: "https://pub.dev" + source: hosted + version: "4.6.6" + glassmorphism: + dependency: "direct main" + description: + name: glassmorphism + sha256: c0f65ea2681d4ee6d4125b947946d983335cd44765e835cdc039894b076a6e31 + url: "https://pub.dev" + source: hosted + version: "3.0.0" + http: + dependency: transitive + description: + name: http + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + url: "https://pub.dev" + source: hosted + version: "1.2.0" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" js: dependency: transitive description: name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 url: "https://pub.dev" source: hosted - version: "0.6.5" + version: "0.6.7" lints: dependency: transitive description: @@ -95,34 +196,154 @@ packages: dependency: transitive description: name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.13" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.10.0" + nm: + dependency: transitive + description: + name: nm + sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" + url: "https://pub.dev" + source: hosted + version: "0.5.0" path: dependency: transitive description: name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.8.2" + version: "1.8.3" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" + source: hosted + version: "1.0.1" + 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: + name: petitparser + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + 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: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c" + url: "https://pub.dev" + source: hosted + version: "2.3.5" + 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: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + 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 @@ -132,26 +353,26 @@ packages: dependency: transitive description: name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" stack_trace: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" string_scanner: dependency: transitive description: @@ -172,10 +393,42 @@ packages: dependency: transitive description: name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.4.16" + version: "0.6.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" vector_math: dependency: transitive description: @@ -184,5 +437,38 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + web: + dependency: transitive + description: + name: web + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + url: "https://pub.dev" + source: hosted + version: "0.3.0" + win32: + dependency: transitive + description: + name: win32 + sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" + url: "https://pub.dev" + source: hosted + version: "5.2.0" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d + url: "https://pub.dev" + source: hosted + version: "1.0.4" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" sdks: - dart: ">=2.19.6 <3.0.0" + dart: ">=3.2.0 <4.0.0" + flutter: ">=3.16.0" diff --git a/pubspec.yaml b/pubspec.yaml index 51a3817..4dc407d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -35,6 +35,14 @@ 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 + get: ^4.6.5 + flutter_screenutil: ^5.9.0 + flutter_svg: ^2.0.5 + shared_preferences: ^2.0.15 + connectivity_plus: ^5.0.2 + glassmorphism: ^3.0.0 + + dev_dependencies: flutter_test: @@ -59,8 +67,12 @@ 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/ + - assets/images/svg/ + - assets/images/png/ + + # - images/a_dot_ham.jpeg # An image asset can refer to one or more resolution-specific "variants", see @@ -74,12 +86,11 @@ flutter: # "family" key with the font family name, and a "fonts" key with a # list giving the asset and other descriptors for the font. For # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic + fonts: + - family: manrope + fonts: + - asset: assets/fonts/manrope/Manrope-VariableFont_wght.ttf + # - family: Trajan Pro # fonts: # - asset: fonts/TrajanPro.ttf