Провайдер Flutter не загружает пользовательский интерфейс входа после добавления провайдеров - PullRequest
0 голосов
/ 19 июня 2020

Мое приложение не может загрузить пользовательский интерфейс входа в систему, оно просто застряло при загрузке CircularProgressIndicator (): вот мой код поставщика кода. Когда я запускаю приложение, оно вообще не показывает ошибок, но затем приложение не загружает пользовательский интерфейс входа: main.dart

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  runApp(
    MultiProvider(
      providers: [
       ChangeNotifierProvider.value(value: UserProvider.initialize())

      ],
      child: MyApp(),
    ),
  );
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        debugShowCheckedModeBanner: false,
        title: 'AfriMarKet',
        theme: ThemeData(
          primaryColor: Colors.white
        ),
        home: ScreensController());
  }
}

class ScreensController extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final user = Provider.of<UserProvider>(context);
    switch (user.status) {
      case Status.Uninitialized:
        return SplashScreen();
      case Status.Unauthenticated:
      case Status.Authenticating:
        return LoginPage();
      case Status.Authenticated:
        return HomePage();
      default:
        return LoginPage();
    }
  }
}

provider.dart enum Status {Uninitialized, Authenticated, Authenticating, Unauthenticated}

class UserProvider extends ChangeNotifier{
  FirebaseAuth _auth;
  FirebaseUser _user;
  Status _status = Status.Uninitialized;
  Status get status => _status;
  FirebaseUser get user => _user;
  Firestore _firestore = Firestore.instance;
  UserServices _userServices = UserServices();


  UserProvider.initialize(): _auth = FirebaseAuth.instance{
    _auth.onAuthStateChanged.listen(_onStateChanged);
  }

  Future<bool> signIn(String email, String password)async{
    try{
      _status = Status.Authenticating;
      notifyListeners();
      await _auth.signInWithEmailAndPassword(email: email, password: password);
      return true;
    }catch(e){
      _status = Status.Unauthenticated;
      notifyListeners();
      print(e.toString());
      return false;
    }
  }


  Future<bool> signUp(String name,String email, String password)async{
    try{
      _status = Status.Authenticating;
      notifyListeners();
      await _auth.createUserWithEmailAndPassword(email: email, password: password).then((user){
        _firestore.collection('users').document(user.user.uid).setData({
          'name':name,
          'email':email,
          'uid':user.user.uid
        });
      });
      return true;
    }catch(e){
      _status = Status.Unauthenticated;
      notifyListeners();
      print(e.toString());
      return false;
    }
  }

  Future signOut()async{
    _auth.signOut();
    _status = Status.Unauthenticated;
    notifyListeners();
    return Future.delayed(Duration.zero);
  }



  Future<void> _onStateChanged(FirebaseUser user) async{
    if(user == null){
      _status = Status.Unauthenticated;
    }else{
      _user = user;
      _status = Status.Authenticated;
    }
    notifyListeners();
  }
}

1 Ответ

0 голосов
/ 20 июня 2020

Спасибо всем за помощь, я наконец понял это, проблема заключалась в том, что я добавил эту часть кода

Visibility(
                  child: Center(
                    child: Container(
                      alignment: Alignment.center,
                      color: Colors.white.withOpacity(0.9),
                      child: CircularProgressIndicator(
                        valueColor: AlwaysStoppedAnimation<Color>(Colors.red),
                      ),
                    ),
                  ),
                )

в качестве последнего виджета в моем эшафоте, и это вызвало все мои кошмары моего loginPage

...