Files
karvon_market/app_code/lib/screens/auth/login.dart
jahongireshonqulov 9fbdabafb4 Initial commit
2025-10-17 19:42:02 +05:00

301 lines
11 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:grostore/app_lang.dart';
import 'package:grostore/configs/style_config.dart';
import 'package:grostore/configs/theme_config.dart';
import 'package:grostore/custom_ui/Button.dart';
import 'package:grostore/custom_ui/auth_ui.dart';
import 'package:grostore/custom_ui/input_decorations.dart';
import 'package:grostore/helpers/device_info_helper.dart';
import 'package:grostore/helpers/route.dart';
import 'package:grostore/presenters/auth/auth_presenter.dart';
import 'package:grostore/screens/auth/password_forget.dart';
import 'package:grostore/screens/auth/registration.dart';
import 'package:provider/provider.dart';
import '../../custom_ui/BoxDecorations.dart';
class Login extends StatefulWidget {
const Login({super.key});
@override
_LoginState createState() => _LoginState();
}
class _LoginState extends State<Login> {
@override
Widget build(BuildContext context) {
Provider.of<AuthPresenter>(context, listen: false).setContext(context);
return AuthScreen.buildScreen(
context, buildBody(context, getWidth(context))
);
}
Widget buildBody(BuildContext context, double screenWidth) {
return Consumer<AuthPresenter>(builder: (context, data, child) {
return Container(
alignment: Alignment.center,
padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding),
width: screenWidth * (3 / 4),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width: getWidth(context),
padding: const EdgeInsets.only(bottom: 4.0),
child: Text(
AppLang.local(context).welcome_to_back,
style: StyleConfig.fs24fwBold,
textAlign: TextAlign.center,
),
),
Padding(
padding: const EdgeInsets.only(bottom: 4.0),
child: Text(
AppLang.local(context).phone,
style: TextStyle(
color: ThemeConfig.fontColor, fontWeight: FontWeight.w600),
),
),
/// #Country change
Padding(
padding: const EdgeInsets.only(bottom: 8.0),
child: Container(
decoration: BoxDecorations.basic(
),
height: 36,
child: Row(
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 14.0),
child: Icon(
Icons.phone,
size: 18,
color: ThemeConfig.mediumGrey,
),
),
Text(
"+998",
style: StyleConfig.fs14fwNormal,
),
// Button(
// minWidth: 80,
// onPressed: () {
// showDialog(
// context: context,
// builder: (context) {
// return buildFilterDialog(data);
// });
// },
// child: Row(
// children: [
// Image.asset(
// "${getAssetFlag(data.regCountry.code.toLowerCase())}.png"),
//
// ],
// ),
// ),
Container(
padding: const EdgeInsets.only(left: 10),
width: getWidth(context) - 200,
child: TextField(
keyboardType: TextInputType.number,
textInputAction: TextInputAction.next,
style: StyleConfig.fs14fwNormal,
decoration: const InputDecoration.collapsed(
hintText: "XX XXX XXX"),
controller: data.loginPhoneNumberController,
),
)
],
)),
),
// Padding(
// padding: const EdgeInsets.only(bottom: 8.0),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.end,
// children: [
// SizedBox(
// height: 36,
// child: TextField(
// controller: data.loginEmailController,
// autofocus: false,
// decoration: InputDecorations.basic(
// prefixIcon: Icon(
// Icons.email_outlined,
// size: 18,
// color: ThemeConfig.mediumGrey,
// ),
// hint_text: "user@example.com"),
// ),
// ),
// ],
// ),
// ),
// #Password
Padding(
padding: const EdgeInsets.only(bottom: 4.0),
child: Text(
AppLang.local(context).password,
style: TextStyle(
color: ThemeConfig.fontColor, fontWeight: FontWeight.w600),
),
),
Padding(
padding: const EdgeInsets.only(bottom: 8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
SizedBox(
height: 36,
child: TextField(
textInputAction: TextInputAction.search,
controller: data.loginPasswordController,
autofocus: false,
obscureText: true,
enableSuggestions: false,
autocorrect: false,
decoration: InputDecorations.basic(
prefixIcon: Icon(
Icons.lock,
size: 18,
color: ThemeConfig.mediumGrey,
),
hint_text: "• • • • • • • •"),
),
),
Button(
minWidth: 50,
padding: EdgeInsets.zero,
child: Text(
AppLang.local(context).forgot_password_q_ucf,
style: TextStyle(
color: ThemeConfig.blue,
fontStyle: FontStyle.italic),
),
onPressed: (){
MakeRoute.go(context, PasswordForget());
},
)
],
),
),
// #login Button
Padding(
padding: const EdgeInsets.only(top: 30.0),
child: Container(
height: 45,
child: Button.minSize(
width: getWidth(context),
height: 50,
color: ThemeConfig.red,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(6.0))),
child: Text(
AppLang.local(context).login,
style: const TextStyle(
color: Colors.white,
fontSize: 14,
fontWeight: FontWeight.w600),
),
onPressed: () {
data.onPressedLogin();
}),
),
),
// #register route text
Padding(
padding: const EdgeInsets.only(top: 20.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Center(
child: Text(
AppLang.local(context).not_a_member,
style:
TextStyle(color: ThemeConfig.fontColor, fontSize: 12),
)),
const SizedBox(
width: 10,
),
Button(
minWidth: 20,
child: Text(
AppLang.local(context).register_now_ucf,
style: TextStyle(
color: ThemeConfig.red,
fontSize: 14,
fontWeight: FontWeight.w600),
),
onPressed: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) {
return Registration();
}));
},
),
],
),
),
],
),
);
});
}
// Country country = Country(name:"Uzbekistan" , dial_code: "+998", code: "+998");
// AlertDialog buildFilterDialog(AuthPresenter data) {
// return AlertDialog(
// title: const Text('Search Country'),
// content: Container(
// height: 300,
// child: Column(
// mainAxisSize: MainAxisSize.min,
// children: <Widget>[
// TextField(
// onChanged: data.filterCountry,
// decoration: const InputDecoration(
// hintText: 'Search',
// ),
// ),
// const SizedBox(height: 16.0),
// Expanded(
// child: SingleChildScrollView(
// child: Consumer<AuthPresenter>(
// builder: (context, filterData, child) {
// return Column(
// children: List.generate(filterData.filteredCountry.length,
// (index) {
// country = filterData.filteredCountry[index];
// return ListTile(
// leading: Image.asset(
// getAssetFlag("${country.code.toLowerCase()}.png"),
// height: 30,
// width: 30,
// ),
// title: Text(country.name),
// onTap: () {
// data.onChangeCountry(country);
// Navigator.of(context).pop();
// filterData.filteredCountry = filterData.country;
// },
// );
// }),
// );
// }),
// ),
// ),
// ],
// ),
// ),
// );
// }
}