Flutter доступ к локальной переменной из statefulwidget - PullRequest
0 голосов
/ 24 марта 2020

Я создаю приложение, которое пока имеет страницу входа и домашнюю страницу. Я могу войти с помощью Google и может быть перенаправлен на текущую страницу (домашнюю страницу). У меня есть отображаемое имя и адрес электронной почты, которые выводятся на странице входа. Я хочу использовать эти данные для отображения в моем ящике. Есть ли способ получить доступ к этим переменным со страницы входа в систему и использовать их также на главной странице.

Вот моя функция входа в Google.

Future  <String> signInWithGoogle() async {
  final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
  final GoogleSignInAuthentication googleSignInAuthentication = await googleSignInAccount.authentication;
  final AuthCredential credential = GoogleAuthProvider.getCredential(accessToken: googleSignInAuthentication.accessToken, idToken: googleSignInAuthentication.idToken,);
  final AuthResult authResult = await _auth.signInWithCredential(credential);
  final FirebaseUser user = authResult.user;

  assert(!user.isAnonymous);
  assert(await user.getIdToken() != null);

  final FirebaseUser currentUser = await _auth.currentUser();
  assert(user.uid == currentUser.uid);
  print("signed in " + user.displayName);
  print("signed in " + user.email);
  return 'signInWithGoogle succeeded: $user';
}

Я вошел в систему с помощью Gmail. и получил вывод как.

I/flutter (15019): signed in Shero thehero
I/flutter (15019): signed in aakashsrh@gmail.com

Вот код моей домашней страницы.

class Homepage extends StatefulWidget {

  TextEditingController _searchController =TextEditingController();
  Future signOutGoogle() async{
    await googleSignIn.signOut();
    print("User Sign Out");
  }

  @override
  _HomepageState createState() => _HomepageState();
}

class _HomepageState extends State<Homepage> {
  TextEditingController _searchController =TextEditingController();
  @override
  void initState() {
    super.initState();
      }

в то время как в приложении я получаю вывод NULL, в то время как я запускаю следующий код.

new UserAccountsDrawerHeader(
                accountName: Text("${user?.displayName}"),
                accountEmail: Text('user?.email'),
                currentAccountPicture: GestureDetector(
                  child:new CircleAvatar(
                    backgroundColor: Colors.blueGrey,
                    child: Icon(Icons.person,color: Colors.white,),
                  ),
                ),

вот вывод для кода в моем ящике

1 Ответ

0 голосов
/ 24 марта 2020

user = authResult.user должен вызывать setState().

Итак:

setState((){
    user = authResult.user
})

Без этого виджет не знает, что / когда user изменилось , поэтому не знает, когда перекрасить.

...