【问题标题】:How to pass parameters to action in Flutter如何在 Flutter 中将参数传递给动作
【发布时间】:2021-02-08 06:41:45
【问题描述】:

我有这个动作

Future<void> signUpAction(Store<AppState> store) async {
  try {
    // ...
  } catch (e) {
    // ..
  }
}

我是这样发送的

store.dispatch(signUpAction);

现在,如果我想传递两个参数,我该怎么做?因为那里已经有一个参数了。

我试过了

Future<void> signUpAction(Store<AppState> store, email, password) async {
  try {
    // ...
  } catch (e) {
    // ..
  }
}

但是如果我这样做了,那么在调度时

store.dispatch(signUpAction("some@email.com", "somEPa55word!"));

它说singUpAction需要3个参数,所以我不太清楚如何只传递这两个

谢谢

【问题讨论】:

  • 因为您的 signUpAction() 方法需要/需要 3 个参数。通过添加{}signUpAction({Store&lt;AppState&gt; store, email, password})使其成为可选命名参数,现在您可以通过(signUpAction(email: "some@email.com", password: "somEPa55word!")调用它。这里有一些很好的答案stackoverflow.com/a/55866881/12789200
  • 谢谢@Reign,如果您愿意,可以将其作为答案,以便我接受。
  • 真的有用吗?那么该方法如何获得商店呢?
  • @nvoigt,不,它没有

标签: flutter action flutter-redux


【解决方案1】:

调度方法需要一个特定的签名。如果您的方法不完全具有该签名,您可以即时创建与签名匹配的anonymous function

在这种情况下,由于您的方法不仅需要商店,还需要电子邮件和密码:

store.dispatch((x) => signUpAction(x, "some@email.com", "somEPa55word!"));

【讨论】:

  • 在此之前显示错误:预期为 ')'。 Redux.store.dispatch(x => signUpAction(x, "some@email.com", "someEPa55word!"));
  • @user3808307 抱歉,忘记括号了。
  • 它似乎工作正常,但我的操作有问题,所以我无法正确测试它,我会在修复后立即通知您,谢谢
  • 当你查看dispatch 的函数定义时,你会发现它只有一个参数。该参数必须是一个将 store 作为参数并返回 Future 的方法。您的方法看起来像这样,因此您可以直接将其作为参数传递。你的新方法看起来不像那样。因此,就参数类型和返回类型而言,您必须首先构建一个看起来像旧方法的方法。这就是() =&gt; () {} 所做的,它动态构建了一个方法。所以(x) =&gt; code; 构建了一个获取x 并返回任何code 返回的方法。
  • 我添加了一个文档链接,这样您可以获得比我在这里发表评论更好的解释。
猜你喜欢
  • 2021-09-24
  • 1970-01-01
  • 2018-08-19
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-25
相关资源
最近更新 更多