【发布时间】:2021-11-02 00:31:39
【问题描述】:
如下动画所示,当我点击 StreamBuilder() 正在查询的列表项之一时,它会在右侧较暗的容器中显示项目数据(它始终是 Instance of ' _JsonQueryDocumentSnapshot')。但同时在每次点击时,整个列表都在刷新自己,我相信这不是很划算。
如何避免这种不必要的刷新? 也欢迎带有 GetX 状态管理依赖的答案。
class Schedule extends StatefulWidget {
@override
_ScheduleState createState() => _ScheduleState();
}
class _ScheduleState extends State<Schedule> {
final FirebaseFirestore _db = FirebaseFirestore.instance;
final DateTime _yesterday = DateTime.now().subtract(Duration(days: 1));
var _chosenData;
@override
Widget build(BuildContext context) {
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: StreamBuilder<QuerySnapshot>(
stream: _db.collection('Schedule').where('date', isGreaterThan: _yesterday).limit(10).orderBy('date').snapshots(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.active) {
return ListView.builder(
itemCount: snapshot.data!.docs.length,
itemBuilder: (context, index) {
var data = snapshot.data!.docs[index];
return ListTile(
leading: Icon(Icons.person),
title: Text(data['project'], style: TextStyle(fontWeight: FontWeight.bold)),
subtitle: Text(data['parkour']),
onTap: () {
setState(() {_chosenData = data;});
},
);
},
);
} else {
return Center(child: CupertinoActivityIndicator());
}
},
),
),
VerticalDivider(),
Expanded(
child: Container(
alignment: Alignment.center,
color: Colors.black26,
child: Text('$_chosenData'),
),
),
],
);
}
}
【问题讨论】:
标签: flutter google-cloud-firestore listviewitem stream-builder flutter-getx