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 集合的数据?