错误:_elements.contains(element)不正确

问题描述 投票:0回答:1

我仅将Firebase Auth电子邮件和密码]一起使用>。登录该应用程序后,抽屉可以正常工作,但是当我单击一个抽屉项目时,再次打开该应用程序(我正在使用Firebase方法currentUser使用无声登录-或自动登录-),第二页没有错误打开,但是当我回到首页时,该应用会引发此错误:

[APP]:

https://scontent.fbau1-1.fna.fbcdn.net/v/t1.0-9/57251227_2177328588988443_6958567508873838592_n.jpg?_nc_cat=110&_nc_ht=scontent.fbau1-1.fna&oh=c2d1d1ade45868bec6e691ca59ab0f16&oe=5D696DE3

[DEBUG CONSOLE]:

https://scontent.fbau1-1.fna.fbcdn.net/v/t1.0-9/58374272_2177338388987463_5540408808548859904_o.jpg?_nc_cat=111&_nc_ht=scontent.fbau1-1.fna&oh=3825f264dadd1df0005be42a59d07cb5&oe=5D71762D

main.dart

home: FutureBuilder<FirebaseUser>(
          future: _auth.getCurrentUser(),
          builder: (context, snapshot) {
            switch (snapshot.connectionState) {
              case ConnectionState.none:
              case ConnectionState.waiting:
                return Container(
                  child: Loading.load,
                  color: Colors.white,
                );
              default:
                if (snapshot.hasError)
                  return Text('Erro: ${snapshot.error}');
                else if (snapshot.data == null)
                  return PageLogin(
                    auth: Auth(),
                  );
                else
                  return PageHome();
            }
          },
        ));

auth.dart

class Auth implements BaseAuth {
  final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
  static FirebaseUser _user;

  Future<FirebaseUser> getCurrentUser() async {
    if (_user == null) {
      _user = await _firebaseAuth.currentUser();
    }

    await loadUserAccess();

    return _user;
  }

}

page_home.dart

class PageHome extends StatelessWidget {
  final _scaffoldKey = new GlobalKey<ScaffoldState>();
  final Auth auth = Auth();

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<bool>(
      future: _loadConnections(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) {
          return Container(
            child: Loading.load,
            color: Colors.white,
          );
        } else {
          return Scaffold(
            key: _scaffoldKey,
            drawer: Drawer(
                child: ListView(
                    padding: EdgeInsets.zero,
                    children: _drawerListItens(context))),
            appBar: AppBar(
              title: Text("Title"),
            body: Container(),
          );
        }
      },
    );
  }

Future<bool> _loadConnections() async {
    try {
      if (FirebaseUtil.fbRef() == null) {
        await FirebaseUtil.loadReference();
      }

      //SQLite reference
      await DBProvider.db.database;

      if (!auth.userIsAdmin()) {
        //check if user is admin
        await auth.loadUserAccess();
      }
      return true;
    } catch (e) {
      return false;
    }
  }



List<Widget> _drawerListItens(context) {
    List<Widget> _drawerItens = List<Widget>();

    _drawerItens.addAll([
      ListTile(
        title: Text("Second Page"),
        onTap: () {
          Navigator.of(context).push(MaterialPageRoute(
              builder: (BuildContext context) =>
                  SecondPage(String someData)));
        },
      ),
   ]);

   return _drawerItens;

}



}

我仅将Firebase Auth与电子邮件和密码一起使用。登录该应用程序后,抽屉可以正常工作,但要再次打开该应用程序,(我正在使用无声登录-或使用Firebase方法自动登录-...

firebase dart flutter firebase-authentication
1个回答
0
投票

重复键会导致此错误。在我的应用中,正是Scaffold的key导致了此错误。如果您为Scaffold和AppBar使用基类,则从调用基类的类中传递键。例如

Class BaseScaffold{
final GlobalKey<ScaffoldState> _scaffoldKey;
BaseScaffold(this._scaffoldKey);
Widget build(BuildContext context) {
return Scaffold(

key : _scaffoldKey
...
);
}
}

Class B extends StatelessWidget{
    final _scaffoldKey = GlobalKey<ScaffoldState>();
    Widget build(BuildContext context) {
return BaseScaffold(
 key: _scaffoldKey
 ...
);
}
}
© www.soinside.com 2019 - 2024. All rights reserved.