easy_linkedin_login 1.0.3
easy_linkedin_login: ^1.0.3 copied to clipboard
Library for login with LinkedIn OAuth V2 service. This library helps you to implement authorization with LinkedIn OAuth API's.
import 'package:easy_linkedin_login/easy_linkedin_login.dart';
import 'package:flutter/material.dart';
// ignore_for_file: avoid_print
void main() => runApp(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 {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter LinkedIn demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: DefaultTabController(
length: 2,
child: Scaffold(
appBar: AppBar(
bottom: TabBar(
tabs: [
Tab(
icon: Icon(Icons.person),
text: 'Profile',
),
Tab(icon: Icon(Icons.text_fields), text: 'Auth code')
],
),
title: Text('LinkedIn Authorization'),
),
body: TabBarView(
children: [
LinkedInProfileExamplePage(),
LinkedInAuthCodeExamplePage(),
],
),
),
),
);
}
}
class LinkedInProfileExamplePage extends StatefulWidget {
@override
State createState() => _LinkedInProfileExamplePageState();
}
class _LinkedInProfileExamplePageState
extends State<LinkedInProfileExamplePage> {
UserObject? user;
bool logoutUser = false;
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
LinkedInButtonStandardWidget(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => LinkedInUserWidget(
appBar: AppBar(
title: Text('OAuth User'),
),
destroySession: logoutUser,
redirectUrl: redirectUrl,
clientId: clientId,
clientSecret: clientSecret,
projection: [
ProjectionParameters.id,
ProjectionParameters.localizedFirstName,
ProjectionParameters.localizedLastName,
ProjectionParameters.firstName,
ProjectionParameters.lastName,
ProjectionParameters.profilePicture,
],
onError: (UserFailedAction e) {
print('Error: ${e.toString()}');
print('Error: ${e.stackTrace.toString()}');
},
onGetUserProfile: (UserSucceededAction linkedInUser) {
print(
'Access token ${linkedInUser.user.token.accessToken!}');
print('User id: ${linkedInUser.user.userId}');
user = UserObject(
firstName:
linkedInUser.user.firstName!.localized!.label!,
lastName: linkedInUser.user.lastName!.localized!.label!,
email: linkedInUser
.user.email!.elements![0].handleDeep!.emailAddress!,
profileImageUrl: linkedInUser
.user
.profilePicture!
.displayImageContent!
.elements![0]
.identifiers![0]
.identifier!,
);
setState(() {
logoutUser = false;
});
Navigator.pop(context);
},
),
fullscreenDialog: true,
),
);
},
),
LinkedInButtonStandardWidget(
onTap: () {
setState(() {
user = null;
logoutUser = true;
});
},
buttonText: 'Logout',
),
Column(
mainAxisSize: MainAxisSize.max,
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 {
@override
State createState() => _LinkedInAuthCodeExamplePageState();
}
class _LinkedInAuthCodeExamplePageState
extends State<LinkedInAuthCodeExamplePage> {
AuthCodeObject? authorizationCode;
bool logoutUser = false;
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
LinkedInButtonStandardWidget(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => LinkedInAuthCodeWidget(
destroySession: logoutUser,
redirectUrl: redirectUrl,
clientId: clientId,
onError: (AuthorizationFailedAction e) {
print('Error: ${e.toString()}');
print('Error: ${e.stackTrace.toString()}');
},
onGetAuthCode: (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: EdgeInsets.symmetric(horizontal: 16),
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Auth code: ${authorizationCode!.code} '),
Text('State: ${authorizationCode!.state} '),
],
),
),
],
);
}
}
class AuthCodeObject {
AuthCodeObject({required this.code, required this.state});
String code, state;
}
class UserObject {
UserObject(
{required this.firstName,
required this.lastName,
required this.email,
required this.profileImageUrl});
String firstName, lastName, email, profileImageUrl;
}