我提出了一个申请,您可以使用Facebook登录。
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => new _MyAppState();
}
class _MyAppState extends State<MyApp> {
static final FacebookLogin facebookSignIn = new FacebookLogin();
final FirebaseAuth _fAuth = FirebaseAuth.instance;
Future<FirebaseUser> _signIn(BuildContext context) async {
Scaffold.of(context).showSnackBar(new SnackBar(
content: new Text('Sign in button clicked'),
));
final FacebookLoginResult result =
await facebookSignIn.logInWithReadPermissions(['email']);
FirebaseUser user =
await _fAuth.signInWithFacebook(accessToken: result.accessToken.token);
ProviderDetails userInfo = new ProviderDetails(
user.providerId, user.uid, user.displayName, user.photoUrl, user.email);
List<ProviderDetails> providerData = new List<ProviderDetails>();
providerData.add(userInfo);
UserInfoDetails userInfoDetails = new UserInfoDetails(
user.providerId,
user.uid,
user.displayName,
user.photoUrl,
user.email,
user.isAnonymous,
user.isEmailVerified,
providerData);
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => new DetailedScreen(detailsUser: userInfoDetails),
),
);
return user;
}
Future<Null> _signOut(BuildContext context) async {
await facebookSignIn.logOut();
Scaffold.of(context).showSnackBar(new SnackBar(
content: new Text('Sign out button clicked'),
));
print('Signed out');
}
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new Scaffold(
appBar: new AppBar(
title: new Text('Fb Sign In with Firebase'),
),
body: new Builder(
builder: (BuildContext context) {
return new Center(
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new MaterialButton(
//padding: new EdgeInsets.all(16.0),
minWidth: 150.0,
onPressed: () => _signIn(context)
.then((FirebaseUser user) => print(user))
.catchError((e) => print(e)),
child: new Text('Sign in with Facebook'),
color: Colors.lightBlueAccent,
),
],
),
);
},
),
),
);
}
}
class UserInfoDetails {
UserInfoDetails(this.providerId, this.uid, this.displayName, this.photoUrl,
this.email, this.isAnonymous, this.isEmailVerified, this.providerData);
final String providerId;
final String uid;
final String displayName;
final String photoUrl;
final String email;
final bool isAnonymous;
final bool isEmailVerified;
final List<ProviderDetails> providerData;
}
class ProviderDetails {
final String providerId;
final String uid;
final String displayName;
final String photoUrl;
final String email;
ProviderDetails(
this.providerId, this.uid, this.displayName, this.photoUrl, this.email);}
但是在按下按钮后,会显示来自Facebook白色文本的警报对话框 您的程序将有权访问名称,电子邮件和其他公共信息。按钮继续显示为...按下此按钮后,什么也没发生,并写入控制台
I/flutter (17586): NoSuchMethodError: The getter 'token' was called on null.
I/flutter (17586): Receiver: null
I/flutter (17586): Tried calling: token
I/FirebaseAuth(17586): [FirebaseAuth:] Loading module via FirebaseOptions.
I/FirebaseAuth(17586): [FirebaseAuth:] Preparing to create service connection to gms implementation
我使用此命令来获取saha:
keytool -importkeystore -srckeystore C: \ Users \ admin \ .android \ debug.keystore -destkeystore C: \ Users \ admin \ .android \ debug.keystore -deststoretypetype PKCS12" .
非常感谢您的协助。
答案 0 :(得分:2)
这对我有用:
Future<User> signInWithFacebook() async {
final facebookLogin = FacebookLogin();
facebookLogin.loginBehavior = FacebookLoginBehavior.webViewOnly;
final result = await facebookLogin.logIn(['email', 'public_profile']);
}
我正在使用 flutter_facebook_login:^ 3.0.0