Hướng dẫn tích hợp Firebase Authentication vào ứng dụng Flutter
Hướng dẫn tích hợp Firebase Authentication vào ứng dụng Flutter
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';

class LoginPage extends StatefulWidget {
  @override
  _LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State {
  final _formKey = GlobalKey();
  String _email = '';
  String _password = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Đăng nhập'),
      ),
      body: Form(
        key: _formKey,
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            children: [
              TextFormField(
                decoration: InputDecoration(labelText: 'Email'),
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Vui lòng nhập địa chỉ email';
                  }
                  return null;
                },
                onChanged: (value) {
                  setState(() {
                    _email = value;
                  });
                },
              ),
              TextFormField(
                decoration: InputDecoration(labelText: 'Mật khẩu'),
                obscureText: true,
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Vui lòng nhập mật khẩu';
                  }
                  return null;
                },
                onChanged: (value) {
                  setState(() {
                    _password = value;
                  });
                },
              ),
              ElevatedButton(
                onPressed: () {
                  _signInWithEmailAndPassword();
                },
                child: Text('Đăng nhập'),
              ),
              ElevatedButton(
                onPressed: () {
                  _signUpWithEmailAndPassword();
                },
                child: Text('Đăng ký'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
Future _signInWithEmailAndPassword() async {
  if (_formKey.currentState!.validate()) {
    try {
      UserCredential userCredential = await FirebaseAuth.instance.signInWithEmailAndPassword(
        email: _email,
        password: _password,
      );
      // Xử lý sau khi đăng nhập thành công
      print('Đăng nhập thành công: $');
      Navigator.pushNamed(context, '/home');
    } on FirebaseAuthException catch (e) {
      handleAuthError(e);
    }
  }
}

Future _signUpWithEmailAndPassword() async {
  if (_formKey.currentState!.validate()) {
    try {
      UserCredential userCredential = await FirebaseAuth.instance.createUserWithEmailAndPassword(
        email: _email,
        password: _password,
      );
      // Xử lý sau khi đăng ký thành công
      print('Đăng ký thành công: $');
      Navigator.pushNamed(context, '/verify');
    } on FirebaseAuthException catch (e) {
      handleAuthError(e);
    }
  }
}

void handleAuthError(FirebaseAuthException e) {
  if (e.code == 'user-not-found') {
    print('Tài khoản không tồn tại.');
  } else if (e.code == 'wrong-password') {
    print('Mật khẩu không đúng.');
  } else if (e.code == 'weak-password') {
    print('Mật khẩu quá yếu.');
  } else if (e.code == 'email-already-in-use') {
    print('Email đã được sử dụng.');
  }
  ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(e.message!)));
}
Hướng dẫn tích hợp Firebase Authentication vào ứng dụng Flutter
dependencies:
  google_sign_in: ^5.2.0
flutter pub get
ElevatedButton(
  onPressed: () {
    _signInWithGoogle();
  },
  child: Padding(
    padding: const EdgeInsets.all(8.0),
    child: Row(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: [
        Image.asset('assets/images/google_logo.png', width: 30, height: 30),
        Padding(
          padding: const EdgeInsets.only(left: 8.0),
          child: Text('Đăng nhập bằng Google'),
        ),
      ],
    ),
  ),
  style: ElevatedButton.styleFrom(
    backgroundColor: Colors.white,
  ),
)
Future _signInWithGoogle() async {
  try {
    // Trigger the authentication flow
    final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();
    // Obtain the auth details from the request
    final GoogleSignInAuthentication? googleAuth = await googleUser?.authentication;

    // Create a new credential
    final credential = GoogleAuthProvider.credential(
      accessToken: googleAuth?.accessToken,
      idToken: googleAuth?.idToken,
    );

    // Once signed in, return the UserCredential
    UserCredential userCredential = await FirebaseAuth.instance.signInWithCredential(credential);
    print('Đăng nhập với Google thành công: $');
    Navigator.pushNamed(context, '/home');
  } catch (error) {
    print("Lỗi đăng nhập với Google: $error");
    ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Đăng nhập không thành công")));
  }
}
dependencies:
  flutter_facebook_auth: ^4.0.0
flutter pub get
ElevatedButton(
  onPressed: () {
    _signInWithFacebook();
  },
  child: Padding(
    padding: const EdgeInsets.all(8.0),
    child: Row(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: [
        Icon(Icons.facebook),
        Padding(
          padding: const EdgeInsets.only(left: 8.0),
          child: Text('Đăng nhập bằng Facebook'),
        ),
      ],
    ),
  ),
  style: ElevatedButton.styleFrom(
    backgroundColor: Color(0xFF4267B2),
    foregroundColor: Colors.white,
  ),
)
Future _signInWithFacebook() async {
  try {
    final LoginResult result = await FacebookAuth.instance.login();

    if (result.status == LoginStatus.success) {
      final AccessToken accessToken = result.accessToken!;
      
      // Create a new credential
      final credential = FacebookAuthProvider.credential(accessToken.token);

      // Once signed in, return the UserCredential
      UserCredential userCredential = await FirebaseAuth.instance.signInWithCredential(credential);
      print('Đăng nhập với Facebook thành công: $');
      Navigator.pushNamed(context, '/home');
    } else {
      print('Lỗi đăng nhập Facebook: $');
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Đăng nhập không thành công")));
    }
  } catch (error) {
    print("Lỗi: $error");
    ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Đăng nhập không thành công")));
  }
}
ElevatedButton(
  onPressed: () {
    _signOut();
  },
  child: Text('Đăng xuất'),
)
Future _signOut() async {
  await FirebaseAuth.instance.signOut();
  print("Người dùng đã đăng xuất.");
  Navigator.pushNamed(context, '/login');
}
@override
void initState() {
  super.initState();
  
  FirebaseAuth.instance.authStateChanges().listen((User? user) {
    if (user == null) {
      print('Người dùng đã đăng xuất');
      Navigator.pushReplacementNamed(context, '/login');
    } else {
      print('Người dùng đã đăng nhập: $');
      Navigator.pushReplacementNamed(context, '/home');
    }
  });
}