Перенаправить пользователя в другой виджет с сохранением состояния после успешной аутентификации - PullRequest
0 голосов
/ 21 апреля 2020

Проведя бесчисленные часы, я наконец-то нашел правильное решение, при котором пользователь успешно проходит аутентификацию, как я вижу на idToken на firebase и на консоли. Однако пользователь не перенаправляется на другой виджет даже после написания в коде.

И как я могу получить доступ к сведениям пользователя о других классах?

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => MyApp();
}

class _MyAppState extends State<MyApp> {

  final GoogleSignIn _googleSignIn = GoogleSignIn(
    scopes: [
      'email',
    ],
    hostedDomain: '',
    clientId: '',
    );


  @override
  Widget build(BuildContext context) {
    return MaterialApp(
          home: _googleSignIn.isSignedIn() != null ? Home(): SignInScreen(),
      ),
    );
  }
}
class _SignInScreenState extends State<SignInScreen> {

  Future<void> _googleSignUo() async{
    try{
      final GoogleSignIn _googleSignIn = GoogleSignIn(
        scopes: [
          'email',
        ],
        hostedDomain: '',
        clientId: '',
      );
      final FirebaseAuth _auth = FirebaseAuth.instance;

      final GoogleSignInAccount googleSignInAccount = await _googleSignIn.signIn();
      final GoogleSignInAuthentication googleSignInAuthentication = await googleSignInAccount.authentication;

      final AuthCredential credential = GoogleAuthProvider.getCredential(
          idToken: googleSignInAuthentication.idToken,
          accessToken: googleSignInAuthentication.accessToken
      );

      final FirebaseUser user = (await (_auth.signInWithCredential(credential))) as FirebaseUser;

      Fluttertoast.showToast(
          msg: 'Signed in');
      return Home();
    }catch(e){
      print(e.message);
    }
  }
@override
  Widget build(BuildContext context) {
    return Scaffold(
      body: OutlineButton(
              padding: EdgeInsets.all(10.0),
              shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(18.0)),
              onPressed: ()=> {
                _googleSignUo()
            },
           child:Text('   Sign In with Google',
       style: TextStyle(
         fontSize: 20
       ),
      )
     );
    }
}
class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {

  final GoogleSignIn _googleSignIn = GoogleSignIn(
    scopes: [
      'email',
    ],
    hostedDomain: '',
    clientId: '',
  );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
body: Center(
        child: Column(
          children: <Widget>[
            RaisedButton(
              onPressed: (){
                _googleSignIn.signOut();
                Navigator.push(context, MaterialPageRoute(builder: (context)=>SignInScreen()));

              },
            ),
          ],
        )
      ),
 );
  }
}
...