Advertisement
Hevernooo

Вход

Nov 19th, 2024
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 5.11 KB | None | 0 0
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter/services.dart';
  3. import 'package:plantual_1/ui/auth/signUpScreen.dart';
  4. import 'package:plantual_1/utils/utils.dart';
  5. import 'package:plantual_1/widgets/round_button.dart';
  6. import 'package:firebase_auth/firebase_auth.dart';
  7.  
  8. import '../../scenes/home.dart';
  9.  
  10. class signInScreen extends StatefulWidget {
  11.   const signInScreen({super.key});
  12.  
  13.   @override
  14.   State<signInScreen> createState() => _signInScreenState();
  15. }
  16.  
  17. class _signInScreenState extends State<signInScreen> {
  18.  
  19.   bool loading = false;
  20.   final _formKey = GlobalKey<FormState>();
  21.   final emailController = TextEditingController();
  22.   final passwordController = TextEditingController();
  23.  
  24.   final _auth = FirebaseAuth.instance;
  25.  
  26.   @override
  27.   void dispose(){
  28.     super.dispose();
  29.     emailController.dispose();
  30.     passwordController.dispose();
  31.   }
  32.  
  33.   void login(){
  34.     setState(() {
  35.       loading = true;
  36.     });
  37.     _auth.signInWithEmailAndPassword(
  38.         email: emailController.text.toString(),
  39.         password: passwordController.text.toString()).then((value){
  40.           utilsDone().toastMessage(value.user!.email.toString());
  41.           Navigator.push(context,
  42.               MaterialPageRoute(builder: (context) => Home())
  43.           );
  44.           setState(() {
  45.             loading = false;
  46.           });
  47.     }).onError((error, stackTrace){
  48.       if(error.toString() == '[firebase_auth/invalid-email] The email address is badly formatted.') {
  49.         utilsError().toastMessage('Почта введена неправильно');
  50.       };
  51.       if(error.toString() == '[firebase_auth/invalid-credential] The supplied auth credential is incorrect, malformed or has expired.') {
  52.         utilsError().toastMessage('Неверные данные для входа');
  53.       };
  54.       debugPrint(error.toString());
  55.       setState(() {
  56.         loading = false;
  57.       });
  58.     });
  59.   }
  60.  
  61.   @override
  62.   Widget build(BuildContext context) {
  63.     return WillPopScope(
  64.       onWillPop: ()async{
  65.         SystemNavigator.pop();
  66.         return true;
  67.       },
  68.       child: Scaffold(
  69.         appBar: AppBar(
  70.           backgroundColor: Colors.lightGreen,
  71.           automaticallyImplyLeading: false,
  72.           centerTitle: true,
  73.           title: Text('Вход', style: TextStyle(color: Colors.white)),
  74.         ),
  75.         body: Padding(
  76.           padding: const EdgeInsets.symmetric(horizontal: 20),
  77.           child: Column(
  78.             mainAxisAlignment: MainAxisAlignment.center,
  79.             crossAxisAlignment: CrossAxisAlignment.center,
  80.             children: [
  81.               Form(
  82.                 key: _formKey,
  83.                 child: Column(
  84.                   children: [
  85.                     TextFormField(
  86.                       keyboardType: TextInputType.emailAddress,
  87.                       controller: emailController,
  88.                       decoration: const InputDecoration(
  89.                           hintText: 'Почта',
  90.                           helperText: 'Введите эл.почту',
  91.                           prefixIcon: Icon(Icons.alternate_email)
  92.                       ),
  93.                       validator: (value) {
  94.                         if(value!.isEmpty){
  95.                           return 'Введите почту';
  96.                         }
  97.                         return null;
  98.                       },
  99.                     ),
  100.                     const SizedBox(height: 10),
  101.                     TextFormField(
  102.                       keyboardType: TextInputType.text,
  103.                       obscureText: true,
  104.                       controller: passwordController,
  105.                       decoration: const InputDecoration(
  106.                           hintText: 'Пароль',
  107.                           helperText: 'Введите пароль',
  108.                           prefixIcon: Icon(Icons.lock_open)
  109.                       ),
  110.                       validator: (value) {
  111.                         if(value!.isEmpty){
  112.                           return 'Введите пароль';
  113.                         }
  114.                         return null;
  115.                       },
  116.                     ),
  117.                   ],
  118.                 ),
  119.               ),
  120.               const SizedBox(height: 30),
  121.               roundButton(
  122.                 title: 'Войти',
  123.                 loading: loading,
  124.                 onTap: () {
  125.                 if(_formKey.currentState!.validate()){
  126.                   login();
  127.                 }
  128.               },),
  129.               const SizedBox(height: 10),
  130.               Row(
  131.                 mainAxisAlignment: MainAxisAlignment.center,
  132.                 children: [
  133.                   Text('Нет аккаунта?'),
  134.                   TextButton(
  135.                       onPressed: (){
  136.                         Navigator.push(context,
  137.                             MaterialPageRoute(builder: (context) => signUpScreen())
  138.                         );
  139.                       },
  140.                       child: Text('Зарегистрироваться'))
  141.                 ],
  142.               )
  143.             ],
  144.           ),
  145.         ),
  146.       ),
  147.     );
  148.   }
  149. }
  150.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement