首页 > 解决方案 > Flutter web,onTap 在 safari 上被调用两次

问题描述

在我的一些 onTap 函数的 Safari 上,我的代码被执行了两次。它并不总是偶尔发生。

例如:

goToSearchPage() {
    Navigator.pushNamed(
      context, '/searchPage',
      arguments: SearchPageArguments(
         matchcode: _controllerSearchInput.text.trim().toString()
      )
    );

    _controllerSearchInput.text = '';
}    

onTap: () {
      _controllerSearchInput.text = matchcode;
      goToSearchPage();
},

当 onTap 有时它会加载 2 次searchpage,第一次使用正确的参数,第二次使用空参数。

另一个例子:

onTap: () {
  setState(() {
    _loading = true;
  });
  http.Client()
  .get("https://myApi")
  .then((response) =>response.body)
  .then(json.decode)
  .then((json) {
    setState(() {
      _loading = false;
    });

    Navigator.popAndPushNamed(
      context, '/paymentPage',
      arguments: PaymentPageArguments(
        ordersToPay: json
      )
    );
  });
}

在这种情况下,我的 API 被调用后paymentPage没有显示,因为我认为导航器被弹出两次而不是一次。我的 API 只被调用一次。

那些奇怪的行为只发生在 safari 中,我不确定如何调试它。

标签: fluttersafariflutter-web

解决方案


推荐阅读