两个 StreamProviders 和两个 DocumentSnapshots
Posted
技术标签:
【中文标题】两个 StreamProviders 和两个 DocumentSnapshots【英文标题】:Two StreamProviders and two DocumentSnapshots 【发布时间】:2021-10-17 19:57:15 【问题描述】:MultiProvider下有两个StreamProvider。
StreamProvider<DocumentSnapshot>(
create: (_) => GetUserInfoState().getUserDocSnap(),
initialData: null,
),
StreamProvider<DocumentSnapshot>(
create: (_) => InListViewModel().stream,
initialData: null,
),
如何区分这两种类型?
编辑:
body: Consumer2<DocumentSnapshot, ProfilePageViewModel>(
builder: (context, userInfo, model, child)
if (userInfo == null)
return CircularProgressIndicator();
else
String name = userInfo.get("name");
String city = userInfo.get("city");
String photo = userInfo.get("photo");
String email = userInfo.get("email");
Timestamp signUpdate = userInfo.get("signUpdate");
String phone = userInfo.get("phone");
String job = userInfo.get("job");
Timestamp birthDate = userInfo.get("birthDate");
int level = userInfo.get("level");
bool userverified = userInfo.get("userverified");
如果返回的类型不是 DocumentSnapshot,则 .get() 方法在这里不起作用。
【问题讨论】:
【参考方案1】:实现这一点的最简单方法可能是使用一个普通的提供者来保存一个具有多个流的对象。 但是,您必须不使用流提供程序的功能。
Provider<StreamHolder>(
create: (_) => StreamHolder(),
initialData: null,
),
与对象:
class StreamHolder
final Stream<DocumentSnapshot stream1 = GetUserInfoState().getUserDocSnap();
final Stream<DocumentSnapshot stream2 = InListViewModel().stream;
以及使用它:
StreamBuilder<DocumentSnapshot>(
initialData: ...,
stream: context.read<StreamHolder>().stream1,
builder: (context, snapshot)...,
)
如果你绝对想继续使用StreamProvider
的功能,你应该创建最多两个不同的类,这样两个流不再是同一类型,但至少有一个不是Stream<DocumentSnapshot>
.
【讨论】:
我照你说的做了。但我不能写 StreamHolder() 来创建方法。它给出了这个错误:返回类型'StreamHolder'不是'Stream以上是关于两个 StreamProviders 和两个 DocumentSnapshots的主要内容,如果未能解决你的问题,请参考以下文章
如何组合 2 个 Riverpod StreamProviders,其中 1 个流依赖于另一个流的数据?