added splashscreen, login and add hp number pages
This commit is contained in:
@ -0,0 +1,31 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:stacked/stacked.dart';
|
||||
|
||||
import './input_informasi_diri_view_model.dart';
|
||||
|
||||
class InputInformasiDiriView extends StatelessWidget {
|
||||
const InputInformasiDiriView({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ViewModelBuilder<InputInformasiDiriViewModel>.reactive(
|
||||
viewModelBuilder: () => InputInformasiDiriViewModel(),
|
||||
onViewModelReady: (InputInformasiDiriViewModel model) async {
|
||||
await model.init();
|
||||
},
|
||||
builder: (
|
||||
BuildContext context,
|
||||
InputInformasiDiriViewModel model,
|
||||
Widget? child,
|
||||
) {
|
||||
return const Scaffold(
|
||||
body: Center(
|
||||
child: Text(
|
||||
'InputInformasiDiriView',
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,5 @@
|
||||
import 'package:reza_app/app/core/custom_base_view_model.dart';
|
||||
|
||||
class InputInformasiDiriViewModel extends CustomBaseViewModel {
|
||||
Future<void> init() async {}
|
||||
}
|
||||
@ -0,0 +1,96 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:stacked/stacked.dart';
|
||||
import 'package:validatorless/validatorless.dart';
|
||||
|
||||
import '../../../../app/themes/app_colors.dart';
|
||||
import '../../../widgets/my_button.dart';
|
||||
import '../../../widgets/my_textformfield.dart';
|
||||
import './masukan_no_hp_view_model.dart';
|
||||
|
||||
class MasukanNoHpView extends StatelessWidget {
|
||||
const MasukanNoHpView({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ViewModelBuilder<MasukanNoHpViewModel>.reactive(
|
||||
viewModelBuilder: () => MasukanNoHpViewModel(),
|
||||
onViewModelReady: (MasukanNoHpViewModel model) async {
|
||||
await model.init();
|
||||
},
|
||||
builder: (
|
||||
BuildContext context,
|
||||
MasukanNoHpViewModel model,
|
||||
Widget? child,
|
||||
) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('PENDAFTARAN USER BARU',
|
||||
style: TextStyle(
|
||||
color: lightColor,
|
||||
)),
|
||||
backgroundColor: mainColor,
|
||||
iconTheme: const IconThemeData(
|
||||
color:
|
||||
Colors.white), // Set the color of the back button to white
|
||||
),
|
||||
body: WillPopScope(
|
||||
onWillPop: () async {
|
||||
return model.backPressed;
|
||||
},
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 25),
|
||||
child: Center(
|
||||
child: Form(
|
||||
key: model.formKey,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Image.asset(
|
||||
'assets/logo.png',
|
||||
width: 100,
|
||||
height: 100,
|
||||
),
|
||||
const SizedBox(height: 15),
|
||||
const Text(
|
||||
'Masukkan Nomor HP',
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
MyTextFormField(
|
||||
maxLength: 13,
|
||||
hintText: 'No. HP',
|
||||
keyboardType: TextInputType.phone,
|
||||
controller: model.noHpController,
|
||||
validator:
|
||||
Validatorless.required('No. HP tidak boleh kosong'),
|
||||
),
|
||||
SizedBox(
|
||||
width: MediaQuery.of(context).size.width * 0.5,
|
||||
child: MyButton(
|
||||
text: 'Selanjutnya',
|
||||
onPressed: () {
|
||||
// if noHpController length is less than 9, return
|
||||
if (model.noHpController.text.length < 9) {
|
||||
model.snackbarService.showSnackbar(
|
||||
message: 'No. HP tidak boleh kurang dari 9');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!model.formKey.currentState!.validate()) {
|
||||
return;
|
||||
}
|
||||
model.log.i('Selanjutnya button pressed');
|
||||
model.selanjutnya();
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../../app/app.locator.dart';
|
||||
import '../../../../app/app.router.dart';
|
||||
|
||||
import '../../../../app/app.logger.dart';
|
||||
import '../../../../app/core/custom_base_view_model.dart';
|
||||
import '../../../../services/my_easyloading.dart';
|
||||
|
||||
class MasukanNoHpViewModel extends CustomBaseViewModel {
|
||||
final log = getLogger('MasukanNoHpViewModel');
|
||||
final _easyloading = locator<MyEasyLoading>();
|
||||
|
||||
TextEditingController noHpController = TextEditingController();
|
||||
GlobalKey<FormState> formKey = GlobalKey<FormState>();
|
||||
Future<void> init() async {}
|
||||
|
||||
selanjutnya() async {
|
||||
_easyloading.customLoading("Menghantar Kode OTP \nke WhatsApp Anda");
|
||||
backPressed = false;
|
||||
await Future.delayed(const Duration(seconds: 3));
|
||||
backPressed = true;
|
||||
notifyListeners();
|
||||
_easyloading.dismissLoading();
|
||||
await navigationService.navigateToVerifikasiNoHpView();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,31 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:stacked/stacked.dart';
|
||||
|
||||
import './verifikasi_no_hp_view_model.dart';
|
||||
|
||||
class VerifikasiNoHpView extends StatelessWidget {
|
||||
const VerifikasiNoHpView({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ViewModelBuilder<VerifikasiNoHpViewModel>.reactive(
|
||||
viewModelBuilder: () => VerifikasiNoHpViewModel(),
|
||||
onViewModelReady: (VerifikasiNoHpViewModel model) async {
|
||||
await model.init();
|
||||
},
|
||||
builder: (
|
||||
BuildContext context,
|
||||
VerifikasiNoHpViewModel model,
|
||||
Widget? child,
|
||||
) {
|
||||
return const Scaffold(
|
||||
body: Center(
|
||||
child: Text(
|
||||
'VerifikasiNoHpView',
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,5 @@
|
||||
import 'package:reza_app/app/core/custom_base_view_model.dart';
|
||||
|
||||
class VerifikasiNoHpViewModel extends CustomBaseViewModel {
|
||||
Future<void> init() async {}
|
||||
}
|
||||
Reference in New Issue
Block a user