bounty还有2天到期。此问题的答案有资格获得+50声望奖励。Zahid Tekbaş希望引起更多关注这个问题。
在Flutter应用程序中,我尝试使用自定义参数定义自己的view_cart事件。所以我决定从firebase_analytics库中复制一些代码片段,以便成功发送数据。
下面是firebase_analytics库中的filterOutNulls函数:
Map<String, Object> filterOutNulls(Map<String, Object?> parameters) {
final Map<String, Object> filtered = <String, Object>{};
parameters.forEach((String key, Object? value) {
if (value != null) {
filtered[key] = value;
}
});
return filtered;
}
下面是firebase_analytics库中的_marshalItems函数。
List<Map<String, dynamic>>? _marshalItems(List<AnalyticsEventItem>? items) {
if (items == null) return null;
return items.map((AnalyticsEventItem item) => item.asMap()).toList();
}
这是我的logEvent函数:
await FirebaseAnalytics.instance.logEvent(
name: 'view_cart',
parameters: filterOutNulls(<String, Object?>{
"user_id": userId,
"currency": convertSymbol(dvz),
"value": totalPrice,
"items": _marshalItems(list),
}),
);
// list variable is type of List<AnalyticsEventItem>
最后,终端输出:
[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: 'package:firebase_analytics/src/firebase_analytics.dart': Failed assertion: line 115 pos 9: 'value is String || value is num': 'string' OR 'number' must be set as the value of the parameter: items
#0 _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:51:61)
#1 _AssertionError._throwNew (dart:core-patch/errors_patch.dart:40:5)
#2 FirebaseAnalytics.logEvent.<anonymous closure> (package:firebase_analytics/src/firebase_analytics.dart:115:9)
#3 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:617:13)
#4 FirebaseAnalytics.logEvent (package:firebase_analytics/src/firebase_analytics.dart:113:17)
我不明白的是logEvent函数中的变量是logViewCart函数的精确副本。即使它们相同,logEvent函数也会抛出错误,但logViewCart不会。
有谁能告诉我我哪里做错了吗?
2条答案
按热度按时间bnl4lu3b1#
使用此方法
可以将List添加到Map的Value中
输出
7ajki6be2#
我在FlutterFire Github(check this out)中打开了一个问题,我看到我想做的事情不受Google支持。无法在自定义logEvent中将对象列表分配给items参数。
所以我必须坚持使用Firebsase Analytics允许的预定义日志功能。