Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import 'package:flutter/cupertino.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter_screenutil/flutter_screenutil.dart';
- import 'package:flutter_smmf_one/core/common/app_theme.dart';
- import 'package:flutter_smmf_one/core/common/state_enum.dart';
- import 'package:flutter_smmf_one/core/widgets/custom_app_bar.dart';
- import 'package:flutter_smmf_one/core/widgets/custom_textfield.dart';
- import 'package:flutter_smmf_one/core/widgets/gap/widgets/gap.dart';
- import 'package:flutter_smmf_one/core/widgets/loading_shimmer.dart';
- import 'package:flutter_smmf_one/data/datasources/db/database_helper.dart';
- import 'package:flutter_smmf_one/data/models/region_request_payload.dart';
- import 'package:flutter_smmf_one/presentation/controllers/home_controller.dart';
- import 'package:flutter_smmf_one/presentation/controllers/profile_region_controller.dart';
- import 'package:flutter_smmf_one/presentation/controllers/region_controller.dart';
- import 'package:flutter_smmf_one/presentation/controllers/update_location_controller.dart';
- import 'package:flutter_smmf_one/presentation/widgets/cities_options.dart';
- import 'package:flutter_smmf_one/presentation/widgets/district_options.dart';
- import 'package:flutter_smmf_one/presentation/widgets/provinces_options.dart';
- import 'package:flutter_smmf_one/presentation/widgets/sub_district_options.dart';
- import 'package:get/get.dart';
- import 'package:google_fonts/google_fonts.dart';
- final _regionController = Get.put(RegionController());
- final _profileRegionController = Get.put(ProfileRegionController());
- // final _homeController = Get.put(HomeController());
- final _updateLocationController = Get.put(UpdateLocationController());
- class EditProfilePage extends StatefulWidget {
- final Map<String, dynamic> args = Get.arguments;
- EditProfilePage({super.key});
- @override
- State<EditProfilePage> createState() => _EditProfilePageState();
- }
- class _EditProfilePageState extends State<EditProfilePage> {
- final _formKey = GlobalKey<FormState>();
- HomeController homeController = Get.find();
- final TextEditingController _provinceController = TextEditingController();
- final TextEditingController _cityController = TextEditingController();
- final TextEditingController _subDistrictController = TextEditingController();
- final TextEditingController _districtController = TextEditingController();
- final TextEditingController _postalCodeController = TextEditingController();
- @override
- void initState() {
- if (widget.args['isEdit'] == true) {
- final loggedInUser = homeController.loggedInUser;
- _profileRegionController.setRegion(
- provinceId: loggedInUser[DatabaseHelper.columnProvinceId],
- provinceName: loggedInUser[DatabaseHelper.columnProvinceName],
- cityId: loggedInUser[DatabaseHelper.columnCityId],
- cityName: loggedInUser[DatabaseHelper.columnCityName],
- subDistrictId: loggedInUser[DatabaseHelper.columnSubDistrictId],
- subDistrictName: loggedInUser[DatabaseHelper.columnSubDistrictName],
- districtName: loggedInUser[DatabaseHelper.columnDistrictName],
- zipCode: loggedInUser[DatabaseHelper.columnZipCode],
- );
- _regionController.fetchCities(
- RegionRequestPayload(
- username: "1007072",
- version: 152,
- postalId: loggedInUser[DatabaseHelper.columnProvinceId],
- postalType: "PROVINCE",
- ),
- );
- _regionController.fetchSubDistricts(
- RegionRequestPayload(
- username: "1007072",
- version: 152,
- postalId: loggedInUser[DatabaseHelper.columnCityId],
- postalType: "CITY",
- ),
- );
- _regionController.fetchDistricts(
- RegionRequestPayload(
- username: "1007072",
- version: 152,
- postalId: loggedInUser[DatabaseHelper.columnSubDistrictId],
- postalType: "SUBDISTRICT",
- ),
- );
- _provinceController.text =
- loggedInUser[DatabaseHelper.columnProvinceName] ?? '';
- _cityController.text = loggedInUser[DatabaseHelper.columnCityName] ?? '';
- _subDistrictController.text =
- loggedInUser[DatabaseHelper.columnSubDistrictName] ?? '';
- _districtController.text =
- loggedInUser[DatabaseHelper.columnDistrictName] ?? '';
- _postalCodeController.text =
- loggedInUser[DatabaseHelper.columnZipCode] ?? '';
- }
- super.initState();
- }
- @override
- void dispose() {
- _provinceController.dispose();
- _cityController.dispose();
- _subDistrictController.dispose();
- _districtController.dispose();
- _postalCodeController.dispose();
- super.dispose();
- }
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- appBar: CustomAppBar(
- titleText: 'Edit Profile',
- leading: InkWell(
- hoverColor: colorWhite,
- onTap: () => Navigator.pop(context),
- child: Icon(
- CupertinoIcons.back,
- color: colorBlack,
- size: 24,
- ),
- ),
- ),
- body: SingleChildScrollView(
- padding: EdgeInsets.symmetric(
- horizontal: defaultMargin,
- ),
- child: Form(
- key: _formKey,
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Gap(12.h),
- Obx(
- () {
- final state = _regionController.stateProvince.value;
- final provincesData = _regionController.regionProvince;
- if (state == RequestState.loading) {
- return Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Padding(
- padding: const EdgeInsets.only(
- bottom: 8,
- ),
- child: Text(
- 'Province',
- style: GoogleFonts.plusJakartaSans(
- fontSize: 12.sp,
- fontWeight: FontWeight.w400,
- color: const Color(0xFF000000),
- ),
- ),
- ),
- SizedBox(
- height: 44.h,
- width: double.infinity,
- child: const LoadingShimmer(
- radius: 8,
- ),
- ),
- ],
- );
- }
- return CustomTextField(
- controller: _provinceController,
- textName: 'Province',
- hintText: 'Province',
- suffixIcon: Icon(
- Icons.arrow_drop_down,
- size: 24,
- color: colorBlack,
- ),
- readOnly: true,
- onTap: () {
- showModalBottomSheet(
- context: context,
- isScrollControlled: true,
- useRootNavigator: true,
- shape: const RoundedRectangleBorder(
- borderRadius: BorderRadius.vertical(
- top: Radius.circular(24.0),
- ),
- ),
- builder: (_) {
- return LayoutBuilder(
- builder: (context, _) {
- return AnimatedPadding(
- padding: MediaQuery.of(
- context,
- ).viewInsets,
- duration: const Duration(
- milliseconds: 100,
- ),
- child: SearchProvinceOptions(
- data: provincesData,
- provinceController: _provinceController,
- cityController: _cityController,
- subDistrictController: _subDistrictController,
- districtController: _districtController,
- postalCodeController: _postalCodeController,
- ),
- );
- },
- );
- },
- );
- },
- validator: (value) {
- if (value != null) {
- if (value.isEmpty) {
- return 'Province tidak boleh kosong';
- }
- }
- return null;
- },
- );
- },
- ),
- Gap(12.h),
- Obx(
- () {
- final state = _regionController.stateCity.value;
- final citiesData = _regionController.regionCity;
- if (state == RequestState.loading) {
- return Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Padding(
- padding: const EdgeInsets.only(
- bottom: 8,
- ),
- child: Text(
- 'City',
- style: GoogleFonts.plusJakartaSans(
- fontSize: 12.sp,
- fontWeight: FontWeight.w400,
- color: const Color(0xFF000000),
- ),
- ),
- ),
- SizedBox(
- height: 44.h,
- width: double.infinity,
- child: const LoadingShimmer(
- radius: 8,
- ),
- ),
- ],
- );
- }
- return CustomTextField(
- controller: _cityController,
- textName: 'City',
- hintText: 'City',
- suffixIcon: Icon(
- Icons.arrow_drop_down,
- size: 24,
- color: colorBlack,
- ),
- readOnly: true,
- fillColor: _profileRegionController.provinceName.value != ''
- ? null
- : Colors.grey[200],
- onTap: _profileRegionController.provinceName.value != ''
- ? () {
- showModalBottomSheet(
- context: context,
- isScrollControlled: true,
- useRootNavigator: true,
- shape: const RoundedRectangleBorder(
- borderRadius: BorderRadius.vertical(
- top: Radius.circular(24.0),
- ),
- ),
- builder: (_) {
- return LayoutBuilder(
- builder: (context, _) {
- return AnimatedPadding(
- padding: MediaQuery.of(
- context,
- ).viewInsets,
- duration: const Duration(
- milliseconds: 100,
- ),
- child: SearchCityOptions(
- data: citiesData,
- cityController: _cityController,
- subDistrictController:
- _subDistrictController,
- districtController: _districtController,
- postalCodeController:
- _postalCodeController,
- ),
- );
- },
- );
- },
- );
- }
- : null,
- validator: (value) {
- if (value != null) {
- if (value.isEmpty) {
- return 'City tidak boleh kosong';
- }
- }
- return null;
- },
- );
- },
- ),
- Gap(12.h),
- Obx(
- () {
- final state = _regionController.stateSubDistrict.value;
- final subDistrictData = _regionController.regionSubDistrict;
- if (state == RequestState.loading) {
- return Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Padding(
- padding: const EdgeInsets.only(
- bottom: 8,
- ),
- child: Text(
- 'Sub District',
- style: GoogleFonts.plusJakartaSans(
- fontSize: 12.sp,
- fontWeight: FontWeight.w400,
- color: const Color(0xFF000000),
- ),
- ),
- ),
- SizedBox(
- height: 44.h,
- width: double.infinity,
- child: const LoadingShimmer(
- radius: 8,
- ),
- ),
- ],
- );
- }
- return CustomTextField(
- controller: _subDistrictController,
- textName: 'Sub District',
- hintText: 'Sub District',
- suffixIcon: Icon(
- Icons.arrow_drop_down,
- size: 24,
- color: colorBlack,
- ),
- readOnly: true,
- fillColor: _profileRegionController.cityName.value != ''
- ? null
- : Colors.grey[200],
- onTap: _profileRegionController.cityName.value != ''
- ? () {
- showModalBottomSheet(
- context: context,
- isScrollControlled: true,
- useRootNavigator: true,
- shape: const RoundedRectangleBorder(
- borderRadius: BorderRadius.vertical(
- top: Radius.circular(24.0),
- ),
- ),
- builder: (_) {
- return LayoutBuilder(
- builder: (context, _) {
- return AnimatedPadding(
- padding: MediaQuery.of(
- context,
- ).viewInsets,
- duration: const Duration(
- milliseconds: 100,
- ),
- child: SearchSubDistrictOptions(
- data: subDistrictData,
- subDistrictController:
- _subDistrictController,
- districtController: _districtController,
- postalCodeController:
- _postalCodeController,
- ),
- );
- },
- );
- },
- );
- }
- : null,
- validator: (value) {
- if (value != null) {
- if (value.isEmpty) {
- return 'Sub District tidak boleh kosong';
- }
- }
- return null;
- },
- );
- },
- ),
- Gap(12.h),
- Obx(
- () {
- final state = _regionController.stateDistrict.value;
- final districtData = _regionController.regionDistrict;
- if (state == RequestState.loading) {
- return Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Padding(
- padding: const EdgeInsets.only(
- bottom: 8,
- ),
- child: Text(
- 'District',
- style: GoogleFonts.plusJakartaSans(
- fontSize: 12.sp,
- fontWeight: FontWeight.w400,
- color: const Color(0xFF000000),
- ),
- ),
- ),
- SizedBox(
- height: 44.h,
- width: double.infinity,
- child: const LoadingShimmer(
- radius: 8,
- ),
- ),
- ],
- );
- }
- return CustomTextField(
- controller: _districtController,
- textName: 'District',
- hintText: 'District',
- suffixIcon: Icon(
- Icons.arrow_drop_down,
- size: 24,
- color: colorBlack,
- ),
- readOnly: true,
- fillColor:
- _profileRegionController.subDistrictName.value != ''
- ? null
- : Colors.grey[200],
- onTap: _profileRegionController.subDistrictName.value != ''
- ? () {
- showModalBottomSheet(
- context: context,
- isScrollControlled: true,
- useRootNavigator: true,
- shape: const RoundedRectangleBorder(
- borderRadius: BorderRadius.vertical(
- top: Radius.circular(24.0),
- ),
- ),
- builder: (_) {
- return LayoutBuilder(
- builder: (context, _) {
- return AnimatedPadding(
- padding: MediaQuery.of(
- context,
- ).viewInsets,
- duration: const Duration(
- milliseconds: 100,
- ),
- child: SearchDistrictOptions(
- data: districtData,
- districtController: _districtController,
- postalCodeController:
- _postalCodeController,
- ),
- );
- },
- );
- },
- );
- }
- : null,
- validator: (value) {
- if (value != null) {
- if (value.isEmpty) {
- return 'District tidak boleh kosong';
- }
- }
- return null;
- },
- );
- },
- ),
- Gap(12.h),
- CustomTextField(
- controller: _postalCodeController,
- textName: 'Postal Code',
- hintText: 'Postal Code',
- readOnly: true,
- fillColor: Colors.grey[200],
- validator: (value) {
- if (value != null) {
- if (value.isEmpty) {
- return 'Postal Code tidak boleh kosong';
- }
- }
- return null;
- },
- ),
- ],
- ),
- ),
- ),
- bottomNavigationBar: Padding(
- padding: EdgeInsets.symmetric(
- horizontal: defaultMargin,
- vertical: 12.h,
- ),
- child: TextButton(
- onPressed: () {
- if (_formKey.currentState?.validate() == true) {
- if (FocusScope.of(context).hasFocus) {
- FocusManager.instance.primaryFocus?.unfocus();
- }
- _updateLocationController.updateLocation(
- widget.args['phone'],
- _profileRegionController.provinceId.value,
- _profileRegionController.provinceName.value,
- _profileRegionController.cityId.value,
- _profileRegionController.cityName.value,
- _profileRegionController.subDistrictId.value,
- _profileRegionController.subDistrictName.value,
- _profileRegionController.districtName.value,
- _profileRegionController.zipCode.value,
- );
- }
- },
- style: OutlinedButton.styleFrom(
- backgroundColor: colorPrimary,
- padding: const EdgeInsets.symmetric(
- vertical: 12,
- horizontal: 8,
- ),
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(
- defaultRadius,
- ),
- ),
- ),
- child: Text(
- 'Simpan',
- style: GoogleFonts.plusJakartaSans(
- fontSize: 14.sp,
- fontWeight: FontWeight.w600,
- color: Colors.white,
- letterSpacing: 1,
- ),
- ),
- ),
- ),
- );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement