Flutter StreamBuilder快照连接状态。未工作
嗨,我使用云Firestore存储数据。在这种情况下,基本聊天应用程序。我想要的是控制Listview.Builder的滚动。我无法控制滚动,因为它在内容构建之前当然不工作。所以我尝试的是等待快照连接完成Flutter StreamBuilder快照连接状态。未工作,flutter,google-cloud-firestore,Flutter,Google Cloud Firestore,嗨,我使用云Firestore存储数据。在这种情况下,基本聊天应用程序。我想要的是控制Listview.Builder的滚动。我无法控制滚动,因为它在内容构建之前当然不工作。所以我尝试的是等待快照连接完成 snapshot.connectionState==connectionState.done 但程序无法运行连接状态。完成 bool _isMe; ScrollController _ListViewController = ScrollController(); TextEditi
snapshot.connectionState==connectionState.done
但程序无法运行连接状态。完成
bool _isMe;
ScrollController _ListViewController = ScrollController();
TextEditingController _controller = TextEditingController();
@override
Widget build(BuildContext context) {
return SafeArea(
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.end,
children: [
StreamBuilder<QuerySnapshot>(
stream: messages.snapshots(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Text("hata", style: TextStyle(color: Colors.black));
}
if (snapshot.connectionState == ConnectionState.done) { /////////not working
print(33);
print(_ListViewController.hasClients);
}
if (snapshot.connectionState == ConnectionState.waiting) {
print(44);
return Text(
"bekleniyor",
style: TextStyle(color: Colors.black),
);
}
return Expanded(
child: ListView.builder(
controller: _ListViewController,
shrinkWrap: true,
itemCount: snapshot.data.docs.length,
itemBuilder: (context, index) {
if (snapshot.data.docs[index].data()['user_id'] ==
sharedPrefs.UyeId.toString()) {
_isMe = true;
} else {
_isMe = false;
}
return Container(...)
);
},
),
],
));
}
bool\isMe;
ScrollController_ListViewController=ScrollController();
TextEditingController _controller=TextEditingController();
@凌驾
小部件构建(构建上下文){
返回安全区(
子:列(
mainAxisSize:mainAxisSize.max,
mainAxisAlignment:mainAxisAlignment.end,
儿童:[
StreamBuilder(
流:messages.snapshots(),
生成器:(上下文,快照){
if(snapshot.hasError){
返回文本(“hata”,样式:TextStyle(颜色:Colors.black));
}
如果(snapshot.connectionState==connectionState.done){//不工作
印刷品(33);
打印(_ListViewController.hasClients);
}
if(snapshot.connectionState==connectionState.waiting){
印刷品(44);
返回文本(
“bekleniyor”,
样式:TextStyle(颜色:Colors.black),
);
}
扩大回报(
子项:ListView.builder(
控制器:_ListViewController,
收缩膜:对,
itemCount:snapshot.data.docs.length,
itemBuilder:(上下文,索引){
if(snapshot.data.docs[index].data()['user\u id']==
sharedPrefs.UyeId.toString()){
_isMe=真;
}否则{
_isMe=假;
}
返回容器(…)
);
},
),
],
));
}
程序运行得很好。它可以实时获取数据并发送数据。我只需要新快照的信息。如果您拥有所有必需的
Firebase
权限,您可以尝试使用ConnectionState.active
:
StreamBuilder<QuerySnapshot>(
stream: messages.snapshots(),
builder: (context, snapshot) {
if (snapshot.hasError) print('error');
if (snapshot.connectionState == ConnectionState.active) print('active');
if (snapshot.connectionState == ConnectionState.waiting) print('waiting');
return Container();
},
);
StreamBuilder(
流:messages.snapshots(),
生成器:(上下文,快照){
如果(snapshot.hasError)打印('error');
如果(snapshot.connectionState==connectionState.active)打印('active');
如果(snapshot.connectionState==connectionState.waiting)打印('waiting');
返回容器();
},
);
如果您拥有所有必需的Firebase
权限,您可以尝试使用ConnectionState.active
:
StreamBuilder<QuerySnapshot>(
stream: messages.snapshots(),
builder: (context, snapshot) {
if (snapshot.hasError) print('error');
if (snapshot.connectionState == ConnectionState.active) print('active');
if (snapshot.connectionState == ConnectionState.waiting) print('waiting');
return Container();
},
);
StreamBuilder(
流:messages.snapshots(),
生成器:(上下文,快照){
如果(snapshot.hasError)打印('error');
如果(snapshot.connectionState==connectionState.active)打印('active');
如果(snapshot.connectionState==connectionState.waiting)打印('waiting');
返回容器();
},
);
我真的不确定这是否适用于我。因为每当我打开键盘StreamBuilder时,都会自动刷新并运行.active和.waiting命令。我认为它不应该这样工作,但我不能确定。我试图找出新数据何时出现,我真的不确定这是否适用于我。因为每当我打开键盘StreamBuilder时,我都会刷新t自我和运行.active和.waiting命令。我认为它不应该像这样工作,但我不能确定。我试图找出新数据何时出现