flutter_login_widget/lib/plugins/login/login_social_buttons.dart
2022-09-21 10:03:08 +02:00

121 lines
4.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../../flutter_login_view.dart';
class LoginSocialButtons extends StatelessWidget {
const LoginSocialButtons({
required this.navigateRegistration,
required this.navigateLogin,
super.key,
});
final Function navigateRegistration;
final Function navigateLogin;
@override
Widget build(BuildContext context) {
var config = FlutterLogin.of(context).config;
var repository = context.loginRepository();
return Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: List.generate(
config.loginOptions.socialOptions.socialLogins.length,
(index) {
var method = config.loginOptions.socialOptions.socialLogins[index];
var padding = 0.0;
var sidePadding = MediaQuery.of(context).size.width / 4;
if (index <
config.loginOptions.socialOptions.socialLogins.length - 1) {
padding = 15;
}
return Container(
padding: EdgeInsets.only(
bottom: padding,
left: sidePadding,
right: sidePadding,
),
child: config.appTheme.buttons.secondaryButton(
context: context,
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 10,
horizontal: 10,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Icon(
_iconDataForSocial(method, context),
size: 24,
color: Theme.of(context).buttonTheme.colorScheme?.primary,
),
Expanded(
child: Padding(
padding: const EdgeInsets.only(left: 20),
child: Text(
context.translate(
method.toString(),
defaultValue: method
.toString()
.replaceAll('SocialLoginMethod.', ''),
),
textAlign: TextAlign.left,
style: Theme.of(context).textTheme.button!.copyWith(
fontSize: 16,
color: Theme.of(context)
.buttonTheme
.colorScheme
?.primary,
),
),
),
),
],
),
),
onPressed: () async {
var user = await repository.signInWithSocial(
SocialLoginBundle(
method: method,
interactionType: SocialInteractionType.Login,
),
);
var prefs = await SharedPreferences.getInstance();
await prefs.setBool('autoLogin', true);
if (user != null) {
if (await repository.isRegistrationRequired(user)) {
navigateRegistration();
} else {
navigateLogin();
}
}
},
),
);
},
),
);
}
IconData? _iconDataForSocial(SocialLoginMethod method, BuildContext context) {
switch (method) {
case SocialLoginMethod.Google:
return context.login().config.appTheme.icons.google;
case SocialLoginMethod.FaceBook:
return context.login().config.appTheme.icons.facebook;
case SocialLoginMethod.Apple:
return context.login().config.appTheme.icons.apple;
case SocialLoginMethod.LinkedIn:
return context.login().config.appTheme.icons.linkedIn;
case SocialLoginMethod.Microsoft:
return context.login().config.appTheme.icons.microsoft;
case SocialLoginMethod.Twitter:
return context.login().config.appTheme.icons.twitter;
case SocialLoginMethod.Custom:
return context.login().config.appTheme.icons.customSocial;
}
}
}