如何将传入的变量作为传入的 ChapterName 放入Where子句中?
不确定我做错了什么,但传递的值似乎无法以我这样做的方式提供。我尝试用变量替换字符串。不允许。我尝试过使用许多替代方案但没有成功。似乎只有“文本”有效。
抱歉,我不是经验丰富的开发人员,但试图将其提供给团队使用。
有什么建议吗?
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:member_shmc_app/screens/home/members/members_admin/admin_member_details.dart';
//New starting point -- need to change to filter by User's Chapter Members ONLY
//Attempt to take HomePage and pass in ChapterName
// ignore: must_be_immutable
class MemberListHome extends StatefulWidget {
MemberListHome({required this.chapterName, super.key});
var chapterName = '';
@override
State<MemberListHome> createState() => _MemberListHomeState();
}
//Works now but need to replace Chapter Name with variable of chapterName
final Query<Map<String, dynamic>> _referenceMemberList = FirebaseFirestore
.instance
.collection('shmc_members')
.where('memberChapter', isEqualTo: 'Gray Ghost');
class _MemberListHomeState extends State<MemberListHome> {
late Stream<QuerySnapshot> _streamMemberItems;
@override
initState() {
super.initState();
_streamMemberItems = _referenceMemberList.snapshots();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("SHMC Chapter Members"),
backgroundColor: const Color.fromARGB(255, 43, 55, 138),
foregroundColor: Colors.white),
body: StreamBuilder<QuerySnapshot>(
stream: _streamMemberItems,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasError) {
return Center(child: Text(snapshot.error.toString()));
}
if (snapshot.connectionState == ConnectionState.active) {
QuerySnapshot querySnapshot = snapshot.data;
List<QueryDocumentSnapshot> listQueryDocumentSnapshot =
querySnapshot.docs;
return ListView.builder(
itemCount: listQueryDocumentSnapshot.length,
itemBuilder: (context, index) {
QueryDocumentSnapshot document =
listQueryDocumentSnapshot[index];
return MemberListItem(document: document);
});
}
return const Center(child: CircularProgressIndicator());
},
),
);
}
}
class MemberListItem extends StatefulWidget {
const MemberListItem({
super.key,
required this.document,
});
final QueryDocumentSnapshot<Object?> document;
@override
State<MemberListItem> createState() => _MemberListItemState();
}
class _MemberListItemState extends State<MemberListItem> {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(5.0),
child: ListTile(
tileColor: Colors.white,
minLeadingWidth: 10,
onTap: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => AdminMemberDetails(widget.document.id)));
},
title: Text(widget.document['memberRoadname'] +
' - ' +
widget.document['memberChapter']),
subtitle: Text(widget.document['memberFullName'] +
" - " +
widget.document['memberCellPhone']),
//leading: Image.asset('images/chapters/' + widget.document['chapterLogo']),
),
);
}
}
您在
_referenceMemberList
类之外定义 _MemberListHomeState
,这就是您无法访问 chapterName
变量的原因。
将
_referenceMemberList
定义移至 _MemberListHomeState
中,并使用 chapterName
中的 _referenceMemberList
变量作为 widget.chapterName
。
见下图:
class _MemberListHomeState extends State<MemberListHome> {
Query<Map<String, dynamic>> get _referenceMemberList =>
FirebaseFirestore.instance
.collection('shmc_members')
.where('memberChapter', isEqualTo: widget.chapterName);
/// The rest of your code
}
我将
_referenceMemberList
从类变量转换为 getter,因为 widget
(在 widget.chapterName
中使用)在初始化器中不可用,即将 _referenceMemberList
定义为类变量时。