我有3个嵌套的streambuilder,除了第3个streambuilder之外,其他一切都工作正常,打印时我在控制台上获取了正确的数据,但是我在Text小部件上没有获取正确的数据,并且正在“加载”文本,只有一部分是一直被执行。以下是我的代码,附件是我在手机上获得的结果的屏幕截图。
我不确定我做错了什么。
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
Widget _buildAskOf() {
return Padding(
padding: EdgeInsets.all(ScreenUtil().setWidth(20)),
child: Container(
width: double.infinity,
decoration: BoxDecoration(
color: AllColors().whiteColor,
borderRadius: BorderRadius.circular(7.0),
border: Border.all(color: Colors.grey)),
child: StreamBuilder<List<String>>(
stream: _provider.askCreatorStream,
builder: (context, snapshotAskOf) {
if (snapshotAskOf.hasData) {
return StreamBuilder<String>(
stream: _provider.askOfStream,
builder: (context, snapshotSelectedAsk) {
return DropdownButtonHideUnderline(
child: Padding(
padding: EdgeInsets.symmetric(
vertical: ScreenUtil().setWidth(10),
),
child: DropdownButton<String>(
hint: Padding(
padding: EdgeInsets.only(
left: ScreenUtil().setWidth(30),
),
child: Text(
"Ask of",
style: TextStyle(
//color: Colors.black,
fontSize: ScreenUtil().setSp(50),
),
),
),
value: snapshotSelectedAsk.data,
items: snapshotAskOf.data.map((snapshotAskId) {
return DropdownMenuItem<String>(
value: snapshotAskId,
child: StreamBuilder<DocumentSnapshot>(
stream: _provider.getData(
uid: snapshotAskId),
builder: (context, snapshotUser) {
UserModel userModel;
if (snapshotUser.hasData) {
userModel =
UserModel.fromSnapshot(
snapshotUser.data);
print(
'snapshotUser on dropdown: ${userModel.firstName} ${userModel.lastName}');
return Padding(
padding: EdgeInsets.only(
left: ScreenUtil().setWidth(30),
),
child: Text(
snapshotUser.hasData?'${userModel.firstName} ${userModel.lastName}':'a',
textAlign: TextAlign.center,
style: TextStyle(
color: AllColors()
.primaryTextColor,
fontSize:
ScreenUtil().setSp(45),
),
),
);
}
return Text('Loading');
}),
);
}).toList(),
onChanged: (val) {
print('val askof: $val');
_provider.askOfSink(val);
},
),
),
);
});
}
return Text('No List');
})),
);
}
答案 0 :(得分:0)
花费大量时间后,我只需将Streambuilder更改为Futurebutider即可解决此问题。
我不确定为什么Streambuilder无法正常工作。如果您发现无法解决问题的原因或其他解决方案,请告诉我。