A dart package to interact with the WooCommerce REST API.

Overview

WooCommerce SDK for Dart

A dart package to interact with the WooCommerce API (now with null-safety). It uses OAuth1.0a behind the scenes to generate the signature and URL string for http based websites. It then makes calls and returns the data back to the calling function asynchronously.

Example code and preview

Examples

GET request (Fetch products)

Future getProducts() async {
  // Initialize the API
  WooCommerceAPI wooCommerceAPI = WooCommerceAPI(
      url: "https://www.yourwebsite.com",
      consumerKey: "ck_your_consumer_key",
      consumerSecret: "cs_your_consumer_secret");

  // Get data using the "products" endpoint
  var products = await wooCommerceAPI.getAsync("products");
  return products;
}

You can find a full example here

POST request (Create a customer)

Future createCustomer() async {
  try {
    var response = await wooCommerceAPI.postAsync(
      "customers",
      {
        "email": '[email protected]',
        "password": "123",
        "billing": {
          "first_name": "Samarth",
        }
      },
    );
    print(response); // JSON Object with response
  } catch (e) {
    print(e);
  }
}

Report any issues if you face any or drop me an email at [email protected]

Comments
  • Same error

    Same error

    Launching lib\main.dart on Android SDK built for x86 in debug mode... Initializing gradle... Resolving dependencies... Gradle task 'assembleDebug'... Built build\app\outputs\apk\debug\app-debug.apk. Installing build\app\outputs\apk\app.apk... Syncing files to device Android SDK built for x86... D/ (23443): HostConnection::get() New Host Connection established 0xe6d70dc0, tid 23472 D/EGL_emulation(23443): eglMakeCurrent: 0xe7226e60: ver 2 0 (tinfo 0xe7250a10) I/flutter (23443): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════ I/flutter (23443): The following NoSuchMethodError was thrown building: I/flutter (23443): The method '[]' was called on null. I/flutter (23443): Receiver: null I/flutter (23443): Tried calling: I/flutter (23443): I/flutter (23443): When the exception was thrown, this was the stack: I/flutter (23443): #0 Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5) I/flutter (23443): #1 _MyHomePageState.build.. (package:woocom/main.dart:78:55) I/flutter (23443): #2 SliverChildBuilderDelegate.build (package:flutter/src/widgets/sliver.dart:397:15) I/flutter (23443): #3 SliverMultiBoxAdaptorElement._build. (package:flutter/src/widgets/sliver.dart:1000:67) I/flutter (23443): #4 _HashMap.putIfAbsent (dart:collection/runtime/libcollection_patch.dart:143:29) I/flutter (23443): #5 SliverMultiBoxAdaptorElement._build (package:flutter/src/widgets/sliver.dart:1000:26) I/flutter (23443): #6 SliverMultiBoxAdaptorElement.createChild. (package:flutter/src/widgets/sliver.dart:1013:55) I/flutter (23443): #7 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2266:19) I/flutter (23443): #8 SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:1006:11) I/flutter (23443): #9 RenderSliverMultiBoxAdaptor._createOrObtainChild. (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:274:23) I/flutter (23443): #10 RenderObject.invokeLayoutCallback. (package:flutter/src/rendering/object.dart:1730:58) I/flutter (23443): #11 PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:799:15) I/flutter (23443): #12 RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1730:13) I/flutter (23443): #13 RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:263:5) I/flutter (23443): #14 RenderSliverMultiBoxAdaptor.addInitialChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:341:5) I/flutter (23443): #15 RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:78:12) I/flutter (23443): #16 RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7) I/flutter (23443): #17 RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:182:11) I/flutter (23443): #18 RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7) I/flutter (23443): #19 RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:405:13) I/flutter (23443): #20 RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1316:12) I/flutter (23443): #21 RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1234:20) I/flutter (23443): #22 RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7) I/flutter (23443): #23 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13) I/flutter (23443): #24 RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7) I/flutter (23443): #25 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13) I/flutter (23443): #26 RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7) I/flutter (23443): #27 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13) I/flutter (23443): #28 RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7) I/flutter (23443): #29 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13) I/flutter (23443): #30 RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7) I/flutter (23443): #31 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13) I/flutter (23443): #32 RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7) I/flutter (23443): #33 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13) I/flutter (23443): #34 RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7) I/flutter (23443): #35 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13) I/flutter (23443): #36 RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7) I/flutter (23443): #37 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13) I/flutter (23443): #38 RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7) I/flutter (23443): #39 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:142:11) I/flutter (23443): #40 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:339:7) I/flutter (23443): #41 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:212:7) I/flutter (23443): #42 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:356:14) I/flutter (23443): #43 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1509:7) I/flutter (23443): #44 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:768:18) I/flutter (23443): #45 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:281:19) I/flutter (23443): #46 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:677:13) I/flutter (23443): #47 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:219:5) I/flutter (23443): #48 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15) I/flutter (23443): #49 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9) I/flutter (23443): #50 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842:5) I/flutter (23443): #51 _invoke (dart:ui/hooks.dart:154:13) I/flutter (23443): #52 _drawFrame (dart:ui/hooks.dart:143:3) I/flutter (23443): ════════════════════════════════════════════════════════════════════════════════════════════════════

    opened by danasugu 6
  • Updated dependencies and various changes

    Updated dependencies and various changes

    Hi Samarth, these are the changes I made:

    • updated dependencies
    • added error handling for GET requests
    • explicit data types
    • doc comments for a better comprehension
    • updated full example
    opened by Nicuz 3
  • Old API version (V2)

    Old API version (V2)

    Although the API's are working fine but V3 parameters are not supported by this package. Inside the package I found that it uses V2 version of woocommerce API's

    opened by lxcool9243 1
  • type 'List<dynamic>' is not a subtype of type 'String'

    type 'List' is not a subtype of type 'String'

    Here is the the code line which is causing error:-

    subtitle: Text("Rs. " + s.data[index]["price"] + "/" + s.data[index]["tags"]),

    Following is the error:-

    type 'List<dynamic>' is not a subtype of type 'String'

    When trying to display data from Tags, Categories above error is displayed.

    opened by pricetoday 1
  • The following NoSuchMethodError was thrown during performLayout()

    The following NoSuchMethodError was thrown during performLayout()

    Using Exactly Your Code I Got This Error

    I/flutter (13726): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════ I/flutter (13726): The following NoSuchMethodError was thrown during performLayout(): I/flutter (13726): The method '[]' was called on null. I/flutter (13726): Receiver: null I/flutter (13726): Tried calling: I/flutter (13726): I/flutter (13726): When the exception was thrown, this was the stack: I/flutter (13726): #0 Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:48:5) I/flutter (13726): #1 _MyHomePageState.build.. (file:///C:/Projects/flutter/woo_commerce/lib/main.dart:78:55) I/flutter (13726): #2 SliverChildBuilderDelegate.build (package:flutter/src/widgets/sliver.dart:258:20) I/flutter (13726): #3 SliverMultiBoxAdaptorElement._build. (package:flutter/src/widgets/sliver.dart:783:67) I/flutter (13726): #4 _HashMap.putIfAbsent (dart:collection/runtime/libcollection_patch.dart:143:29) I/flutter (13726): #5 SliverMultiBoxAdaptorElement._build (package:flutter/src/widgets/sliver.dart:783:26) I/flutter (13726): #6 SliverMultiBoxAdaptorElement.createChild. (package:flutter/src/widgets/sliver.dart:796:55) I/flutter (13726): #7 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2235:19) I/flutter (13726): #8 SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:789:11) I/flutter (13726): #9 RenderSliverMultiBoxAdaptor._createOrObtainChild. (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:254:23) I/flutter (13726): #10 RenderObject.invokeLayoutCallback. (package:flutter/src/rendering/object.dart:1727:58) I/flutter (13726): #11 PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:796:15) I/flutter (13726): #12 RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1727:13) I/flutter (13726): #13 RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:243:5) I/flutter (13726): #14 RenderSliverMultiBoxAdaptor.addInitialChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:321:5) I/flutter (13726): #15 RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:78:12) I/flutter (13726): #16 RenderObject.layout (package:flutter/src/rendering/object.dart:1631:7) I/flutter (13726): #17 RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:182:11) I/flutter (13726): #18 RenderObject.layout (package:flutter/src/rendering/object.dart:1631:7) I/flutter (13726): #19 RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:405:13) I/flutter (13726): #20 RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1320:12) I/flutter (13726): #21 RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1238:20) I/flutter (13726): #22 RenderObject.layout (package:flutter/src/rendering/object.dart:1631:7) I/flutter (13726): #23 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:108:13) I/flutter (13726): #24 RenderObject.layout (package:flutter/src/rendering/object.dart:1631:7) I/flutter (13726): #25 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:108:13) I/flutter (13726): #26 RenderObject.layout (package:flutter/src/rendering/object.dart:1631:7) I/flutter (13726): #27 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:108:13) I/flutter (13726): #28 RenderObject.layout (package:flutter/src/rendering/object.dart:1631:7) I/flutter (13726): #29 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:108:13) I/flutter (13726): #30 RenderObject.layout (package:flutter/src/rendering/object.dart:1631:7) I/flutter (13726): #31 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:108:13) I/flutter (13726): #32 RenderObject.layout (package:flutter/src/rendering/object.dart:1631:7) I/flutter (13726): #33 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:108:13) I/flutter (13726): #34 RenderObject.layout (package:flutter/src/rendering/object.dart:1631:7) I/flutter (13726): #35 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:108:13) I/flutter (13726): #36 RenderObject.layout (package:flutter/src/rendering/object.dart:1631:7) I/flutter (13726): #37 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:108:13) I/flutter (13726): #38 RenderObject.layout (package:flutter/src/rendering/object.dart:1631:7) I/flutter (13726): #39 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:141:11) I/flutter (13726): #40 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:338:7) I/flutter (13726): #41 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:211:7) I/flutter (13726): #42 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:355:14) I/flutter (13726): #43 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1506:7) I/flutter (13726): #44 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:765:18) I/flutter (13726): #45 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:270:19) I/flutter (13726): #46 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:654:13) I/flutter (13726): #47 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:208:5) I/flutter (13726): #48 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15) I/flutter (13726): #49 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9) I/flutter (13726): #50 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842:5) I/flutter (13726): #51 _invoke (dart:ui/hooks.dart:128:13) I/flutter (13726): #52 _drawFrame (dart:ui/hooks.dart:117:3) I/flutter (13726): I/flutter (13726): The following RenderObject was being processed when the exception was fired: I/flutter (13726): RenderSliverList#8c35f relayoutBoundary=up2 NEEDS-LAYOUT NEEDS-PAINT I/flutter (13726): creator: SliverList ← MediaQuery ← SliverPadding ← Viewport ← _ScrollableScope ← I/flutter (13726): IgnorePointer-[GlobalKey#4e1f0] ← Semantics ← Listener ← _GestureSemantics ← I/flutter (13726): RawGestureDetector-[LabeledGlobalKey#99210] ← I/flutter (13726): _ScrollSemantics-[GlobalKey#e1260] ← RepaintBoundary ← ⋯ I/flutter (13726): parentData: paintOffset=Offset(0.0, 0.0) (can use size) I/flutter (13726): constraints: SliverConstraints(AxisDirection.down, GrowthDirection.forward, ScrollDirection.idle, I/flutter (13726): scrollOffset: 0.0, remainingPaintExtent: 603.4, crossAxisExtent: 411.4, crossAxisDirection: I/flutter (13726): AxisDirection.right, viewportMainAxisExtent: 603.4, remainingCacheExtent: 853.4 cacheOrigin: 0.0 ) I/flutter (13726): geometry: null I/flutter (13726): no children current live I/flutter (13726): This RenderObject has no descendants. I/flutter (13726): ════════════════════════════════════════════════════════════════════════════════════════════════════ I/flutter (13726): Another exception was thrown: NoSuchMethodError: The getter 'scrollOffsetCorrection' was called on null. I/flutter (13726): Another exception was thrown: NoSuchMethodError: The method 'debugAssertIsValid' was called on null. I/flutter (13726): Another exception was thrown: NoSuchMethodError: The getter 'visible' was called on null.

    opened by farisabbasi 1
  • Authentication

    Authentication

    I copied your code but my app is stuck on Loading text its not fetching products

    here's my code

    `import 'dart:async';

    import 'package:flutter/material.dart'; import 'package:woocommerce_api/woocommerce_api.dart';

    void main() => runApp(new MyApp());

    class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( title: 'Flutter Demo', theme: new ThemeData( primarySwatch: Colors.blue, ), home: new MyHomePage(title: 'WooCommerce API Demo'), ); } }

    class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key);

    final String title;

    @override _MyHomePageState createState() => new _MyHomePageState(); }

    class _MyHomePageState extends State {

    List products = [];

    Future getProducts() async {

    /// Initialize the API
    WooCommerceAPI wc_api = new WooCommerceAPI(
        "http://localhost/ropaarmario/wp-json/wc/v2/products",
        "ck_87f26757f5b65a28f50b9fb5b460793abb6f1d93",
        "cs_fa87963767fbe06b60fa23da38f31d514c51e2a3"
    );
    
    /// Get data using the endpoint
    var p = await wc_api.getAsync("products");
    return p;
    

    }

    @override void initState() { super.initState(); }

    @override Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar( title: new Text(widget.title), ), body: FutureBuilder( future: getProducts(), builder: (_, s){

          if(s.data == null){
            return Container(
              child: Center(
                child: Text("Loading..."),
              ),
            );
          }
    
          return ListView.builder(
              itemCount: s.data.length,
              itemBuilder: (_, index){
    
                /// create a list of products
                return ListTile(
                  leading: CircleAvatar(
                    child: Image.network(s.data[index]["images"][0]["src"]),
                  ),
                  title: Text(s.data[index]["name"]),
                  subtitle: Text("Buy now for \$ " + s.data[index]["price"]),
                );
    
              }
          );
        },
      ),
    );
    

    } } ` i checked on postman its working through oauth authentication method

    opened by farisabbasi 1
  • Error

    Error

    Because query_string 1.0.4 requires SDK version >=0.8.10+6 <2.0.0 and no versions of query_string match >1.0.4 <2.0.0, query_string ^1.0.4 is forbidden. So, because helo_words depends on woocommerce_api ^0.0.3 which depends on query_string ^1.0.4, version solving failed. pub get failed (1) exit code 1

    opened by thgdigital 1
  • Version compatibility

    Version compatibility

    Ive got error like this

    [salesapp] flutter packages get
    Running "flutter packages get" in salesapp...
    The current Dart SDK version is 2.1.0-dev.0.0.flutter-be6309690f.
    
    Because salesapp depends on woocommerce_api any which requires SDK version >=1.23.0 <2.0.0, version solving failed.
    pub get failed (1)
    exit code 1
    
    opened by ShashwatHiregoudar 1
  • The method '[]' was called on null

    The method '[]' was called on null

    Getting following error:-

    The method '[]' was called on null.
    Receiver: null
    Tried calling: []("images")
    
    When the exception was thrown, this was the stack
    #0      Object.noSuchMethod  (dart:core-patch/object_patch.dart:51:5)
    #1      _MyOrderPageState.build.<anonymous closure>.<anonymous closure> 
    package:apps/order.dart:80
    #2      SliverChildBuilderDelegate.build 
    package:flutter/…/widgets/sliver.dart:442
    #3      SliverMultiBoxAdaptorElement._build.<anonymous closure> 
    package:flutter/…/widgets/sliver.dart:1153
    #4      _HashMap.putIfAbsent  (dart:collection-patch/collection_patch.dart:137:29)
    

    Here is the code:-

    import 'dart:async';
    import 'package:flutter/material.dart';
    import 'package:woocommerce_api/woocommerce_api.dart';
    
    
    class OrderPage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return new MaterialApp(
          title: 'Flutter Demo',
          theme: new ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: new MyOrderPage(title: 'WooCommerce API Demo'),
        );
      }
    }
    
    class MyOrderPage extends StatefulWidget {
      MyOrderPage({Key key, this.title}) : super(key: key);
    
      final String title;
    
      @override
      _MyOrderPageState createState() => _MyOrderPageState();
    }
    
    class _MyOrderPageState extends State<MyOrderPage> {
    
      List<Widget> products = [];
    
      Future getProducts() async {
    
        /// Initialize the API
        WooCommerceAPI wcApi = WooCommerceAPI(
            "https://panahgah.com",
            "*****************************************************",
            "*****************************************************"
        );
        
        /// Get data using the endpoint
        var p = await wcApi.getAsync("products");
        return p;
      }
    
    
      @override
      void initState() {
        super.initState();
      }
      
    
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          
          appBar: new AppBar(
            title: new Text(widget.title),
          ),
          
          body: FutureBuilder(
            future: getProducts(),
            builder: (_, s){
    
              if(s.data == null){
                return Container(
                  child: Center(
                    child: Text("Loading..."),
                  ),
                );
              }
    
              return ListView.builder(
                itemCount: s.data.length,
                itemBuilder: (_, index){
                
                /// create a list of products
                  return ListTile(
                    leading: CircleAvatar(
                      child: Image.network(s.data[index]["images"][0]["src"]),
                    ), 
                    title: Text(s.data[index]["name"]),
                    subtitle: Text("Buy now for \$ " + s.data[index]["price"]),
                  );
    
                }
              );
            },
          ),
        );
      }
    }
    
    

    My JSON is working fine. Here is the output from my website:-

    [
    {
    "id": 24,
    "name": "Ginger",
    "slug": "ginger",
    "permalink": "https://panahgah.com/product/ginger/",
    "date_created": "2019-11-30T17:57:51",
    "date_created_gmt": "2019-11-30T17:57:51",
    "date_modified": "2019-11-30T17:57:55",
    "date_modified_gmt": "2019-11-30T17:57:55",
    "type": "simple",
    "status": "publish",
    "featured": false,
    "catalog_visibility": "visible",
    "description": "",
    "short_description": "",
    "sku": "",
    "price": "30",
    "regular_price": "30",
    "sale_price": "",
    "date_on_sale_from": null,
    "date_on_sale_from_gmt": null,
    "date_on_sale_to": null,
    "date_on_sale_to_gmt": null,
    "price_html": "<span class=\"woocommerce-Price-amount amount\"><span class=\"woocommerce-Price-currencySymbol\">&#8360;</span>30.00</span>",
    "on_sale": false,
    "purchasable": true,
    "total_sales": 4,
    "virtual": false,
    "downloadable": false,
    "downloads": [],
    "download_limit": -1,
    "download_expiry": -1,
    "external_url": "",
    "button_text": "",
    "tax_status": "taxable",
    "tax_class": "",
    "manage_stock": false,
    "stock_quantity": null,
    "stock_status": "instock",
    "backorders": "no",
    "backorders_allowed": false,
    "backordered": false,
    "sold_individually": false,
    "weight": "",
    "dimensions": {
    "length": "",
    "width": "",
    "height": ""
    },
    "shipping_required": true,
    "shipping_taxable": true,
    "shipping_class": "",
    "shipping_class_id": 0,
    "reviews_allowed": false,
    "average_rating": "0.00",
    "rating_count": 0,
    "related_ids": [
    22,
    21
    ],
    "upsell_ids": [],
    "cross_sell_ids": [],
    "parent_id": 0,
    "purchase_note": "",
    "categories": [
    {
    "id": 22,
    "name": "Vegetables",
    "slug": "vegetables"
    }
    ],
    "tags": [],
    "images": [],
    "attributes": [
    {
    "id": 1,
    "name": "Unit",
    "position": 0,
    "visible": true,
    "variation": false,
    "options": [
    "1/4 KG"
    ]
    }
    ],
    "default_attributes": [],
    "variations": [],
    "grouped_products": [],
    "menu_order": 0,
    "meta_data": [],
    "_links": {
    "self": [
    {
    "href": "https://panahgah.com/wp-json/wc/v3/products/24"
    }
    ],
    "collection": [
    {
    "href": "https://panahgah.com/wp-json/wc/v3/products"
    }
    ]
    }
    },
    ]
    

    P.S: I have hidden Consumer Key and Consumer Secret for this post

    opened by pricetoday 0
  • The stock_status parameter does not work

    The stock_status parameter does not work

    I'm trying to get all the products in a category that have stock_status=instock but that parameter doesn't work. The same api consumed from PHP does work, so something in flutter is wrong. I've tried all the ways but I can't get it to work. Any help?

    Future getProduct(int idCategory) async {
        WooCommerceAPI wooCommerceAPI = WooCommerceAPI(
            url: "xxx/",
            consumerKey: "xxx",
            consumerSecret: "xxx");
    
        var productos = await wooCommerceAPI
            .getAsync("products?stock_status='instock'&per_page=100");
        
        return productos;
      }
    
    opened by bertux77 1
  • Security concern on saving secret in app

    Security concern on saving secret in app

    Hi I am new to mobile development, sorry if I asked a dumb question.

    Isn't that saving consumer secret in the app is a bad practice and potentially lead to security breach?

    opened by jjteoh-pingspace 2
Owner
Samarth Agarwal
App/Web Developer, Instructor, Author, Content Creator Visit https://www.youtube.com/user/thesamarthagarwal to learn from me.
Samarth Agarwal
A WordPress API client for dart with support for WooCommerce and custom namespaces.

WordPress REST API client for Dart | Flutter Description A WordPress REST API client for dart with support for WooCommerce and custom namespaces/endpo

DHM Group 73 Nov 26, 2022
Bhagavad Gita app using flutter & Bhagavad-Gita-API is A lightweight Node.js based Bhagavad Gita API [An open source rest api on indian Vedic Scripture Shrimad Bhagavad Gita].

Gita Bhagavad Gita flutter app. Download App - Playstore Web Application About Bhagavad Gita app using flutter & Bhagavad-Gita-API is A lightweight No

Ravi Kovind 7 Apr 5, 2022
Woocommerce SDK for Flutter. The Complete Woo Commerce SDK for Flutter.

woocommerce Woocommerce SDK for Flutter. Getting Started Add the package to your pubspec.yaml and import. import 'package:woocommerce/woocommerce.dart

RAY 105 Dec 6, 2022
A simple and robust way to interact with Anilibria API.

anilibria.dart A simple and robust way to interact with Anilibria API. Example import 'package:anilibria/anilibria.dart'; void main() async { final

Arsenii Liunsha 3 Jun 13, 2022
FLutter Api Integration - Flutter Rest API Integration

Flutter_Rest_Api_integration Flutter_Rest_Api_integration. Preview How To Use To

Rahul Ranjan Singh 0 Feb 17, 2022
Movie API Use Rest And Restful API

movie_api use rest and restful api The home screen fetches data from the Episodate API and shows a list of popular shows. The details screen and the s

Le Gia Huy 1 Dec 5, 2022
In this video we will learn how to Create CRUD Rest API for our Flutter application using NODEJS API.

Flutter CRUD Using NodeJS API In this video we will learn how to Create CRUD Rest API for our Flutter application using NODEJS API. ?? Packages Used h

SnippetCoder 14 Dec 30, 2022
Netflix app UI clone using bloc,Rest API and TMDB for API key

netflix_flutter project_using_bloc packages Used flutter_bloc json_serializable get_it dio A few resources to get you started if this is your first Fl

Pranav Pv 16 Nov 25, 2022
Dart client library to interact with Supabase Storage

storage-dart Dart client library to interact with Supabase Storage. Contributing Fork the repo on GitHub Clone the project to your own machine Commit

Supabase 22 Dec 14, 2022
A simple and robust dart FTP Client Library to interact with FTP Servers with possibility of zip and unzip files.

Flutter FTP Connect Flutter simple and robust dart FTP Connect Library to interact with FTP Servers with possibility of zip and unzip files. Key Featu

Salim Lachdhaf 49 Dec 13, 2022
The deta-dart library is the simple way to interact with the services of the free clud on the Deta plataform.

Deta A Dart package to interact with the HTTP API of the free services of the Deta plataform. ?? WARNING ?? This client should only be used on the ser

Yeikel Uriarte Arteaga 6 May 2, 2022
Backbone - A Dart framework for writing REST APIs from an Open API spec

The Backbone Dart Backend Framework A Dart framework for writing REST APIs from

Marcus Twichel 39 Oct 6, 2022
Developed using Dart & Flutter & Rest Api & Dio & Bloc & SharedPreferenes.

This is an ecommerce app which contain Many features like : Sign in , Sign up , Verify Email , log out. Fetch Products Data Search for any product Add

Mohamed Hashim 4 Nov 3, 2022
Tezart helps to interact with ​Tezos blockchain.

Tezart What it is Tezart is a Dart library for building decentralized applications on Tezos blockchain. Tezart interacts with a Tezos node to send tra

MoneyTrack 21 Dec 14, 2022
meg4cyberc4t 11 Oct 24, 2022
A highly customizable Flutter widget to render and interact with JSON objects.

The spreadsheet with superpowers ✨ ! JSON Data Explorer A highly customizable widget to render and interact with JSON objects. Features Expand and col

rows 15 Dec 21, 2022
Git+ is your ultimate GitLab mobile app that lets you interact with your projects like as if you were using desktop.

Git+ for GitLab Git+ is your ultimate GitLab mobile app that lets you interact with your projects like as if you were using desktop. Git+ lets you see

Marek Gvora 38 Jan 7, 2023
Open source Flutter-based GUI application that enables you to interact with Amphitheatre

Amphitheatre Desktop Amphitheatre Desktop is an open source Flutter-based application that enables you to interact with Amphitheatre using a GUI inste

Amphitheatre 17 Dec 16, 2022
Scouter is a package which was made following the goal to provide a NestJS-like experience to Dart Developers that want to develop Rest APIS

Scouter is a package which was made following the goal to provide a NestJS-like experience to Dart Developers that want to develop Rest APIS Features

Vinicius Amélio 3 Sep 12, 2022