我正在构建一个需要 Radar.io SDK 某些功能的应用程序,因此我决定创建插件,以便在该项目结束后我可以与 Flutter 社区的其他成员共享该插件。问题是,我无法接收此插件中的事件。这对于插件很重要,因为为了接收地理定位触发器和其他后台事件等事件,该接收器需要接收实时信息。
我已经成功实现了https://radar.io/documentation/sdk中的 Android SDK(使用 Kotlin)中的每个功能,但是,当事件发生时,接收器不会被调用。我知道设备正在被跟踪,因为 Radar.io 仪表板中的位置已更新,但是,当发生各种事件时,接收器根本不会执行。
以下是文档告诉您如何在清单中注册接收器的方法。
<receiver
android:name=".MyRadarReceiver"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="io.radar.sdk.RECEIVED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
这适用于标准应用程序,但是,当我在清单中注册接收器时,应用程序不会在接收器所在的插件目录中查找。相反,它会查找应用程序 android 目录并返回无法找到数据路径的错误。这会导致应用程序终止。
为了解决这个问题,我发现可以通过编程方式设置接收器,所以我决定尝试一下。
在插件的主 Kotlin 文件中,我编写了以下几行以在registerWith和onAttachedToEngine. 据我了解,这些基本上是 onStart 函数。registerWith是为了与旧设备兼容而保留的旧功能。
val myRadarReceiver = MyRadarReceiver()
val intentFilter = IntentFilter()
intentFilter.addAction("io.radar.sdk.RECEIVED")
ContextWrapper(this.context).registerReceiver(myRadarReceiver, intentFilter)
Run Code Online (Sandbox Code Playgroud)
引用的类是SDK 中类MyRadarReceiver()的扩展,它扩展意味着这是我的广播接收器。这是课程:RadarReceiverBroadcastReceiver
public class MyRadarReceiver: RadarReceiver() {
override fun onEventsReceived(context: Context, events: Array<RadarEvent>, user: RadarUser) {
println("test: " + "an event was received") …Run Code Online (Sandbox Code Playgroud) 所以我正在做一个项目,我希望有一个包含多个数据流的列表视图。我正在寻找的是这样的东西,但它都需要在一个列表视图中滚动。
我收到的数据流来自 firebase,变量myData是 firebase 集合的一个实例。我能够构建单个流的一个列表,所以我知道实例是正确的,我不想共享它,因为数据库规则目前处于测试模式。
此代码允许我ListView从单个流构建一个并按预期工作。
Container(
child: StreamBuilder<QuerySnapshot>(
stream: myData,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError)
return new Text('Error: ${snapshot.error}');
switch (snapshot.connectionState) {
case ConnectionState.waiting: return new Text('Loading...');
default:
return new ListView(
children: snapshot.data.documents.map((DocumentSnapshot document) {
return Text(document['color']);
}).toList(),
);
}
},
),
);
Run Code Online (Sandbox Code Playgroud)
从这里开始,我觉得我有 2 个选择,它们是:1)Column从StreamBuilder允许我在一个ListView. 2) 或者将一个List空的放在 ListView 的子项中,并使用 StreamBuilder 以外的其他东西从 firebase 添加到列表中,因为它需要返回的小部件。(事实是我不知道除了 StreamBuilder 之外的另一种方式)任何想法都会受到欢迎。
这是我第一个想法的代码。我希望你能看到这将如何扩展。通过返回 Columns 我可以建立一种流体ListView。这样做的问题是它不会从 Firebase 获取数据,唯一的结果是CircularProgressIndicator …
本质上我想做的是允许人们添加文件,然后按下按钮将图像上传到 Firebase 存储。我决定使用 Dropzone.js,因为该包编写良好且可自定义,但我仍然感到困惑。
我有这段代码,允许我将多个图像上传到 Firebase,但是,我希望它适合此代码下面所示的框架:
超文本标记语言
<input type="file" id="file" name="file" multiple/>
Run Code Online (Sandbox Code Playgroud)
JS
var auth = firebase.auth();
var storageRef = firebase.storage().ref();
//Handle waiting to upload each file using promise
function uploadImageAsPromise (imageFile) {
return new Promise(function (resolve, reject) {
var storageRef = firebase.storage().ref("/sth/"+imageFile.name);
//Upload file
var task = storageRef.put(imageFile);
//Update progress bar
task.on('state_changed',
function progress(snapshot){
// Get task progress, including the number of bytes uploaded and the total number of bytes to be uploaded
var progress = (snapshot.bytesTransferred / snapshot.totalBytes) …Run Code Online (Sandbox Code Playgroud) 我有 2 个流,需要组合起来构建一个小部件,但与我见过的其他问题不同,我需要嵌套流。
我有一个从 Firestore 获取文档集合的流,以及一个依赖于第一个文档的数据来获取文档子集合的流。我想将它们组合成一个流,但它们需要嵌套,因为每个文档都有自己的文档子集合。
流 1(从 FireStore 获取习惯集合):
Stream<List> getHabits(){
final Stream<QuerySnapshot> documents = Firestore.instance
.collection("users")
.document('VtL1sxOoCOdJaOTT87IbMRwBe282')
.collection("habits")
.snapshots();
Stream<List> data = documents.map((doc) {
List data;
final documents = doc.documents;
///Maybe this would work to get history of each doc?
for(int i = 0; i < documents.length; i++){
///not sure what to do
getHistory(documents[i].documentID, DateTime.utc(2019,7,7), DateTime.now());
}
data = documents.map((documentSnapshot) => documentSnapshot).toList();
return data;
});
return data;
}
Run Code Online (Sandbox Code Playgroud)
Stream 2(在Stream 1中调用,作为DocumentID参数,获取文档的子集合):
Stream<List> getHistory(String id, DateTime start, …Run Code Online (Sandbox Code Playgroud) 我有一个名为 Map() 的函数myData,它包含多个列表。我想使用 Stream 来填充Map. 对于这个 StreamBuilder 将无法工作,因为它需要返回并且我想使用List.add()功能。
Map<String, List<Widget>> myData = {
'list1': [],
'list2': [],
'list3': [],
'list4': []
};
Run Code Online (Sandbox Code Playgroud)
如何从 FireStore 获取信息但将其添加到列表而不是返回数据?
像这样,但这行不通。
StreamBuilder<QuerySnapshot>(
stream: // my snapshot from firestore,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
snapshot.data.documents.map((DocumentSnapshot doc) {
myData['list1'].add(Text(doc['color']));
});
},
),
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激!
flutter ×4
dart ×3
android ×1
dropzone.js ×1
html ×1
javascript ×1
jquery ×1
kotlin ×1
stream ×1