首页 > 解决方案 > 在颤振等待woocommerce休息api中等待消息

问题描述

我使用带有颤振的 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;
    }
  }

有什么帮助吗?

标签: wordpressapirestflutterwoocommerce

解决方案


参考这个小例子:

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;});
        }
        ),
      ),
    );
   } 
 }

然后你可以根据你的需要做一些事情!


推荐阅读