Попытка получить доступ к экземпляру пользователя. Ошибка NoSuchMethod, когда виджет загружает email = null. вызов loggedInUser.email - PullRequest
0 голосов
/ 25 октября 2019

Я звоню по электронной почте пользователя Firebase, я хочу отобразить информацию о пользователе на экране. Когда виджет загружается, появляется ошибка NoSuchMethod и происходит сбой приложения. Не уверен, куда идти дальше

import 'package:flutter/material.dart';
import 'package:simmanager/constaints.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

class SettingScreen extends StatefulWidget {
  @override
  _SettingScreenState createState() => _SettingScreenState();
}

class _SettingScreenState extends State<SettingScreen> {
  final _auth = FirebaseAuth.instance;
  final _firestore = Firestore.instance;
  FirebaseUser loggedInUser;


  @override
  void initState() {
    getCurrentUser();
    super.initState();
  }

  void getCurrentUser() async {
    try {
      final user = await _auth.currentUser();
      if (user != null) {
        loggedInUser = user;
      }
    } catch (e) {
      print(e);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Settings'),
        backgroundColor: primaryColor,
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {},
        child: Icon(
          Icons.edit,
          color: Colors.black,
        ),
        backgroundColor: secondaryColor,
      ),
      body: SafeArea(
        child: Container(
          color: backgroundColor,
          child: Column(
            children: <Widget>[
              Center(
                child: Container(
                  margin: EdgeInsets.only(top: 20.0),
                  child: Icon(
                    Icons.account_circle,
                    size: 75.0,
                    color: primaryLight,
                  ),
                ),
              ),
              Padding(
                padding: const EdgeInsets.all(10.0),
                child: Container(
                  decoration: BoxDecoration(
                    color: Colors.white,
                    boxShadow: [
                      BoxShadow(
                        blurRadius: 5.0,
                        color: Colors.grey[300],
                        spreadRadius: 5.0,
                      ),
                    ],
                    borderRadius: BorderRadius.circular(20.0),
                  ),
                  padding: EdgeInsets.all(25.0),
                  child: Row(
                    children: <Widget>[
                      Container(
                        child: Text(
                          'Name: ',
                          style: TextStyle(fontSize: 16.0),
                        ),
                      ),
                      // TODO: add stream for user details
                      Container(
                        child: Text('Test'),
                      ),
                    ],
                  ),
                ),
              ),
              Padding(
                padding: const EdgeInsets.all(10.0),
                child: Container(
                  decoration: BoxDecoration(
                    color: Colors.white,
                    boxShadow: [
                      BoxShadow(
                        blurRadius: 5.0,
                        color: Colors.grey[300],
                        spreadRadius: 5.0,
                      ),
                    ],
                    borderRadius: BorderRadius.circular(20.0),
                  ),
                  padding: EdgeInsets.all(25.0),
                  child: Row(
                    children: <Widget>[
                      Container(
                        child: Text(
                          'Email: ',
                          style: TextStyle(fontSize: 16.0),
                        ),
                      ),
                      // TODO: add stream for user details
                      Container(
                        child: Text(loggedInUser.email),
                      ),
                    ],
                  ),
                ),
              ),

Следующее NoSuchMethodError было сгенерировано при создании SettingScreen (dirty, state: _SettingScreenState # b9d92): получатель 'email' был вызван для null. Получатель: null Пробный вызов: электронная почта

1 Ответ

0 голосов
/ 25 октября 2019

Я тоже прошел через это. Мне удалось исправить ошибку, изменив позицию объявления auth.currentUser (). Возможно, вы создали свой Auth auth внутри StatelessWidget.

Попробуйте переместить экземпляр Auth из StatelessWidget в ваше состояние, прямо перед вашим void initState ().

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