Я столкнулся с проблемой разработки основной функции во Flutter - PullRequest
0 голосов
/ 06 августа 2020

Мое требование состоит в том, что, если идентификатор документа существует в Firestore, он вернет домашнюю страницу; иначе, если он не существует, он вернет страницу проверки.

Моя проблема в том, что если do c существует, то домашняя страница отображается правильно, но, когда do c не существует, затем он должен вернуть страницу подтверждения, как описано выше; в этом случае он появляется, но всякий раз, когда я нажимаю кнопку «Назад», он снова возвращает домашнюю страницу.

Ниже мой код:

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  var globalNumber;
  var Number;
  Firestore firestore = Firestore.instance;
  var x;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    getCurrentUser();
     x = Future.wait([
      firestore.collection('users').document(globalNumber).get()
    ]);



  }

  @override
  Widget build(BuildContext context) {
    print(globalNumber);
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: StreamBuilder<Object>(
        stream: FirebaseAuth.instance.onAuthStateChanged,
          builder: (BuildContext context, snapshot) {
            if (snapshot.hasData) {
              return FutureBuilder(
                  future: x,
                  builder: (BuildContext context,
                      AsyncSnapshot<List> snapshot) {

                      if(snapshot.hasData){
                        DocumentSnapshot doc = snapshot.data[0];
                        print(doc);
                      if (doc.exists || doc != null) {
                        return HomePage();
                      }
                      else  {
                        return AccountDetialsPage();
                      }

                      }
                      else{
                        return Container(child: Text('Loading...'),);
                      }

                  }
              );
            } else {
              return Phoneverification();
            }
          }),
    ) ;
  }

  getCurrentUser() async{

    final FirebaseAuth _auth = FirebaseAuth.instance;
    final FirebaseUser user = await _auth.currentUser();
    final uid = user.uid;
    globalNumber = user.phoneNumber;

    // Similarly we can get email as well
    //final uemail = user.email;


  }

}

Скажем, в приведенном ниже примере идентификатор документа не существует, то он возвращает страницу подтверждения учетной записи, как ожидалось. Но когда я нажимаю кнопку «Назад», он возвращается на домашнюю страницу ...

Я не знаю, почему это происходит.

enter image description here

After hitting back:

введите описание изображения здесь

...