1

有人知道如何使用 Firebase 简单登录和 Google Dart 吗?我想弄清楚在调用 FirebaseSimpleLogin 时如何定义函数(错误,用户){}。error 和 user() 都是对象。

这是来自 Firebase 的示例 javascript 代码

   var myDataRef = new js.Proxy(js.context.Firebase, 'https://johnstest1.firebaseIO.com/');
    var myDataRef = new Firebase('https://johnstest1.firebaseIO.com/');
    var auth = new FirebaseSimpleLogin(myDataRef, function(error, user) {
      if (error) {
        // an error occurred while attempting login
        console.log(error);
      } else if (user) {
        // user authenticated with Firebase
        console.log('User ID: ' + user.id + ', Provider: ' + user.provider);
      } else {
        // user is logged out
      }
    });

这是添加到 html 文件中供 Dart 和 Firebase 使用的代码

    <script type='text/javascript' src='https://cdn.firebase.com/v0/firebase.js'></script> 
    <script type='text/javascript' src='https://cdn.firebase.com/v0/firebase-simple-login.js'></script>  
    <script type="application/dart" src="firebasetestlogin.dart"></script>
    <script src="packages/browser/dart.js"></script>
    <script src="packages/browser/interop.js"></script>    

在 .dart 文件中,已使用 pubspec.yaml 导入了 javascript 库

   import 'package:js/js.dart' as js;

在 main() 中,这行代码运行良好,我可以将数据写入数据库。被注释掉的行是原始的 javascript 行,而下一行是 Dart 版本,它可以工作。

    js.scoped((){
        // var myDataRef = new Firebase('https://johnstest1.firebaseio.com');
        var myDataRef = new js.Proxy(js.context.Firebase, 'https://johnstest1.firebaseIO.com/');  
    });

这与添加了 Firebase 简单登录行的 main 代码相同。我一直在试图弄清楚如何为函数(错误,用户)编写代码。

  js.scoped((){
        // var myDataRef = new Firebase('https://johnstest1.firebaseio.com');
        var myDataRef = new js.Proxy(js.context.Firebase, 'https://johnstest1.firebaseIO.com/');  

       //var auth = new FirebaseSimpleLogin(js.context.Firebase(myDataRef, function(error, user){}{}));   
       var auth = new js.Proxy(js.context.FirebaseSimpleLogin(myDataRef, js.context.function(error, user)));

  });
4

3 回答 3

3

当您想在 Js 中使用 Dart 回调函数时,您必须创建一个Callback并将其用作参数。

您第一个粘贴的 js 代码的 dart 等效项是:

var myDataRef = new js.Proxy(js.context.Firebase, 
    'https://johnstest1.firebaseIO.com/');
var auth = new js.Proxy(js.context.FirebaseSimpleLogin, myDataRef, 
    new js.Callback.many((error, user) {
      if (error != null) {
        // an error occurred while attempting login
        window.console.log(error);
      } else if (user != null) {
        // user authenticated with Firebase
        window.console.log('User ID: ${user.id}, Provider: ${user.provider}');
      } else {
        // user is logged out
      }
    }));

js.scoped注意:由于js 包的版本很少,您可以避免这种情况。

于 2013-08-08T07:07:39.013 回答
3

这是一些使用 Dart 登录 Firebase 的示例代码。这将 Alexandre Ardhuin 的答案与一些附加代码合并到一篇文章中。

该示例将:

  • 获取 firebase 参考并检查用户是否在线
  • 使用电子邮件和密码登录创建新的 Firebase 用户
  • 登录到 Firebase
  • 添加一个 child_added 监听器并将数据库中的任何数据打印到控制台
  • 将一些数据推送到 Firebase 并使用 child_added 来显示数据。
  • 注销 Firebase

将 js 包http://pub.dartlang.org/packages/js添加到你的程序中

将这三行添加到 HTML 文件中。

<script src="packages/browser/interop.js"></script>     
<script type='text/javascript' src='https://cdn.firebase.com/v0/firebase.js'></script>    
<script type='text/javascript' src='https://cdn.firebase.com/v0/firebase-simple-login.js'></script>      
  • 将此代码放入 .dart 文件中。

    var YOUR_FIREBASE_PATH = 'https://johnstest1.firebaseIO.com/';
    var emailAddress = "emailAddress@xyz.com";
    var password = "password";
    
    var myDataRef = new js.Proxy(js.context.Firebase, YOUR_FIREBASE_PATH);
    
    // Firebase 
    var auth = new js.Proxy(js.context.FirebaseSimpleLogin, myDataRef, 
      new js.Callback.many((error, user) {
        if (error != null) {
        window.console.log("Firebase login returned a null");         
        // an error occurred while attempting login
        window.console.log(error);
    } else if (user != null) {
        // user authenticated with Firebase
        window.console.log('User ID: ${user.id}, Provider: ${user.provider}');
    } else {
        window.console.log("User is logged out");
        // user is logged out
    }
    

    }));

  • 使用电子邮件和密码创建新用户登录

     // Create a new user using email and password
     auth.createUser(emailAddress, password, 
        new js.Callback.many((error, user) {
        if (error != null && user != null)
        {        
            if (!error) {
                window.console.log('User Id: ' + user.id + ', Email: ' + user.email);
            }
        } 
      })
    );
    
  • Firebase 登录。

    // Login to firebase
    auth.login('password', js.map({'email': emailAddress, 'password': password}));
    

添加一个 child_added 回调,如果一个新的孩子被添加到数据库中,这将被调用

    // Add a listener for for child_added and gets all the data
    myDataRef.on('child_added',
        new js.Callback.many((snapshot, String previousChildName) {
        try {        
            final message = snapshot.val();
            print("${message.name} : ${message.text}");
        }
        catch (e) {} 
    }));
  • 将一些数据推送到 Firebase,child_added 回调会将数据库中的任何内容打印到控制台。

    // Push some data to Firebase
    myDataRef.push(js.map({"name": 'Mark', "text": 'Works with Dart test 2'}));
    
  • 将用户从 Firebase 中注销

    // Logout
    auth.logout();
    
于 2013-08-20T00:30:25.603 回答
2

现在有一个由 dart-team 发起的 Firebase 包装器:https ://pub.dartlang.org/packages/firebase 。

使用 Future,dart 版本比 js 版本更棒。

于 2015-09-16T07:38:24.803 回答