у меня возникли проблемы с навигацией по лесам или экранам - PullRequest
1 голос
/ 08 апреля 2020
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import './newauth.dart';

void main() {
  runApp(Welcome());
}

var occupied;
var setter;

class Welcome extends StatefulWidget {
  @override
  _WelcomeState createState() => _WelcomeState();
}

class _WelcomeState extends State<Welcome> {

  getVisitingFlagsignin() async{
  SharedPreferences preferences = await SharedPreferences.getInstance();


  setState(() {
    occupied = preferences.getBool("alreadyVisited");
    print(occupied);
  });
  }

  @override
  Widget build(BuildContext context) {
    Scaffold loginScaffold = new Scaffold(
      appBar: AppBar(
        title: Text('LOGIN'),
        backgroundColor: Colors.orange[700],
      ),
      body: Center(
        child: Container(
          margin: EdgeInsets.all(15),
          child: Column(
            children: <Widget>[
              Image.asset('assets/applogo.png'),
              Padding(
                padding: const EdgeInsets.all(40.0),
                child: SizedBox(
                  width: 152,
                  child: RaisedButton(
                      shape: RoundedRectangleBorder(
                          borderRadius: BorderRadius.circular(50)),
                      child: Row(
                        children: <Widget>[
                          Image.asset(
                            'assets/Glogo.png',
                            height: 30,
                          ),
                          Padding(
                            padding: const EdgeInsets.all(15.0),
                            child: Text(
                              'Login',
                              style: TextStyle(
                                  fontSize: 15, fontFamily: 'Michroma'),
                            ),
                          ),
                        ],
                      ),
                      onPressed: () {
                        handleSignIn(); 
                      }),
                ),
              )
            ],
          ),
        ),
      ),
    );

Вот где я называю свои леса. Моя проблема заключается в том, что когда нажимается логин масла, я вызываю функцию входа в Google из моего другого файла дротика, который основан на документации флаттера, и там мало что изменилось. я могу успешно войти в систему и инициализировать состояние приложения, если уже есть пользователь, вошедший в систему. когда нажата кнопка входа в систему, я врезаюсь в стену о том, как вызвать другой эшафот и, возможно, передать ему некоторые данные.

    Scaffold hompagescaffold = new Scaffold(
      appBar: AppBar(
        title: Text('Homepage'),
      ),
      body: RaisedButton(child: Text('signout'),onPressed: (){signOutGoogle();},),
    );
    return new MaterialApp(home: occupied == true ? hompagescaffold:loginScaffold);

  }

    void initState() {
    super.initState();
    getVisitingFlagsignin();
  }
}

это мой файл auth.dart. поэтому, когда нажимается кнопка входа, вызывается функция входа в систему, затем запускается весь необходимый вход в Google, и запускается аутентификация firebase, и после этого вызывается общая настройка, чтобы установить для моей логической настройки значение true. Следующее, что я хочу сделать, это вызвать мой эшафот домашней страницы, чтобы он заменил логинсаффолд.

import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:shared_preferences/shared_preferences.dart';

final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn _googleSignIn = GoogleSignIn();

setVisitingFlagsignin() async{
SharedPreferences preferences = await SharedPreferences.getInstance();
preferences.setBool("alreadyVisited", true);
print(preferences.getBool("alreadyVisited"));
}

Future<FirebaseUser> handleSignIn() async {
  final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
  final GoogleSignInAuthentication googleAuth = await googleUser.authentication;

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

  final FirebaseUser user = (await _auth.signInWithCredential(credential)).user;
  print("signed in " + user.displayName);

  setVisitingFlagsignin();

  return user;

}





setVisitingFlagsignout() async{
  SharedPreferences preferences = await SharedPreferences.getInstance();
  await preferences.setBool("alreadyVisited", false);
  print (preferences.getBool("alreadyVisited"));
  }

void signOutGoogle() async{
  await _googleSignIn.signOut();
  print ('User has signed out');
  setVisitingFlagsignout();
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...