首页 > 解决方案 > “where”参数中带有变量的 Firebase 实例

问题描述

从flutter编程开始,我尝试创建一个返回firebase数据的简单视图

我在字符串“data”中的 2 个屏幕之间传递了一个值,但是当我尝试将其添加到我的 firebase 查询时,我收到以下消息:

无法在初始化程序中访问实例成员“数据”。尝试用不同的表达式替换对实例成员的引用dart(implicit_this_reference_in_initializer)

当我用引号之间的值替换它时,我没有收到此错误消息:

在职的 :

      .where('Description', isEqualTo: 'ProductABC')

不工作:

      .where('Description', isEqualTo: data)

你能帮助我吗 ?

请在代码行下方找到

class Itemscreen extends StatefulWidget {
  String data;
  Itemscreen({this.data});

  @override
  _ItemscreenState createState() => _ItemscreenState(data);
}

class _ItemscreenState extends State<Itemscreen> {
  String data;
  _ItemscreenState(this.data);
 
  FirebaseFirestore firestore = FirebaseFirestore.instance;

  final Stream<QuerySnapshot> _itemlist = FirebaseFirestore.instance
      .collection('ItemList')
      .where('Description', isEqualTo: data)
      .snapshots();

谢谢你的帮助 :)

标签: fluttergoogle-cloud-firestore

解决方案


正如错误消息所说,您不能data在对象的初始化块中使用(或任何字段)。

您可能希望在构造函数/初始化程序中创建它,如下所示:

class _ItemscreenState extends State<Itemscreen> {
  String data;
  final FirebaseFirestore firestore
  final Stream<QuerySnapshot> itemlist
  _ItemscreenState(this.data): 
      firestore = FirebaseFirestore.instance,
      _itemlist = FirebaseFirestore.instance
          .collection('ItemList')
          .where('Description', isEqualTo: data)
          .snapshots();

另请参阅:Dart 中的构造函数和初始化列表有什么区别?


推荐阅读