为什么我在firebasestore得到这么多阅读?颤振聊天应用程序
我有个问题, 我刚刚创建了我的聊天应用程序,在我尝试添加一些功能之前,它工作得非常好 我的应用程序从fire base store中读取了大量数据。它每分钟读取超过1000次 我试图找出问题出在哪里,我发现了它,它是在我的流生成器中,但问题我不知道如何解决它可能是我的逻辑错误 下面是流生成器代码为什么我在firebasestore得到这么多阅读?颤振聊天应用程序,firebase,flutter,Firebase,Flutter,我有个问题, 我刚刚创建了我的聊天应用程序,在我尝试添加一些功能之前,它工作得非常好 我的应用程序从fire base store中读取了大量数据。它每分钟读取超过1000次 我试图找出问题出在哪里,我发现了它,它是在我的流生成器中,但问题我不知道如何解决它可能是我的逻辑错误 下面是流生成器代码 class Streambuild extends StatelessWidget { final String roomid; Streambuild({@required this.room
class Streambuild extends StatelessWidget {
final String roomid;
Streambuild({@required this.roomid});
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: _store
.collection('FCHATROOM')
.doc(roomid)
.collection("CHAT")
.orderBy('time')
.snapshots(),
builder: (context, snap) {
if (!snap.hasData) {
return Center(
child: Text('No Messages'),
);
}
return Expanded(
child: ListView.builder(
itemCount: snap.data.docs.length,
reverse: true,
shrinkWrap: true,
itemBuilder: (context, index) {
final messgaes = snap.data.docs.reversed;
List<String> text = [];
List<String> sender = [];
List<String> time = [];
for (var msg in messgaes) {
text.add(msg.data()['message']);
sender.add(msg.data()['sender']);
time.add(msg.data()['realtime']);
}
return Bubblemsg(
txt: text[index],
sender: sender[index],
realtime: time[index],
isMe: (_auth.currentUser.email == sender[index]),
);
}),
);
});
}
}
类Streambuild扩展了无状态小部件{
最终字符串roomid;
Streambuild({@required this.roomid});
@凌驾
小部件构建(构建上下文){
返回流生成器(
流:\ u存储
.collection(“FCHATROOM”)
.doc(室友)
.收藏(“聊天”)
.orderBy(“时间”)
.snapshots(),
生成器:(上下文,捕捉){
如果(!snap.hasData){
返回中心(
子项:文本(“无消息”),
);
}
扩大回报(
子项:ListView.builder(
itemCount:snap.data.docs.length,
相反:是的,
收缩膜:对,
itemBuilder:(上下文,索引){
最终消息=snap.data.docs.reversed;
列表文本=[];
列表发送者=[];
列表时间=[];
for(信息中的var msg){
text.add(msg.data()['message']);
sender.add(msg.data()['sender']);
添加(msg.data()['realtime']);
}
返回气泡SG(
文本[索引],
发件人:发件人[索引],
实时:时间[索引],
isMe:(_auth.currentUser.email==发件人[索引],
);
}),
);
});
}
}
这是bubblemsg课程
class Bubblemsg extends StatelessWidget {
Bubblemsg(
{this.sender, this.txt, this.isMe, this.realtime});
final String txt;
final String sender;
final bool isMe;
final String realtime;
@override
Widget build(BuildContext context) {
var myprov = Provider.of<Help>(context, listen: false);
return Container(
width: double.infinity,
child: Bubble(
elevation: 5,
padding: BubbleEdges.all(10),
margin: isMe
? BubbleEdges.only(top: 10, right: 5, left: 30)
: BubbleEdges.only(top: 10, left: 5, right: 30),
alignment: isMe ? Alignment.topRight : Alignment.topLeft,
nip: isMe ? BubbleNip.rightTop : BubbleNip.leftTop,
color: isMe ? myprov.mid : Colors.grey[900],
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
txt != null
? txt.startsWith("https://firebasestorage.googleapis.com/v0")
? Imagecontainer(
url: txt,
)
: SelectableText(
txt != null ? txt : "",
style: TextStyle(
color: myprov.word,
fontSize: 20,
),
)
: Text(""),
Padding(
padding: EdgeInsets.only(top: 10.0),
child: Text(
realtime != null ? realtime : "",
style: TextStyle(fontSize: 15, color: myprov.word),
textAlign: TextAlign.end,
),
)
],
),
),
);
}
}
类Bubblemsg扩展了无状态小部件{
泡泡糖(
{this.sender,this.txt,this.isMe,this.realtime});
最终字符串txt;
最终字符串发送器;
最终目标;
最终字符串实时;
@凌驾
小部件构建(构建上下文){
var myprov=Provider.of(上下文,侦听:false);
返回容器(
宽度:double.infinity,
孩子:泡泡(
标高:5,
填充:气泡边缘。全部(10),
保证金:isMe
?仅限气泡边缘(顶部:10个,右侧:5个,左侧:30个)
:仅限泡泡糖(顶部:10,左侧:5,右侧:30),
对齐:isMe?对齐。右上角:对齐。左上角,
nip:isMe?BubbleNip.rightTop:BubbleNip.leftTop,
颜色:isMe?myprov.mid:颜色.灰色[900],
子:列(
crossAxisAlignment:crossAxisAlignment.end,
儿童:[
txt!=null
?txt.startsWith(“https://firebasestorage.googleapis.com/v0")
?图像容器(
网址:txt,
)
:可选择文本(
txt!=null?txt:“”,
样式:TextStyle(
颜色:myprov.word,
尺寸:20,
),
)
:文本(“”),
填充物(
填充:仅限边缘设置(顶部:10.0),
子:文本(
实时!=空?实时:“”,
样式:TextStyle(字体大小:15,颜色:myprov.word),
textAlign:textAlign.end,
),
)
],
),
),
);
}
}
这是我的阅读几分钟后,它花了12k阅读
我确信我的编码方式是错误的,对不起,我是新来的
你知道有什么问题吗?
感谢您的高级指导。如果您在流生成器中使用for循环,它将增加您的阅读量,以避免出现此问题。不要使用for循环,因为您已经在使用列表视图生成器,而且流生成器的行为也类似于该循环。希望我的建议能解决你的问题。你是最好的