diff --git a/.metadata b/.metadata index d77a4e0..01965b7 100644 --- a/.metadata +++ b/.metadata @@ -18,21 +18,6 @@ migration: - platform: android create_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf base_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf - - platform: ios - create_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf - base_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf - - platform: linux - create_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf - base_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf - - platform: macos - create_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf - base_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf - - platform: web - create_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf - base_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf - - platform: windows - create_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf - base_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf # User provided section diff --git a/lib/core/router.dart b/lib/core/router.dart index bbf6fd4..b32c1f8 100644 --- a/lib/core/router.dart +++ b/lib/core/router.dart @@ -1,4 +1,6 @@ import 'package:rijig_mobile/core/utils/exportimportview.dart'; +import 'package:rijig_mobile/features/auth/presentation/screen/collector/clogin_screen.dart'; +import 'package:rijig_mobile/features/auth/presentation/screen/collector/welcome_collector_screen.dart'; final router = GoRouter( routes: [ @@ -8,6 +10,8 @@ final router = GoRouter( builder: (context, state) => OnboardingPageScreen(), ), GoRoute(path: '/login', builder: (context, state) => LoginScreen()), + GoRoute(path: '/clogin', builder: (context, state) => CloginScreen()), + GoRoute(path: '/welcomec', builder: (context, state) => WelcomeCollectorScreen()), // Rute untuk verifikasi OTP dengan ekstraksi data dari path GoRoute( diff --git a/lib/features/auth/presentation/screen/collector/clogin_screen.dart b/lib/features/auth/presentation/screen/collector/clogin_screen.dart new file mode 100644 index 0000000..70354fe --- /dev/null +++ b/lib/features/auth/presentation/screen/collector/clogin_screen.dart @@ -0,0 +1,110 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:gap/gap.dart'; +import 'package:rijig_mobile/core/router.dart'; +import 'package:rijig_mobile/core/utils/guide.dart'; +import 'package:rijig_mobile/widget/buttoncard.dart'; +import 'package:rijig_mobile/widget/formfiled.dart'; + +class CloginScreen extends StatefulWidget { + const CloginScreen({super.key}); + + @override + State createState() => _CloginScreenState(); +} + +class _CloginScreenState extends State { + final TextEditingController cPhoneController = TextEditingController(); + @override + Widget build(BuildContext context) { + final mediaQuery = MediaQuery.of(context); + return Scaffold( + body: SafeArea( + child: Center( + child: Padding( + padding: PaddingCustom().paddingHorizontalVertical(15, 40), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Column( + children: [ + Text( + "Selamat datang di aplikasi", + style: Tulisan.subheading(), + ), + Text("Rijig", style: Tulisan.heading(color: primaryColor)), + SizedBox(height: mediaQuery.size.height * 0.2), + Column( + children: [ + Image.asset( + 'assets/image/security.png', + width: mediaQuery.size.width * 0.35, + ), + FormFieldOne( + controllers: cPhoneController, + hintText: 'Masukkan nomor whatsapp anda!', + placeholder: "cth.62..", + isRequired: true, + textInputAction: TextInputAction.done, + keyboardType: TextInputType.phone, + onTap: () {}, + onChanged: (value) {}, + fontSize: 14, + fontSizeField: 16, + onFieldSubmitted: (value) {}, + readOnly: false, + enabled: true, + ), + SizedBox(height: 20), + CardButtonOne( + textButton: "Kirim OTP", + // viewModel.isLoading + // ? 'Sending OTP...' + // : 'Send OTP', + fontSized: 16.sp, + colorText: whiteColor, + color: primaryColor, + borderRadius: 10, + horizontal: double.infinity, + vertical: 50, + onTap: () { + // if (cPhoneController.text.isNotEmpty) { + // debugPrint("send otp dipencet"); + // await viewModel.loginOrRegister( + // cPhoneController.text, + // ); + // if (viewModel.loginResponse != null) { + // router.go( + // "/verif-otp", + // extra: cPhoneController.text, + // ); + // } + // } + }, + // loadingTrue: viewModel.isLoading, + usingRow: false, + ), + ], + ), + Gap(20), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text("kembali ke login sebagai:"), + TextButton( + onPressed: () => router.go('/login'), + child: Text("masyarakat?"), + ), + ], + ), + ], + ), + ], + ), + ), + ), + ), + ); + // return const Placeholder(); + } +} diff --git a/lib/features/auth/presentation/screen/collector/welcome_collector_screen.dart b/lib/features/auth/presentation/screen/collector/welcome_collector_screen.dart new file mode 100644 index 0000000..966021f --- /dev/null +++ b/lib/features/auth/presentation/screen/collector/welcome_collector_screen.dart @@ -0,0 +1,73 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:gap/gap.dart'; +import 'package:rijig_mobile/core/router.dart'; +import 'package:rijig_mobile/core/utils/guide.dart'; +import 'package:rijig_mobile/widget/buttoncard.dart'; + +class WelcomeCollectorScreen extends StatefulWidget { + const WelcomeCollectorScreen({super.key}); + + @override + State createState() => _WelcomeSeekJobScreenState(); +} + +class _WelcomeSeekJobScreenState extends State { + @override + Widget build(BuildContext context) { + final mediaQuery = MediaQuery.of(context); + + return Scaffold( + backgroundColor: whiteColor, + body: SafeArea( + child: Padding( + padding: PaddingCustom().paddingHorizontal(24), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Expanded( + flex: 5, + child: Center( + child: Image.asset( + 'assets/image/welcome_collector.png', + width: mediaQuery.size.width * 0.8, + ), + ), + ), + Gap(20), + Text( + 'Selamat datang pengepul!', + style: Tulisan.heading(), + textAlign: TextAlign.center, + ), + Gap(15), + Text( + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', + style: Tulisan.customText( + color: greyAbsolutColor, + fontsize: 14.sp, + ), + textAlign: TextAlign.center, + ), + const Spacer(), + CardButtonOne( + textButton: "Lanjut", + fontSized: 16.sp, + colorText: whiteColor, + color: primaryColor, + borderRadius: 10, + horizontal: double.infinity, + vertical: 50, + onTap: () { + router.go("/clogin"); + }, + usingRow: false, + ), + Gap(30), + ], + ), + ), + ), + ); + } +} diff --git a/lib/features/auth/presentation/screen/login_screen.dart b/lib/features/auth/presentation/screen/login_screen.dart index b735d88..b7486d3 100644 --- a/lib/features/auth/presentation/screen/login_screen.dart +++ b/lib/features/auth/presentation/screen/login_screen.dart @@ -17,6 +17,7 @@ class LoginScreen extends StatefulWidget { class LoginScreenState extends State { @override Widget build(BuildContext context) { + final mediaQuery = MediaQuery.of(context); final TextEditingController phoneController = TextEditingController(); return Scaffold( body: Consumer( @@ -38,9 +39,14 @@ class LoginScreenState extends State { "Rijig", style: Tulisan.heading(color: primaryColor), ), - Gap(60), + // Gap(60), + SizedBox(height: mediaQuery.size.height * 0.2), Column( children: [ + Image.asset( + 'assets/image/security.png', + width: mediaQuery.size.width * 0.35, + ), FormFieldOne( controllers: phoneController, hintText: 'Masukkan nomor whatsapp anda!', @@ -87,6 +93,17 @@ class LoginScreenState extends State { ), ], ), + Gap(20), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text("login sebagai:"), + TextButton( + onPressed: () => router.go('/welcomec'), + child: Text("pengepul?"), + ), + ], + ), ], ), ], diff --git a/lib/features/launch/components/onboarding_comp.dart b/lib/features/launch/components/onboarding_comp.dart index c7e56bf..8808bdf 100644 --- a/lib/features/launch/components/onboarding_comp.dart +++ b/lib/features/launch/components/onboarding_comp.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:gap/gap.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:rijig_mobile/core/utils/guide.dart'; import 'package:rijig_mobile/features/launch/model/onboard_model.dart'; class OnboardingView extends StatelessWidget { @@ -14,35 +15,30 @@ class OnboardingView extends StatelessWidget { children: [ SizedBox( width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height * 0.4, child: Padding( - padding: const EdgeInsets.only(top: 40.0), - child: Image.network(data.imagePath, fit: BoxFit.contain), + padding: PaddingCustom().paddingOnly(top: 40), + child: Image.asset(data.imagePath, fit: BoxFit.contain), ), ), Padding( - padding: const EdgeInsets.all(15), + padding: PaddingCustom().paddingAll(15), child: Column( children: [ - Text( - data.headline, - style: Theme.of(context).textTheme.titleLarge?.copyWith( - fontWeight: FontWeight.bold, - fontSize: 24, - ), - ), + Text(data.headline, style: Tulisan.heading()), Padding( - padding: const EdgeInsets.symmetric(vertical: 15.0), + padding: PaddingCustom().paddingVertical(15), child: Text( data.description, textAlign: TextAlign.center, - style: TextStyle(fontSize: 16), + style: Tulisan.customText(fontsize: 14.sp), ), ), ], ), ), - Gap(100), + + SizedBox(height: MediaQuery.of(context).size.height * 0.2), ], ); } diff --git a/lib/features/launch/model/onboard_data.dart b/lib/features/launch/model/onboard_data.dart index 9cc71f7..fdc0490 100644 --- a/lib/features/launch/model/onboard_data.dart +++ b/lib/features/launch/model/onboard_data.dart @@ -3,22 +3,22 @@ import 'package:rijig_mobile/features/launch/model/onboard_model.dart'; class OnboardingData { static List items = [ OnboardingModel( - imagePath: "https://i.imgur.com/X2G11k0.png", - headline: 'Browse all the category', + imagePath: "assets/image/onboard_first.png", + headline: 'Sampahmu, Cuanmu', description: - 'In aliquip aute exercitation ut et nisi ut mollit. Deserunt dolor elit pariatur aute .', + 'Jual sampah dari rumah tanpa ribet. Bisa dapet duit, bisa bantu lingkungan juga!', ), OnboardingModel( - imagePath: "https://i.imgur.com/X2G11k0.png", - headline: 'Amazing Discounts & Offers', + imagePath: "assets/image/waiting_oboard_sec.png", + headline: 'Pilih Pengepul, Duduk Manis', description: - 'In aliquip aute exercitation ut et nisi ut mollit. Deserunt dolor elit pariatur aute .', + 'Tinggal pilih pengepul terdekat, mereka yang datang ke kamu. Praktis banget, kan?', ), OnboardingModel( - imagePath: "https://i.imgur.com/X2G11k0.png", - headline: 'Delivery in 30 Min', + imagePath: "assets/image/onboard_third.png", + headline: 'Ayo, Kita Jaga Bumi Bareng', description: - 'In aliquip aute exercitation ut et nisi ut mollit. Deserunt dolor elit pariatur aute .', + 'Satu langkah kecil bisa bikin perubahan besar. Yuk mulai sekarang — lanjut masuk dulu, ya!', ), ]; } diff --git a/pubspec.lock b/pubspec.lock index ab92d34..4c56872 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -336,6 +336,126 @@ packages: url: "https://pub.dev" source: hosted version: "6.2.1" + google_ml_kit: + dependency: "direct main" + description: + name: google_ml_kit + sha256: a2da12a62353a6cad71534b52ada3af14a5b842e6c9b1014ce4d243652b30f4b + url: "https://pub.dev" + source: hosted + version: "0.20.0" + google_mlkit_barcode_scanning: + dependency: transitive + description: + name: google_mlkit_barcode_scanning + sha256: b38505df2d3fdf7830979d60fee55039c2f442d189b2e06fcb2fe494ba65d0db + url: "https://pub.dev" + source: hosted + version: "0.14.1" + google_mlkit_commons: + dependency: transitive + description: + name: google_mlkit_commons + sha256: "8f40fbac10685cad4715d11e6a0d86837d9ad7168684dfcad29610282a88e67a" + url: "https://pub.dev" + source: hosted + version: "0.11.0" + google_mlkit_digital_ink_recognition: + dependency: transitive + description: + name: google_mlkit_digital_ink_recognition + sha256: "8d2b89401bdeeba97158377167429dbc5cb339ebbd21e0889dca773f1c79a884" + url: "https://pub.dev" + source: hosted + version: "0.14.1" + google_mlkit_entity_extraction: + dependency: transitive + description: + name: google_mlkit_entity_extraction + sha256: "145bc26422b7e62d50cc4eca1ac394d13ac6a97e4c09b8baf7ff058b64d2f9cc" + url: "https://pub.dev" + source: hosted + version: "0.15.1" + google_mlkit_face_detection: + dependency: transitive + description: + name: google_mlkit_face_detection + sha256: f336737d5b8a86797fd4368f42a5c26aeaa9c6dcc5243f0a16b5f6f663cfb70a + url: "https://pub.dev" + source: hosted + version: "0.13.1" + google_mlkit_face_mesh_detection: + dependency: transitive + description: + name: google_mlkit_face_mesh_detection + sha256: "3683daed2463d9631c7f01b31bfc40d22a1fd4c0392d82a24ce275af06bc811f" + url: "https://pub.dev" + source: hosted + version: "0.4.1" + google_mlkit_image_labeling: + dependency: transitive + description: + name: google_mlkit_image_labeling + sha256: "2cac5f7a02dcc23cd3357f89bf1a79df793ae3afce5035a896de467ffa0192e8" + url: "https://pub.dev" + source: hosted + version: "0.14.1" + google_mlkit_language_id: + dependency: transitive + description: + name: google_mlkit_language_id + sha256: fc57bca69cb1dcd8ef67b929f0315e9a8baa80c03c75f7a1226becd7ad2529ff + url: "https://pub.dev" + source: hosted + version: "0.13.0" + google_mlkit_object_detection: + dependency: transitive + description: + name: google_mlkit_object_detection + sha256: "0f740f046d74faf81d9c44cdbe4accf33888ed9f877e30efbfad4578d45ebfcd" + url: "https://pub.dev" + source: hosted + version: "0.15.0" + google_mlkit_pose_detection: + dependency: transitive + description: + name: google_mlkit_pose_detection + sha256: "5ff5fe2a325427c49c02a884a2a888d2d10cbfe414f7ebf2af9777a5155171eb" + url: "https://pub.dev" + source: hosted + version: "0.14.0" + google_mlkit_selfie_segmentation: + dependency: transitive + description: + name: google_mlkit_selfie_segmentation + sha256: e05fc255265595a0fb11cd6a6a5393f106d6ec4d3a40cbc57ff22894eef235f1 + url: "https://pub.dev" + source: hosted + version: "0.10.0" + google_mlkit_smart_reply: + dependency: transitive + description: + name: google_mlkit_smart_reply + sha256: "0c3d737e46f20aa4d4953860ee5757e5250e58f90351f8e2afdeb1d609c7047e" + url: "https://pub.dev" + source: hosted + version: "0.13.0" + google_mlkit_text_recognition: + dependency: transitive + description: + name: google_mlkit_text_recognition + sha256: "96173ad4dd7fd06c660e22ac3f9e9f1798a517fe7e48bee68eeec83853224224" + url: "https://pub.dev" + source: hosted + version: "0.15.0" + google_mlkit_translation: + dependency: transitive + description: + name: google_mlkit_translation + sha256: "7287444a0abd994087a0b354dee952fcd198e57619ded4bba65496d418c9d84b" + url: "https://pub.dev" + source: hosted + version: "0.13.0" http: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 5b9623d..0393203 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -27,6 +27,7 @@ dependencies: get_it: ^8.0.3 go_router: ^15.1.1 google_fonts: ^6.0.0 + google_ml_kit: ^0.20.0 http: ^1.3.0 http_parser: ^4.1.2 iconsax_flutter: ^1.0.0