Flutter:如何实现回调

时间:2019-12-22 20:26:06

标签: firebase flutter dart

如何实现回调返回错误消息?

来自AuthService类的登录功能:

static void login(String email, String password) async {
    try {
      await FirebaseAuth.instance.signInWithEmailAndPassword(email: email, password: password);
    } catch (e) {
      print(e);
    }
  }

从登录类提交功能:

_submit() {
   // If fail to login then return the error message
   AuthService.login(_email, _password);
}

2 个答案:

答案 0 :(得分:0)

尝试以下操作:

void printNumber(int nbr)
{
    printf("%d\n", nbr);
}

void myFunction(void (*f)(*int)) //pseudocode
{
    for(int i = 0; i < 5; i++)
    {
        (*f)(*int); //pseudocode
    }
}

int main(void)
{
    myFunction(printNumber(5)); //pseudocode
    return (0);
}

然后您可以像这样调用方法:

Future<AuthResult> login(String email, String password) async {
    try {
    Future<AuthResult> result = await FirebaseAuth.instance.signInWithEmailAndPassword(email: email, password: password);
    return result;
    } catch (e) {
      print(e);
    }
  }

方法_submit() { // If fail to login then return the error message login(_email, _password).then((result) => { print(result); }); } 返回signInWithEmailAndPassword,因此将其分配给该类型,关键字Future<AuthResult>将等待该方法完成执行,然后返回类型{{1 }}。

  

Future表示异步操作的结果,并且可以具有两种状态:未完成或已完成。

调用方法await时,可以添加Future<AuthResult>方法,该方法注册将来完成时要调用的回调。

  

当此后继值完成时,将使用该值调用onValue回调。

https://api.dartlang.org/stable/2.7.0/dart-async/Future/then.html

答案 1 :(得分:0)

function addItem({ item, listId }) {
  return MongoService.connect()
    .then(db => {
      const collection = db.collection('lists');
      // The update query below would return a promise
      return collection.updateOne({
        { _id: new ObjectID(listId) }
      }, { '$push': { items: item } })
    })
    .then(result => { // Anything you want to do with the result })
}

返回用户信息,您不确定需要回调吗?

label = "{}: {:.2f}%".format(CLASSES[idx], confidence * 100)

cv2.rectangle(frame, (startX, startY), (endX, endY), COLORS[idx], 2)

y = startY - 15 if startY - 15 > 15 else startY + 15
cv2.putText(frame, label, (startX, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, COLORS[idx], 2)

#print (label + "\n")
print(label)