Импорт данных из другого класса в Stateful Widget - PullRequest
0 голосов
/ 20 апреля 2020

Я аутентифицирую пользователя на одном экране, затем выдвигаю его на другой экран, но на другом экране переменная недоступна, которая содержит сведения о пользователе, которые я передал через переменную. detailsUser недоступен в доме (); и хотя я упомянул pu sh на другой странице. Он аутентифицирует и не выводит меня на другой экран.

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?
)));

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Как сказал Патель Пинкал в комментариях:

Use this "widget.detailsUser.username" 

вместо

"detailsUser.username"
1 голос
/ 20 апреля 2020

Чтобы получить доступ к полям Widget из State class этого виджета, вы можете использовать widget.fieldName (как прокомментировал Патель Пинкал)

здесь есть ссылка для получения больше знакомы с виджетами во флаттере

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