【问题标题】:Await message in flutter waiting woocommerce rest api在颤振等待woocommerce休息api中等待消息
【发布时间】:2021-04-23 14:05:32
【问题描述】:

我使用带有颤振的 woocommerce rest api 来获取产品变化。 Woocommerce rest api 太慢而无法获得这种变化。 我需要向用户发送一条消息以等待该过程完成。 如何将这条消息放入代码中?

     @override
  Future<List<ProductVariation>> getProductVariations(Product product,
      {String lang = 'en'}) async {
    try {
      final List<ProductVariation> list = [];
      int page = 1;

      while (true) {
        String endPoint =
            "products/${product.id}/variations?per_page=100&page=$page";
        if (kAdvanceConfig["isMultiLanguages"]) {
          endPoint += "&lang=$lang";
        }

        var response = await wcApi.getAsync(endPoint);
        if (response is Map && isNotBlank(response["message"])) {
          throw Exception(response["message"]);
        } else {
          if (response is List && response.isEmpty) {
            /// No more data.
            break;
          }
          for (var item in response) {
            if (item['visible']) {
              list.add(ProductVariation.fromJson(item));
            }
          }

          /// Fetch next page.
          page++;
        }
      }

      return list;
    } catch (e) {
      //This error exception is about your Rest API is not config correctly so that not return the correct JSON format, please double check the document from this link https://docs.inspireui.com/fluxstore/woocommerce-setup/
      rethrow;
    }
  }

有什么帮助吗?

【问题讨论】:

  • 只是想确认一下。您想要某种 toast 或加载小部件来通知用户请求仍在进行中?

标签: wordpress api rest flutter woocommerce


【解决方案1】:

参考这个小例子:

class Waitscreen extends StatefulWidget {
      Waitscreen ({Key key}) : super(key: key);
    
      @override
      _WaitscreenState createState() => _WaitscreenState();
    }
    
    class _WaitscreenState extends State<Waitscreen> {
      bool _isLoading = false;

    @override
    Widget build(BuildContext context) {
     return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: RaisedButton(
        child: Text(_isLoading ? "Loading..." : "Load"),
          onPressed: () async {
            setState((){_isLoading = !_isLoading;});
            // TODO
            await Future.delayed(Duration(seconds: 5)); // await getProductVariations...
            // TODO
            setState((){_isLoading = !_isLoading;});
        }
        ),
      ),
    );
   } 
 }

然后你可以根据你的需要做类似的事情!

【讨论】:

  • 谢谢!但我不知道如何实施这个解决方案。我是 Flutter 的新手
  • @Jhakiz 请不要在您的所有帖子中添加指向 OP 帐户的链接。它增加了不必要的混乱。
猜你喜欢
  • 2020-10-25
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
  • 2020-09-01
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多