两个 StreamProvider 和两个 DocumentSnapshot
Two StreamProviders and two DocumentSnapshots
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()方法在这里不起作用。
完成此操作的最简单方法可能是使用一个包含多个流的对象的普通提供程序。
但是你必须没有流提供者的功能。
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>
.
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()方法在这里不起作用。
完成此操作的最简单方法可能是使用一个包含多个流的对象的普通提供程序。 但是你必须没有流提供者的功能。
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>
.