Commandité
-
Fil d’actualités
- EXPLORER
-
Evènements
-
Blogs
-
Offres
-
Emplois
ফ্লাটার অ্যাপে গুগল অথেনটিকেশন
ফ্লাটারে গুগল ব্যবহার করে লগিন করার জন্য অফিশিয়াল প্যাকেজ রয়েছে। ফ্লাটারে ব্যবহার করার জন্য একটা ওয়েব ক্লায়েন্ট তৈরি করতে হবে। এর জন্য গুগল ডেভেলপার কনসোল থেকে একটা অ্যাপ তৈরি করতে হবে। এরপর Google Auth Plantform > Clients থেকে নতুন একটা ওয়েব ক্লায়েন্ট তৈরি করতে হবে।
তৈরি করার পর একটা আইডি পাবো। ঐ আইডি ব্যবহার করে আমরা অথেনটিকেট করতে পারব। এখানে সিম্পল একটা ইমপ্লিমেন্টেশন দেওয়া আছে।
import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
title: 'Google Sign-In Demo',
home: SignInTest(),
);
}
}
class SignInTest extends StatefulWidget {
const SignInTest({super.key});
@override
State<SignInTest> createState() => _SignInTestState();
}
class _SignInTestState extends State<SignInTest> {
final GoogleSignIn _googleSignIn = GoogleSignIn.instance;
GoogleSignInAccount? _user;
bool _isInitialized = false;
@override
void initState() {
super.initState();
_initializeGoogleSignIn();
}
Future<void> _initializeGoogleSignIn() async {
try {
// Initialize GoogleSignIn - scopes are now requested via authorizationClient
// serverClientId is required for authentication
await _googleSignIn.initialize(serverClientId: 'asdf-asdf.apps.googleusercontent.com');
_isInitialized = true;
// Listen to authentication events
_listenForAuthChanges();
// Attempt to restore previous session
await _restorePreviousSession();
} catch (e) {
debugPrint('Failed to initialize Google Sign-In: $e');
}
}
void _listenForAuthChanges() {
_googleSignIn.authenticationEvents.listen((event) {
if (event is GoogleSignInAuthenticationEventSignIn) {
setState(() => _user = event.user);
} else if (event is GoogleSignInAuthenticationEventSignOut) {
setState(() => _user = null);
}
}, onError: (error) {
debugPrint('Authentication error: $error');
});
}
Future<void> _restorePreviousSession() async {
if (!_isInitialized) return;
try {
final future = _googleSignIn.attemptLightweightAuthentication();
if (future != null) {
final currentUser = await future;
if (currentUser != null && mounted) {
setState(() => _user = currentUser);
}
}
} catch (e) {
debugPrint('Failed to restore session: $e');
}
}
Future<void> _signIn() async {
if (!_isInitialized) {
debugPrint('Google Sign-In not initialized yet');
return;
}
try {
final user = await _googleSignIn.authenticate(
scopeHint: ['email', 'profile'],
);
if (mounted) {
setState(() => _user = user);
}
} catch (e) {
debugPrint('Sign-in error: $e');
// Show error to user
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Sign-in failed: ${e.toString()}')),
);
}
}
}
Future<void> _signOut() async {
if (!_isInitialized) return;
try {
await _googleSignIn.signOut();
setState(() => _user = null);
} catch (e) {
debugPrint('Sign-out error: $e');
}
}
@override
Widget build(BuildContext context) {
final user = _user;
return Scaffold(
appBar: AppBar(title: const Text('Google Sign-In Test')),
body: Center(
child: user == null
? ElevatedButton(
onPressed: _signIn,
child: const Text('Sign in with Google'),
)
: Column(
mainAxisSize: MainAxisSize.min,
children: [
if (user.photoUrl != null)
CircleAvatar(
backgroundImage: NetworkImage(user.photoUrl!),
radius: 40,
),
const SizedBox(height: 16),
Text('Signed in as: ${user.displayName ?? 'No name'}'),
Text(user.email),
const SizedBox(height: 16),
ElevatedButton(
onPressed: _signOut,
style: ElevatedButton.styleFrom(backgroundColor: Colors.red),
child: const Text('Sign Out'),
),
],
),
),
);
}
}
লগিন করা না থাকলে লগিন বাটন থাকবে। আর লগিন করা থাকলে লগিন করা ইউজারের ইনফো দেখাবে।
Rechercher
Catégories
- Nulled
- Tech
- Emploi
- Hacking Course
- Art
- Causes
- Crafts
- Dance
- Drinks
- Film
- Fitness
- Food
- Jeux
- Gardening
- Health
- Domicile
- Literature
- Music
- Networking
- Autre
- Party
- Religion
- Shopping
- Sports
- Theater
- Wellness
Lire la suite
ওয়েবসাইট করুন হোস্টিং একদম ফ্রি তে | Techtunes | টেকটিউনস
চোখ ধাঁধাঁনো যে সকল প্রযুক্তি দেখবেন ২০২০ টোকিও অলেম্পিকে। আবদুল্লাহ্ আল মামুন
CS-Cart v4.17.2 Nulled - Multi-Vendor eCommerce Marketplace Platform Script
CS-Cart v4.17.2 Nulled – Multi-Vendor eCommerce Marketplace Platform PHP Script Free...
ছোট আকারের (কমপক্ষে ইমেইজ Width 600 px এর মধ্যে থাকা) Square, Horizontal, Vertical ইমেইজ AI এর সাহায্য টেকটিউনস এর গাইডলাইন মোতাবেক 1920×1080 তে কনভার্ট করবেন যেভাবে – মোবাইল এর সাহায্যে | Techtunes | টেকটিউনস
মজিলার নির্বাচিত সাতটি বেস্ট ফায়ারফক্স 3 অ্যাডঅন দুঃসাহসী টিনটিন
Digitek v1.0 - SEO Service HTML Template Free
Digitek v1.0 – SEO Service HTML Template Free Download. Digitek is a Responsive Modern...
বন্ধ হচ্ছে অ্যাডোব ফ্ল্যাশ, জানিয়েছে অ্যাডোব ও ব্রাউজার নির্মাতারা | Techtunes | টেকটিউনস
বিশ্বের সবচেয়ে বড় পাঁচটি যুদ্ধ যাতে নিহত হয়েছিল লক্ষ লক্ষ লোক Exclusively @ সাবটাইটেল...