有没有人尝试过在Dart中使用Firebase javascript库?

And*_*ett 7 dart firebase

火力地堡 key-value存储看上去有趣,并且将乐趣飞镖的HTML框架使用.

他们提供了一个JavaScript库,用于读/写他们的模型.有没有人尝试过用Dart?

我的计划(基于很少的Dart知识)是:

  • 在我的HTML中包含他们的库
  • 加载js.dart包
  • 通过js.dart实例化一个模型
  • 通过模型读写.

这看起来是正确的方法吗?或者,有更好的方法吗?

谢谢

Ale*_*uin 10

您可以通过js包使用任何Javascript库.

对于Firebase,您必须:

  • js包添加到您的pubspec.yaml
dependencies:
  js: any
Run Code Online (Sandbox Code Playgroud)
  • 将以下内容添加<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> 
Run Code Online (Sandbox Code Playgroud)
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'}));
}
Run Code Online (Sandbox Code Playgroud)

上面的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'});
Run Code Online (Sandbox Code Playgroud)

基本上:

  • 当你必须实例化一个Javascript对象时,使用new js.Proxy(js.context.MyJavascriptObjectName, arg1, arg2, arg3)),

  • 当你必须提供一个Javascript匿名对象时,请使用js.map({'attr1', value1}, {'attr2', value2}).