Hướng dẫn tích hợp Firebase Authentic vào ứng dụng Flutter
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');
    }
  });
}