Issue
I am developing a Bluetooth application using platform channel in flutter (using Java). But while I try to login with google-sign in( google_sign_in: ^4.5.6 ) I'm getting the error. I can login the details but I can't move to further page...... Actually, it's working in my office system, but when I copy the project and run in another it gives the error...Can anyone please help
main.dart
import 'package:bmsapp2/pages/loginpage.dart';
import 'package:flutter/material.dart';
void main() {
runApp(BmsApp());
}
class BmsApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
const curveHeight = 12.0;
return MaterialApp(
home: SafeArea(
child: Scaffold(
appBar: AppBar(
backgroundColor: Colors.amber[900],
shape: const MyShapeBorder(curveHeight),
),
body: LoginPage(),
),
),
);
}
}
class MyShapeBorder extends ContinuousRectangleBorder {
const MyShapeBorder(this.curveHeight);
final double curveHeight;
@override
Path getOuterPath(Rect rect, {TextDirection textDirection}) => Path()
..lineTo(0, rect.size.height)
..quadraticBezierTo(
rect.size.width / 2,
rect.size.height + curveHeight * 2,
rect.size.width,
rect.size.height,
)
..lineTo(rect.size.width, 0)
..close();
}
loginpage.dart
import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:avatar_glow/avatar_glow.dart';
import 'bluetoothpage.dart';
final GoogleSignIn googleSignIn = GoogleSignIn(scopes: ['profile', 'email']);
class LoginPage extends StatefulWidget {
LoginPage({Key key}) : super(key: key);
@override
_LoginPageState createState() => _LoginPageState();
}
class _LoginPageState extends State<LoginPage> {
bool isAuth = false;
GoogleSignInAccount _currentUser;
Widget buildAuthScreen() {
//return Text(_currentUser.displayName ?? '');
return SafeArea(
child: Center(
child: Container(
margin: EdgeInsets.only(top: 50),
child: Column(
//mainAxisAlignment: MainAxisAlignment.center,
children: [
CircleAvatar(
backgroundColor: Colors.white,
backgroundImage: NetworkImage(_currentUser.photoUrl),
radius: 50,
),
SizedBox(height: 15),
Text(
'You are logged in as ',
style: TextStyle(
color: Colors.grey,
fontSize: 15,
),
),
SizedBox(height: 5),
Text(
_currentUser.email,
style: TextStyle(
color: Colors.black,
fontSize: 15,
fontWeight: FontWeight.bold,
),
),
ElevatedButton(
onPressed: _logout,
child: Text("Logout".toUpperCase(),
style: TextStyle(fontSize: 14, letterSpacing: 2)),
style: ButtonStyle(
foregroundColor:
MaterialStateProperty.all<Color>(Colors.white),
backgroundColor:
MaterialStateProperty.all<Color>(Colors.amber[900]),
shape: MaterialStateProperty.all<RoundedRectangleBorder>(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5),
side: BorderSide(color: Colors.amber[900])))),
),
Container(
// height: 300,
child: AvatarGlow(
glowColor: Colors.blue,
endRadius: 70.0,
duration: Duration(milliseconds: 2000),
repeat: true,
showTwoGlows: true,
repeatPauseDuration: Duration(milliseconds: 100),
child: Material(
elevation: 4.0,
shape: CircleBorder(),
child: CircleAvatar(
backgroundColor: Colors.grey[200],
child: Image.asset(
'images/bt.png',
height: 40,
width: 250,
fit: BoxFit.fitWidth,
),
radius: 40.0,
),
),
),
),
ElevatedButton(
onPressed: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => BluetoothPage()));
},
child: Text('Find your device',
style: TextStyle(fontSize: 15, letterSpacing: 2)),
style: ButtonStyle(
foregroundColor:
MaterialStateProperty.all<Color>(Colors.white),
backgroundColor:
MaterialStateProperty.all<Color>(Colors.amber[900]),
shape: MaterialStateProperty.all<RoundedRectangleBorder>(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5),
side: BorderSide(color: Colors.amber[900])))),
),
],
),
),
),
);
}
_login() {
googleSignIn.signIn();
}
_logout() {
googleSignIn.signOut();
}
Widget buildUnAuthScreen() {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
child: Image.asset('images/touch.png'),
),
SizedBox(
height: 5.0,
),
Text(
'Next Generation Battery',
style: TextStyle(fontSize: 15, color: Colors.grey),
),
SizedBox(
height: 5.0,
),
Container(
child: GestureDetector(
onTap: () {
_login();
},
child: Image.asset(
'images/signin.png',
height: 75,
width: 250,
fit: BoxFit.fitWidth,
),
),
),
Text(
'Sign up here',
style: TextStyle(fontSize: 15, color: Colors.grey),
),
],
),
));
}
void handleSignin(GoogleSignInAccount account) {
if (account != null) {
print('User Signed in $account');
setState(() {
isAuth = true;
_currentUser = account;
});
} else {
setState(() {
isAuth = false;
//_currentUser = null;
});
}
}
@override
void initState() {
super.initState();
googleSignIn.onCurrentUserChanged.listen((GoogleSignInAccount account) {
handleSignin(account);
}, onError: (err) {
print('Error Signiing in : $err');
});
// Reauthenticate user when app is opened
/*googleSignIn.signInSilently(suppressErrors: false).then((account) {
handleSignin(account);
}).catchError((err) {
print('Error Signiing in : $err');
});*/
}
@override
Widget build(BuildContext context) {
return isAuth ? buildAuthScreen() : buildUnAuthScreen();
}
}
error:
E/flutter (12476): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)
E/flutter (12476): #0 StandardMethodCodec.decodeEnvelope
package:flutter/…/services/message_codecs.dart:581
E/flutter (12476): #1 MethodChannel._invokeMethod
package:flutter/…/services/platform_channel.dart:158
E/flutter (12476): <asynchronous suspension>
E/flutter (12476): #2 MethodChannel.invokeMapMethod
package:flutter/…/services/platform_channel.dart:358
E/flutter (12476): <asynchronous suspension>
E/flutter (12476):
D/ViewRootImpl@4370975[SignInHubActivity](12476): mHardwareRenderer.destroy()#1
D/ViewRootImpl@4370975[SignInHubActivity](12476): Relayout returned: oldFrame=[0,0][1440,2560] newFrame=[0,0][1440,2560] result=0x5 surface={isValid=false 0} surfaceGenerationChanged=true
D/ViewRootImpl@4370975[SignInHubActivity](12476): mHardwareRenderer.destroy()#4
D/ViewRootImpl@4370975[SignInHubActivity](12476): dispatchDetachedFromWindow
D/InputTransport(12476): Input channel destroyed: fd=102
Solution
[ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)
apiException:10 means it's most likely due to incorrect setup of SHA-1 or SHA-256. Since you said that it works at the office, it's probably a different environment than what you are working with now, and you should add these keys. This is also assuming that you are running a debug build, so add your debugging SHA-1 keys.
Answered By - Huthaifa Muayyad
Answer Checked By - Senaida (JavaFixing Volunteer)