Files
kulakpos_app/lib/Screens/Profile Screen/profile_details.dart

300 lines
14 KiB
Dart
Raw Normal View History

2026-02-07 15:57:09 +07:00
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mobile_pos/Screens/Profile%20Screen/edit_profile.dart';
import 'package:mobile_pos/currency.dart';
import 'package:mobile_pos/generated/l10n.dart' as lang;
import 'package:nb_utils/nb_utils.dart';
import '../../Const/api_config.dart';
import '../../GlobalComponents/glonal_popup.dart';
import '../../Provider/profile_provider.dart';
import '../../constant.dart';
import '../Authentication/change password/change_password_screen.dart';
class ProfileDetails extends StatefulWidget {
const ProfileDetails({super.key});
@override
ProfileDetailsState createState() => ProfileDetailsState();
}
class ProfileDetailsState extends State<ProfileDetails> {
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
return Consumer(builder: (context, ref, __) {
final businessInfo = ref.watch(businessInfoProvider);
return businessInfo.when(data: (details) {
TextEditingController addressController = TextEditingController(text: details.data?.address);
TextEditingController openingBalanceController = TextEditingController(text: details.data?.shopOpeningBalance.toString());
TextEditingController remainingBalanceController = TextEditingController(text: details.data?.remainingShopBalance.toString());
TextEditingController phoneController = TextEditingController(text: details.data?.phoneNumber);
TextEditingController nameController = TextEditingController(text: details.data?.companyName);
TextEditingController categoryController = TextEditingController(text: details.data?.category?.name);
TextEditingController vatGstTitleController = TextEditingController(text: details.data?.vatName);
TextEditingController vatGstNumberController = TextEditingController(text: details.data?.vatNo);
return GlobalPopup(
child: Scaffold(
backgroundColor: kWhite,
appBar: AppBar(
title: Text(
lang.S.of(context).profile,
),
actions: [
Visibility(
// visible: details.data?.user?.visibility?.profileEditPermission ?? true,
child: Padding(
padding: const EdgeInsets.only(right: 15.0),
child: GestureDetector(
onTap: () async {
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => EditProfile(
profile: details,
ref: ref,
),
));
setState(() {});
},
child: Row(
children: [
const Icon(
Icons.edit,
color: kMainColor,
),
const SizedBox(
width: 5.0,
),
Text(
lang.S.of(context).edit,
style: theme.textTheme.bodyMedium?.copyWith(
color: kMainColor,
),
),
],
),
),
),
),
],
iconTheme: const IconThemeData(color: Colors.black),
centerTitle: true,
backgroundColor: Colors.white,
elevation: 0.0,
),
bottomNavigationBar: Padding(
padding: const EdgeInsets.all(10.0),
child: ElevatedButton.icon(
label: Text(lang.S.of(context).changePassword),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ChangePasswordScreen(),
));
},
),
),
body: Padding(
padding: const EdgeInsets.all(10.0),
child: SingleChildScrollView(
child: Column(
children: [
Center(
child: Container(
height: 100.0,
width: 100.0,
decoration: details.data?.pictureUrl == null
? BoxDecoration(
image: const DecorationImage(image: AssetImage('images/no_shop_image.png'), fit: BoxFit.cover),
borderRadius: BorderRadius.circular(50),
)
: BoxDecoration(
image: DecorationImage(image: NetworkImage(APIConfig.domain + (details.data?.pictureUrl.toString() ?? '')), fit: BoxFit.cover),
borderRadius: BorderRadius.circular(50),
),
),
),
const SizedBox(height: 10.0),
///________Name___________________________________
Padding(
padding: const EdgeInsets.all(10.0),
child: AppTextField(
readOnly: true,
cursorColor: kGreyTextColor,
controller: nameController,
decoration: kInputDecoration.copyWith(
labelText: lang.S.of(context).name,
border: const OutlineInputBorder().copyWith(borderSide: const BorderSide(color: kGreyTextColor)),
hoverColor: kGreyTextColor,
fillColor: kGreyTextColor,
),
textFieldType: TextFieldType.NAME,
),
),
///________Email__________________________________
Padding(
padding: const EdgeInsets.all(10.0),
child: AppTextField(
readOnly: true,
initialValue: details.data?.user?.email,
cursorColor: kGreyTextColor,
decoration: kInputDecoration.copyWith(
//labelText: "Email",
labelText: lang.S.of(context).email,
border: const OutlineInputBorder().copyWith(borderSide: const BorderSide(color: kGreyTextColor)),
hoverColor: kGreyTextColor,
fillColor: kGreyTextColor,
),
textFieldType: TextFieldType.NAME,
),
),
///_____________Category__________________________________
Padding(
padding: const EdgeInsets.all(10.0),
child: AppTextField(
readOnly: true,
cursorColor: kGreyTextColor,
controller: categoryController,
decoration: kInputDecoration.copyWith(
labelText: lang.S.of(context).businessCat,
border: const OutlineInputBorder().copyWith(borderSide: const BorderSide(color: kGreyTextColor)),
hoverColor: kGreyTextColor,
fillColor: kGreyTextColor,
),
textFieldType: TextFieldType.NAME,
),
),
///_____________Phone_________________________________
Padding(
padding: const EdgeInsets.all(10.0),
child: AppTextField(
readOnly: true,
cursorColor: kGreyTextColor,
controller: phoneController,
decoration: kInputDecoration.copyWith(
labelText: lang.S.of(context).phone,
border: const OutlineInputBorder().copyWith(borderSide: const BorderSide(color: kGreyTextColor)),
hoverColor: kGreyTextColor,
fillColor: kGreyTextColor,
),
textFieldType: TextFieldType.NAME,
),
),
///__________Address_________________________
Padding(
padding: const EdgeInsets.all(10.0),
child: AppTextField(
readOnly: true,
cursorColor: kGreyTextColor,
controller: addressController,
decoration: kInputDecoration.copyWith(
labelText: lang.S.of(context).address,
border: const OutlineInputBorder().copyWith(borderSide: const BorderSide(color: kGreyTextColor)),
hoverColor: kGreyTextColor,
fillColor: kGreyTextColor,
),
textFieldType: TextFieldType.NAME,
),
),
///_______Gst_number____________________________
Row(
children: [
///_______title__________________________________
Expanded(
child: Padding(
padding: const EdgeInsets.only(top: 10, left: 10, bottom: 10),
child: AppTextField(
readOnly: true,
validator: (value) {
return null;
},
controller: vatGstTitleController,
textFieldType: TextFieldType.NAME,
decoration: kInputDecoration.copyWith(
labelText: lang.S.of(context).vatGstTitle,
border: const OutlineInputBorder(),
),
),
),
),
///______Vat_and_Gst_Number__________________________________
Expanded(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: AppTextField(
readOnly: true,
validator: (value) {
return null;
},
controller: vatGstNumberController,
// Optional
textFieldType: TextFieldType.NAME,
decoration: kInputDecoration.copyWith(
labelText: lang.S.of(context).vatGstNumber,
border: const OutlineInputBorder(),
),
),
),
),
],
),
///__________Opening_Balance________________________
Padding(
padding: const EdgeInsets.all(10.0),
child: AppTextField(
readOnly: true,
cursorColor: kGreyTextColor,
controller: openingBalanceController,
decoration: kInputDecoration.copyWith(
prefixText: '$currency ',
labelText: lang.S.of(context).shopOpeningBalance,
border: const OutlineInputBorder().copyWith(borderSide: const BorderSide(color: kGreyTextColor)),
hoverColor: kGreyTextColor,
fillColor: kGreyTextColor,
),
textFieldType: TextFieldType.NAME,
),
),
// ///__________Remaining_Balance________________________
// Padding(
// padding: const EdgeInsets.all(10.0),
// child: AppTextField(
// readOnly: true,
// cursorColor: kGreyTextColor,
// controller: remainingBalanceController,
// decoration: kInputDecoration.copyWith(
// prefixText: '$currency ',
// labelText: lang.S.of(context).shopRemainingBalance,
// border: const OutlineInputBorder().copyWith(borderSide: const BorderSide(color: kGreyTextColor)),
// hoverColor: kGreyTextColor,
// fillColor: kGreyTextColor,
// ),
// textFieldType: TextFieldType.NAME,
// ),
// ),
],
),
),
),
),
);
}, error: (e, stack) {
return Text(e.toString());
}, loading: () {
return const CircularProgressIndicator();
});
});
}
}