Flutter 根据 FireStore 数据字段显示单独的页面

Posted

技术标签:

【中文标题】Flutter 根据 FireStore 数据字段显示单独的页面【英文标题】:Flutter Show Separate page based on FireStore data field 【发布时间】:2021-01-29 03:56:24 【问题描述】:

我有一个基本的应用程序,我使用电子邮件登录和注册来登录应用程序。我使用提供者,我正在根据用户当前状态推送到登录页面或主页。

当用户登录时,我想将他重定向到一个新屏幕(信息页面),他必须在其中填写一些其他数据,这些数据将作为他的 UID 保存在 Firestore 中的一个文档下。 (这些额外的数据只是地址/姓名/电话.. bla bla)

但是,如果用户退出并再次登录,他不应该被重定向到信息页面,因为他已经提交了该数据。

如果用户没有将数据提交到信息页面,我如何重定向他,如果他有,我如何将他发送到主页?

这是我的带有 Provider 和 HomeController 的代码

@override
  Widget build(BuildContext context) 
    return Provider(
      auth: AuthService(),
      db: FirebaseFirestore.instance,
      child: MaterialApp(
          theme: ThemeData(
            primaryColor: Colors.lightGreen[300],
            primaryColorDark: Colors.amber,
            errorColor: Colors.amber,
            hintColor: Colors.grey
          ),
          title: "Farmline.LK",
          home: HomeController(),
          routes: <String, WidgetBuilder>
            '/home': (BuildContext context) => HomeController(),
            '/signUp': (BuildContext context) => FirstView(),
          ),
    );
  

class HomeController extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    final AuthService auth = Provider.of(context).auth;
    return StreamBuilder<String>(
      stream: auth.onAuthStateChanged,
      builder: (context, AsyncSnapshot<String> snapshot) 
        if (snapshot.connectionState == ConnectionState.active) 
          final bool signedIn = snapshot.hasData;
          return signedIn ? Home() : FirstView();
        
        return Container();
      ,
    );
  

非常感谢您的支持!

【问题讨论】:

在构建器方法中扩展您的登录。请看一下这个例子:解决方案 1 ***.com/questions/45353730/… 我已经有一个工作状态管理系统。这并不能帮助我从 firestore 获取更多信息并重定向到另一个页面... 【参考方案1】:

将你当前的逻辑扩展成这样:

return StreamBuilder<String>(
  stream: auth.onAuthStateChanged,
  builder: (context, AsyncSnapshot<String> snapshot) 
    if (snapshot.connectionState == ConnectionState.active) 
      if (snahpshot.hasData) 
          var user = snapshot.data;
          if (user.name == null || user.phone == null ...) 
             return FirstView();
           
          return Home();
      
      return Container();
    
  ,
);

【讨论】:

以上是关于Flutter 根据 FireStore 数据字段显示单独的页面的主要内容,如果未能解决你的问题,请参考以下文章

如何从flutter中的firestore文档字段中获取数据?

当在文本字段中输入字段中的数据时,Flutter Firestore 显示文档 ID

如何使用flutter更新firestore中所有文档的单个字段?

如何在 Flutter 中加入来自两个 Firestore 集合的数据?

无法从 Firestore 文档中删除字段 (Flutter)

使用 Flutter 将表单上传到 Firestore