【问题标题】:Flutter accessing a local variable from statefulwidgetFlutter 从 statefulwidget 访问局部变量
【发布时间】:2020-03-24 02:05:27
【问题描述】:

到目前为止,我正在构建一个具有登录页面和主页的应用程序。我可以使用 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,),
                  ),
                ),

here is the output for the code in my drawer

【问题讨论】:

    标签: firebase flutter dart firebase-authentication navigation-drawer


    【解决方案1】:

    user = authResult.user 应该在对setState() 的调用中。

    所以:

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

    如果小部件不知道/何时user 已更改,则不知道何时重新绘制。

    【讨论】:

    • 这当然解决了我的问题。
    猜你喜欢
    • 2021-02-19
    • 2022-01-21
    • 2020-06-11
    • 2021-05-16
    • 2018-12-24
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多