所以目前我正在嘗試從我的 firebase 集合中檢索檔案 ID。但我只是找不到檢索資料的方法。
return ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: announcementList.length,
itemBuilder: (context, index){
return AnnouncementTile(announcementlist: announcementList[index]);
},
);
我正在使用 listview.builder
class AnnouncementTile extends StatelessWidget {
final Announcement announcementlist;
AnnouncementTile({ required this.announcementlist });
@override
Widget build(BuildContext context) {
return Card(
elevation: 8.0,
margin: new EdgeInsets.symmetric(
horizontal: 10.0, vertical: 6.0),
child: Container(
decoration: BoxDecoration(
color: Color.fromRGBO(64, 75, 96, .5)),
child: ListTile(
onTap: () {
// String id = announcementList[index].id;
},
contentPadding: EdgeInsets.symmetric(
horizontal: 10.0, vertical: 10.0
),
title: Text(
announcementlist.title.length > 15 ? '${announcementlist.title.substring (0,18)} ...' : announcementlist.title, // limit the words that will be displayed out on screen
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold),
),
// subtitle: Text("10.07.2020", style: TextStyle(color: Colors.white)),
subtitle: Column(
children: <Widget>[
Align(
alignment: Alignment.centerLeft,
child: Padding(
padding: const EdgeInsets.fromLTRB(0.0,2.0,0.0,0.0),
child: Text(announcementlist.content.length > 20 ? '${announcementlist.content.substring (0,20)} ... ' : announcementlist.content), // limit the words that will be displayed out on screen
),
),
Row(
children: <Widget>[
Icon(Icons.linear_scale,
color: Colors.yellowAccent),
Text(announcementlist.dateTime,
style: TextStyle(color: Colors.white))
],
),
],
),
trailing: Icon(Icons.keyboard_arrow_right,
color: Colors.white, size: 30.0)),
),
);
}
}
這是我的串列視圖設計
class DatabaseService {
final String? uid;
DatabaseService({ required this.uid});
//specifically for collection group
final Query<Map<String, dynamic>> getAnnouncement = FirebaseFirestore.instance.collectionGroup('announcementlist');
//announcement list from snapshot
List <Announcement> _announcementListFromSnapshot(QuerySnapshot snapshot){
return snapshot.docs.map((doc){
return Announcement(
title: doc.get('title') ?? '',
dateTime: doc.get('dateTime') ?? '',
content: doc.get('content') ?? '',
aType: doc.get('announcementType') ?? '',
aLevel: doc.get('announcementLevel') ?? ''
);
}).toList();
}
// get announcements stream
Stream<List <Announcement>> get announcementList {
return getAnnouncement.snapshots()
.map(_announcementListFromSnapshot);
}
}
上面的代碼是我從firebase中檢索資料然后將其顯示在listtiles中然后顯示在listview.builder中的方法。我在網上搜索了資源,但找不到適合我方法的正確方法。
我想做的是從firebase檢索檔案ID并將其傳遞給gesturedetector ontap方法以在另一個頁面中顯示檔案的內容。
下面是我的資料庫

uj5u.com熱心網友回復:
向類添加id欄位Announcement
class Announcement{
final String id;
.... //Other fields.
Announcement({required this.id, ...});
}
然后像這樣傳遞id:
List <Announcement> _announcementListFromSnapshot(QuerySnapshot snapshot){
return snapshot.docs.map((doc){
return Announcement(
id: doc.id,
title: doc.get('title') ?? '',
dateTime: doc.get('dateTime') ?? '',
content: doc.get('content') ?? '',
aType: doc.get('announcementType') ?? '',
aLevel: doc.get('announcementLevel') ?? ''
);
}).toList();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/431589.html
上一篇:未處理的例外:型別'List<dynamic>'不是型別'Map<String,dynamic>'的子型別顫動錯誤
