【问题标题】:Importing Data from another class to Stateful Widget将数据从另一个类导入到 Stateful Widget
【发布时间】:2020-08-02 14:28:37
【问题描述】:

我在一个屏幕上对用户进行身份验证,然后将他们推送到另一个屏幕,但在另一个屏幕上,该变量不可访问,其中包含我通过变量传递的用户详细信息。 detailsUser 在 Home() 中不可访问;即使我已经提到要推送另一页。它会进行身份验证,不会将我带到另一个屏幕。

class SignInScreen extends StatefulWidget {
  @override
  _SignInScreenState createState() => _SignInScreenState();
}

class _SignInScreenState extends State<SignInScreen> {

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

  Future<FirebaseUser> _signIn(BuildContext context) async{
    Fluttertoast.showToast(
        msg: 'Signed In'
    );

    final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
    final GoogleSignInAuthentication googleAuth = await googleUser.authentication;

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

    FirebaseUser userDetails = (await _firebaseAuth.signInWithCredential(credential)) as FirebaseUser;
    ProviderDetails providerInfo = new ProviderDetails(userDetails.providerId);

    List<ProviderDetails> providerData = List <ProviderDetails>();
    providerData.add(providerInfo);

    UserDetails details = UserDetails(
      userDetails.providerId,
      userDetails.displayName,
      userDetails.photoUrl,
      userDetails.email,
      providerData);

    Navigator.push(context, MaterialPageRoute(builder: (context) => ThemeConsumer(child: Home(detailsUser: details))));

    return userDetails;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold();
class Home extends StatefulWidget {
  final UserDetails detailsUser;

  Home({Key key, @required this.detailsUser}) : super(key: key);

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

class _HomeState extends State<Home> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
     body: Center(
     child: Text(
     detailsUser.username //detailsUser is not accessible here, why?
)));

【问题讨论】:

  • 使用这个“widget.detailsUser.username”而不是“detailsUser.username”
  • @PatelPinkal 谢谢,它工作。我已经用另一个问题更新了问题。你能看一下吗?
  • 直接使用 Home 而不是“ThemeConsumer”。喜欢:Navigator.push(context, MaterialPageRoute(builder: (context) => Home(detailsUser: details)));
  • @PatelPinkal 你为什么不发布答案?
  • @PatelPinkal 试过了。还是一样。它进行身份验证并保持在同一屏幕上。

标签: flutter dart flutter-layout google-signin


【解决方案1】:

要从该小部件的 State class 中访问 Widget 字段,您可以使用 widget.fieldName(正如 Patel Pinkal 评论的那样)

这里有一个link 来更熟悉 Flutter 中的小部件

【讨论】:

    【解决方案2】:

    正如 Patel Pinkal 在 cmets 中所说:

    Use this "widget.detailsUser.username" 
    

    而不是

    "detailsUser.username"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-26
      • 2021-06-08
      • 2011-12-28
      • 2021-02-20
      • 2019-07-08
      • 1970-01-01
      • 2023-01-24
      • 1970-01-01
      相关资源
      最近更新 更多