linkedin_login 3.0.5 linkedin_login: ^3.0.5 copied to clipboard
Library for login with LinkedIn OAuth V2 service with OpedID. This library helps you to implement authorization with LinkedIn OAuth API's.
import 'package:flutter/material.dart';
import 'package:linkedin_login/linkedin_login.dart';
// ignore_for_file: avoid_print
void main() => runApp(const MyApp());
// @TODO IMPORTANT - you need to change variable values below
// You need to add your own data from LinkedIn application
// From: https://www.linkedin.com/developers/
// Please read step 1 from this link https://developer.linkedin.com/docs/oauth2
const String redirectUrl = 'https://www.youtube.com/callback';
const String clientId = '776rnw4e4izlvg';
const String clientSecret = 'rQEgboUHMLcQi59v';
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(final BuildContext context) {
return MaterialApp(
title: 'Flutter LinkedIn demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: DefaultTabController(
length: 2,
child: Scaffold(
appBar: AppBar(
bottom: const TabBar(
tabs: [
Tab(
icon: Icon(Icons.person),
text: 'Profile',
),
Tab(icon: Icon(Icons.text_fields), text: 'Auth code'),
],
),
title: const Text('LinkedIn Authorization'),
),
body: const TabBarView(
children: [
LinkedInProfileExamplePage(),
LinkedInAuthCodeExamplePage(),
],
),
),
),
);
}
}
class LinkedInProfileExamplePage extends StatefulWidget {
const LinkedInProfileExamplePage({super.key});
@override
State createState() => _LinkedInProfileExamplePageState();
}
class _LinkedInProfileExamplePageState
extends State<LinkedInProfileExamplePage> {
UserObject? user;
bool logoutUser = false;
@override
Widget build(final BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
LinkedInButtonStandardWidget(
onTap: () {
Navigator.push(
context,
MaterialPageRoute<void>(
builder: (final BuildContext context) => LinkedInUserWidget(
appBar: AppBar(
title: const Text('OAuth User'),
),
destroySession: logoutUser,
redirectUrl: redirectUrl,
clientId: clientId,
clientSecret: clientSecret,
onError: (final UserFailedAction e) {
print('Error: ${e.toString()}');
print('Error: ${e.stackTrace.toString()}');
},
onGetUserProfile: (final UserSucceededAction linkedInUser) {
print(
'Access token ${linkedInUser.user.token}',
);
print('User sub: ${linkedInUser.user.sub}');
user = UserObject(
firstName: linkedInUser.user.givenName,
lastName: linkedInUser.user.familyName,
email: linkedInUser.user.email,
profileImageUrl: linkedInUser.user.picture,
);
setState(() {
logoutUser = false;
});
Navigator.pop(context);
},
),
fullscreenDialog: true,
),
);
},
),
LinkedInButtonStandardWidget(
onTap: () {
setState(() {
user = null;
logoutUser = true;
});
},
buttonText: 'Logout',
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('First: ${user?.firstName} '),
Text('Last: ${user?.lastName} '),
Text('Email: ${user?.email}'),
Text('Profile image: ${user?.profileImageUrl}'),
],
),
],
),
);
}
}
class LinkedInAuthCodeExamplePage extends StatefulWidget {
const LinkedInAuthCodeExamplePage({super.key});
@override
State createState() => _LinkedInAuthCodeExamplePageState();
}
class _LinkedInAuthCodeExamplePageState
extends State<LinkedInAuthCodeExamplePage> {
AuthCodeObject? authorizationCode;
bool logoutUser = false;
@override
Widget build(final BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
LinkedInButtonStandardWidget(
onTap: () {
Navigator.push(
context,
MaterialPageRoute<void>(
builder: (final BuildContext context) => LinkedInAuthCodeWidget(
destroySession: logoutUser,
redirectUrl: redirectUrl,
clientId: clientId,
onError: (final AuthorizationFailedAction e) {
print('Error: ${e.toString()}');
print('Error: ${e.stackTrace.toString()}');
},
onGetAuthCode: (final AuthorizationSucceededAction response) {
print('Auth code ${response.codeResponse.code}');
print('State: ${response.codeResponse.state}');
authorizationCode = AuthCodeObject(
code: response.codeResponse.code,
state: response.codeResponse.state,
);
setState(() {});
Navigator.pop(context);
},
),
fullscreenDialog: true,
),
);
},
),
LinkedInButtonStandardWidget(
onTap: () {
setState(() {
authorizationCode = null;
logoutUser = true;
});
},
buttonText: 'Logout user',
),
Container(
margin: const EdgeInsets.symmetric(horizontal: 16),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Auth code: ${authorizationCode?.code} '),
Text('State: ${authorizationCode?.state} '),
],
),
),
],
);
}
}
class AuthCodeObject {
AuthCodeObject({required this.code, required this.state});
final String? code;
final String? state;
}
class UserObject {
UserObject({
required this.firstName,
required this.lastName,
required this.email,
required this.profileImageUrl,
});
final String? firstName;
final String? lastName;
final String? email;
final String? profileImageUrl;
}