首页 > 解决方案 > 在一种方法中过滤firebase调用,按命名参数过滤不起作用->变量类型错误?

问题描述

我尝试使用带有命名参数的相同方法从 firebase 获取过滤/未过滤的数据。

如果我将变量 polylinesRef 声明为 final 并且我只使用一个 firebase 引用而没有命名参数“onlyOwnPolys”的条件/差异,我会从“polylinesRef”中的 firebase 获得预期的正确结果。

如果我在条件之前将“polylinesRef”声明为 var 并尝试在条件中使用它,我不会得到任何结果。

如何正确声明“polylinesRef”?我的错误是什么?

void _fbListenPolylines({bool onlyOwnPolys}) async {    
final currentUserUuid =
    await PrefHelper.getLoginResponse().then((r) => r.uuid);
final firebase = (await FirebaseHelper.fbDb);
var polylinesRef;
if (onlyOwnPolys == true) {
  polylinesRef = firebase
      .reference()
      .child('new_polys/$orderUuid')
      .orderByChild("userUuid")
      .startAt('$currentUserUuid')
      .endAt('$currentUserUuid');
} else {
  polylinesRef = firebase.reference().child('new_polys/$orderUuid');
}
_messagesSubscription?.cancel();

_messagesSubscription = polylinesRef.onValue
    .debounceTime(Duration(seconds: 1))
    .listen((Event event) {
  final Map<dynamic, dynamic> map = event.snapshot.value;
  final orderSegments = map?.entries?.toList();enter code here

标签: firebaseflutter

解决方案


声明时可以使用条件运算符(? :

final polyLineRefs = onlyOwnPolys 
    ? firebase
      .reference()
      .child('new_polys/$orderUuid')
      .orderByChild("userUuid")
      .startAt('$currentUserUuid')
      .endAt('$currentUserUuid')
    : firebase.reference().child('new_polys/$orderUuid');
     

此外,为了将来参考,您不需要对布尔值进行布尔运算。

✅<code>if (myBoolean)

❌<code>if (myBoolean == true)


推荐阅读