Firebase键值存储看起来很有趣,与 Dart 的 HTML 框架一起使用会很有趣。
他们提供了一个 JavaScript 库来读取/写入他们的模型。有没有人尝试将它与 Dart 一起使用?
我的计划(基于很少的 Dart 知识)是:
- 在我的 html 中包含他们的库
- 加载 js.dart 包
- 通过 js.dart 实例化一个模型
- 通过模型读写。
这看起来是正确的方法吗?或者,有更好的方法吗?
谢谢
您可以通过js 包使用任何 Javascript 库。
对于Firebase,您必须:
pubspec.yaml
dependencies:
js: any
<script>
到您的 html 页面:<script src='https://cdn.firebase.com/v0/firebase.js'></script>
<script type="application/dart" src="youDartCode.dart"></script>
<script src="packages/browser/dart.js"></script>
<script src="packages/browser/interop.js"></script>
import 'package:js/js.dart' as js;
void main() {
final myDataRef = new js.Proxy(js.context.Firebase,
'https://xxx.firebaseio-demo.com/');
myDataRef.on('child_added', (snapshot, String previousChildName) {
final message = snapshot.val();
print("${message.name} : ${message.text}");
});
myDataRef.push(js.map({"name": 'myName', "text": 'js interop rocks'}));
}
上面的 Dart 代码等价于下面的 JavaScript 代码:
var myDataRef = new Firebase('https://xxx.firebaseio-demo.com/');
myDataRef.on('child_added', function(snapshot, previousChildName) {
var message = snapshot.val();
console.log(message.name + " : " + message.text);
}));
myDataRef.push({name: 'myName', text: 'js interop rocks'});
基本上 :
当您必须实例化 Javascript 对象时,请使用new js.Proxy(js.context.MyJavascriptObjectName, arg1, arg2, arg3))
,
当您必须提供 Javascript 匿名对象时,请使用js.map({'attr1', value1}, {'attr2', value2})
.
现在 Dart 中有一个 firebase.js 库的包装器:https ://github.com/firebase/firebase-dart/ (也可以在 pub 上找到)。它使用 dart:js ,如本线程中所述,因此仍然需要包含 firebase.js!
当 Dart 到达这里时,我收到错误消息“异常中断:ReferenceError:ReceivePortSync 未定义”。
js.scoped (() {
});
需要一行额外的代码才能将 Firebase 与 Dart 结合使用。添加行“packages/browser/interop.js”
<script type="application/dart" src="ScrollViewDemo.dart"></script>
<script src="packages/browser/dart.js"></script>
<script src="packages/browser/interop.js"></script>
<script src='https://cdn.firebase.com/v0/firebase.js'></script>
----------------- 编辑 8 月 15 日 ----------
js.scoped is no longer needed in the newer version of interopt.js