如何将传入的变量作为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']),
      ),
    );
  }
}

推荐答案

问题:

你在_MemberListHomeState类之外定义了_referenceMemberList,这就是为什么你不能访问chapterName变量.

解决方案:

_referenceMemberList定义移到_MemberListHomeState中,并使用_referenceMemberList中的chapterName变量作为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
}

注:

I converted the 100 from a class variable to a getter because 101 (used in 102) isn't available in initializers i.e when definining 100 as a class variable.

Flutter相关问答推荐

如何更改默认应用程序启动器/启动屏幕

Riverpod生成器和生成util类

在创建肘部并使用冻结时,无法使用中的Copy With方法

flutter -当使用SingleChildScrollView包装我的列小部件时,它不会填充整个高度

你能go 掉Flutter 小部件测试中的样板吗?

Flutter Riverpod,将默认的BTC值改写为我的新状态

如何在Ffltter 3.16中设置标准的提升按钮主题?

无法构建AndroidBundle 包或iOS等

我怎样才能go 掉这个底部导航栏上的白色背景

使用Ffltter CREATE创建项目时,androidManifest.xml中缺少包属性

ScaffoldMessenger 在等待键下方不起作用

无法应用插件com.chaquo.python

splash_screen 没有被推送到登录页面

使 Row 中的元素保持在中间的空间,如果它们太大,则将它们包裹起来

如何将行推到列的底部

如何在两个不同的路由(屏幕)之间正确设置 BlocProvider?

statefulWidget 无法进行所需更改的问题

为什么 orientation == Orientation.portrait 总是正确的,尽管我的设备已经处于横向

Flutter:如何将列表转换为字符串?

Flutter Bloc Todo 示例 - 收听存储库中的单个 todo