feat: refactoring and tidy up code and add google_ml_kit

This commit is contained in:
pahmiudahgede 2025-05-22 22:58:15 +07:00
parent 63ba97382b
commit 972de38377
9 changed files with 346 additions and 40 deletions

View File

@ -18,21 +18,6 @@ migration:
- platform: android - platform: android
create_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf create_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf
base_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 # User provided section

View File

@ -1,4 +1,6 @@
import 'package:rijig_mobile/core/utils/exportimportview.dart'; 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( final router = GoRouter(
routes: [ routes: [
@ -8,6 +10,8 @@ final router = GoRouter(
builder: (context, state) => OnboardingPageScreen(), builder: (context, state) => OnboardingPageScreen(),
), ),
GoRoute(path: '/login', builder: (context, state) => LoginScreen()), 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 // Rute untuk verifikasi OTP dengan ekstraksi data dari path
GoRoute( GoRoute(

View File

@ -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<CloginScreen> createState() => _CloginScreenState();
}
class _CloginScreenState extends State<CloginScreen> {
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();
}
}

View File

@ -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<WelcomeCollectorScreen> createState() => _WelcomeSeekJobScreenState();
}
class _WelcomeSeekJobScreenState extends State<WelcomeCollectorScreen> {
@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),
],
),
),
),
);
}
}

View File

@ -17,6 +17,7 @@ class LoginScreen extends StatefulWidget {
class LoginScreenState extends State<LoginScreen> { class LoginScreenState extends State<LoginScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final mediaQuery = MediaQuery.of(context);
final TextEditingController phoneController = TextEditingController(); final TextEditingController phoneController = TextEditingController();
return Scaffold( return Scaffold(
body: Consumer<LoginViewModel>( body: Consumer<LoginViewModel>(
@ -38,9 +39,14 @@ class LoginScreenState extends State<LoginScreen> {
"Rijig", "Rijig",
style: Tulisan.heading(color: primaryColor), style: Tulisan.heading(color: primaryColor),
), ),
Gap(60), // Gap(60),
SizedBox(height: mediaQuery.size.height * 0.2),
Column( Column(
children: [ children: [
Image.asset(
'assets/image/security.png',
width: mediaQuery.size.width * 0.35,
),
FormFieldOne( FormFieldOne(
controllers: phoneController, controllers: phoneController,
hintText: 'Masukkan nomor whatsapp anda!', hintText: 'Masukkan nomor whatsapp anda!',
@ -87,6 +93,17 @@ class LoginScreenState extends State<LoginScreen> {
), ),
], ],
), ),
Gap(20),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("login sebagai:"),
TextButton(
onPressed: () => router.go('/welcomec'),
child: Text("pengepul?"),
),
],
),
], ],
), ),
], ],

View File

@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; 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'; import 'package:rijig_mobile/features/launch/model/onboard_model.dart';
class OnboardingView extends StatelessWidget { class OnboardingView extends StatelessWidget {
@ -14,35 +15,30 @@ class OnboardingView extends StatelessWidget {
children: [ children: [
SizedBox( SizedBox(
width: MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.width, height: MediaQuery.of(context).size.height * 0.4,
child: Padding( child: Padding(
padding: const EdgeInsets.only(top: 40.0), padding: PaddingCustom().paddingOnly(top: 40),
child: Image.network(data.imagePath, fit: BoxFit.contain), child: Image.asset(data.imagePath, fit: BoxFit.contain),
), ),
), ),
Padding( Padding(
padding: const EdgeInsets.all(15), padding: PaddingCustom().paddingAll(15),
child: Column( child: Column(
children: [ children: [
Text( Text(data.headline, style: Tulisan.heading()),
data.headline,
style: Theme.of(context).textTheme.titleLarge?.copyWith(
fontWeight: FontWeight.bold,
fontSize: 24,
),
),
Padding( Padding(
padding: const EdgeInsets.symmetric(vertical: 15.0), padding: PaddingCustom().paddingVertical(15),
child: Text( child: Text(
data.description, data.description,
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle(fontSize: 16), style: Tulisan.customText(fontsize: 14.sp),
), ),
), ),
], ],
), ),
), ),
Gap(100),
SizedBox(height: MediaQuery.of(context).size.height * 0.2),
], ],
); );
} }

View File

@ -3,22 +3,22 @@ import 'package:rijig_mobile/features/launch/model/onboard_model.dart';
class OnboardingData { class OnboardingData {
static List<OnboardingModel> items = [ static List<OnboardingModel> items = [
OnboardingModel( OnboardingModel(
imagePath: "https://i.imgur.com/X2G11k0.png", imagePath: "assets/image/onboard_first.png",
headline: 'Browse all the category', headline: 'Sampahmu, Cuanmu',
description: 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( OnboardingModel(
imagePath: "https://i.imgur.com/X2G11k0.png", imagePath: "assets/image/waiting_oboard_sec.png",
headline: 'Amazing Discounts & Offers', headline: 'Pilih Pengepul, Duduk Manis',
description: 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( OnboardingModel(
imagePath: "https://i.imgur.com/X2G11k0.png", imagePath: "assets/image/onboard_third.png",
headline: 'Delivery in 30 Min', headline: 'Ayo, Kita Jaga Bumi Bareng',
description: 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!',
), ),
]; ];
} }

View File

@ -336,6 +336,126 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.2.1" 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: http:
dependency: "direct main" dependency: "direct main"
description: description:

View File

@ -27,6 +27,7 @@ dependencies:
get_it: ^8.0.3 get_it: ^8.0.3
go_router: ^15.1.1 go_router: ^15.1.1
google_fonts: ^6.0.0 google_fonts: ^6.0.0
google_ml_kit: ^0.20.0
http: ^1.3.0 http: ^1.3.0
http_parser: ^4.1.2 http_parser: ^4.1.2
iconsax_flutter: ^1.0.0 iconsax_flutter: ^1.0.0