{"id":32547,"date":"2024-11-01T09:09:54","date_gmt":"2024-11-01T09:09:54","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=32547"},"modified":"2024-11-01T11:54:51","modified_gmt":"2024-11-01T11:54:51","slug":"flutter-course-exploring-the-provider-tool","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/32547\/","title":{"rendered":"Flutter Course: Exploring the Provider Tool"},"content":{"rendered":"<p>Hello! In this course, we will take a deep dive into <strong>Provider<\/strong>, a popular tool for state management in Flutter. State management is a crucial element in the process of developing Flutter applications, as it is important to manage the flow of data and UI updates effectively. Provider is a tool that helps implement this state management easily.<\/p>\n<h2>1. What is Provider?<\/h2>\n<p>Provider is a library that assists in effectively managing and passing state within Flutter applications. It was created by the official Flutter team and is characterized by a simple API and high performance. Provider is based on InheritedWidget and has the ability to detect changes in data and automatically update the UI. It offers advantages such as simplification of state management, improved code reusability, and ease of testing.<\/p>\n<h3>1.1 Why should we use Provider?<\/h3>\n<ul>\n<li><strong>Simple API:<\/strong> Provider implements state management in a simpler way with an easy-to-understand and use API.<\/li>\n<li><strong>Performance optimization:<\/strong> Only the UI widgets that subscribe to state changes are updated, ensuring excellent performance.<\/li>\n<li><strong>Dependency injection:<\/strong> Provider provides an easy way to inject dependencies.<\/li>\n<li><strong>Ease of testing:<\/strong> Using Provider makes it easier to change the application&#8217;s state for testing purposes.<\/li>\n<\/ul>\n<h2>2. Installing Provider<\/h2>\n<p>To use Provider, you must first install the library. Open the <code>pubspec.yaml<\/code> file of your Flutter project and add the following dependency:<\/p>\n<pre><code>dependencies:\n  provider: ^6.0.0<\/code><\/pre>\n<p>After adding the dependency, run the following command to fetch the package:<\/p>\n<pre><code>flutter pub get<\/code><\/pre>\n<h2>3. Basic Usage of Provider<\/h2>\n<p>To understand the basic usage of Provider, let&#8217;s look at a simple example. Here, we will implement a counter application.<\/p>\n<h3>3.1 Creating a model class<\/h3>\n<p>First, we need to create a model class to manage the state of the counter. Let&#8217;s create a class called <code>Counter<\/code> as follows:<\/p>\n<pre><code>import 'package:flutter\/foundation.dart';\n\nclass Counter with ChangeNotifier {\n  int _count = 0;\n\n  int get count => _count;\n\n  void increment() {\n    _count++;\n    notifyListeners(); \/\/ Notify about state change\n  }\n}<\/code><\/pre>\n<h3>3.2 Managing state with Provider<\/h3>\n<p>Now, let&#8217;s register the <code>Counter<\/code> class as the application state using Provider. We will modify the <code>main.dart<\/code> file to register Provider:<\/p>\n<pre><code>import 'package:flutter\/material.dart';\nimport 'package:provider\/provider.dart';\n\nvoid main() {\n  runApp(\n    ChangeNotifierProvider(\n      create: (context) => Counter(),\n      child: MyApp(),\n    ),\n  );\n}\n\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      home: CounterScreen(),\n    );\n  }\n}<\/code><\/pre>\n<h3>3.3 Creating the UI<\/h3>\n<p>Now we will create the UI to complete the counter application. Let&#8217;s write the <code>CounterScreen<\/code>:<\/p>\n<pre><code>class CounterScreen extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    final counter = Provider.of<Counter>(context);\n    \n    return Scaffold(\n      appBar: AppBar(\n        title: Text('Counter Example'),\n      ),\n      body: Center(\n        child: Column(\n          mainAxisAlignment: MainAxisAlignment.center,\n          children: [\n            Text(\n              'Current Count:',\n              style: TextStyle(fontSize: 24),\n            ),\n            Text(\n              '${counter.count}',\n              style: TextStyle(fontSize: 48),\n            ),\n          ],\n        ),\n      ),\n      floatingActionButton: FloatingActionButton(\n        onPressed: () {\n          counter.increment();\n        },\n        child: Icon(Icons.add),\n      ),\n    );\n  }\n}<\/code><\/pre>\n<p>Now, when you run this application and press the &#8216;Add&#8217; button, you can see the count increase. This demonstrates how to effectively manage data and update the UI using Provider.<\/p>\n<h2>4. Various uses of Provider<\/h2>\n<p>Provider can be utilized in various ways beyond basic usage. You can combine multiple Providers or use Nested Providers, allowing for flexible state management tailored to different scenarios.<\/p>\n<h3>4.1 Using MultiProvider<\/h3>\n<p>When there is a need to manage multiple states, you can use <code>MultiProvider<\/code>. For example, if you need to manage a counter and an additional state, you can write it as follows:<\/p>\n<pre><code>class Models {\n  static Counter counter = Counter();\n  static AnotherModel anotherModel = AnotherModel();\n}\n\nvoid main() {\n  runApp(\n    MultiProvider(\n      providers: [\n        ChangeNotifierProvider(create: (context) => Models.counter),\n        ChangeNotifierProvider(create: (context) => Models.anotherModel),\n      ],\n      child: MyApp(),\n    ),\n  );\n}<\/code><\/pre>\n<h3>4.2 Using the Consumer widget<\/h3>\n<p>When fetching and changing data in the UI, you can use the <code>Consumer<\/code> widget to selectively subscribe to only the data you need. Here is an example of using <code>Consumer<\/code>:<\/p>\n<pre><code>class CounterScreen extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(\n        title: Text('Counter Example'),\n      ),\n      body: Center(\n        child: Consumer<Counter>(\n          builder: (context, counter, child) {\n            return Text(\n              '${counter.count}',\n              style: TextStyle(fontSize: 48),\n            );\n          },\n        ),\n      ),\n      floatingActionButton: FloatingActionButton(\n        onPressed: () {\n          context.read<Counter>().increment();\n        },\n        child: Icon(Icons.add),\n      ),\n    );\n  }\n}<\/code><\/pre>\n<p>By using <code>Consumer<Counter><\/code>, we subscribe to changes in that state, and the UI within that block will only rebuild when updated.<\/p>\n<h2>5. Real-world example: Application in a complex environment<\/h2>\n<p>Now, let&#8217;s explore how to utilize Provider in a more complex application rather than a simple one. For example, we will create a shopping cart application to manage products purchased by users.<\/p>\n<pre><code>class CartItem {\n  final String name;\n  final double price;\n\n  CartItem(this.name, this.price);\n}\n\nclass Cart with ChangeNotifier {\n  final List<CartItem> _items = [];\n\n  List<CartItem> get items => _items;\n\n  void addItem(CartItem item) {\n    _items.add(item);\n    notifyListeners();\n  }\n\n  double get totalAmount {\n    return _items.fold(0.0, (total, item) => total + item.price);\n  }\n}<\/code><\/pre>\n<p>Now we will create a CartProvider and register it with MultiProvider so that it can be used across different parts of the app:<\/p>\n<pre><code>void main() {\n  runApp(\n    MultiProvider(\n      providers: [\n        ChangeNotifierProvider(create: (context) => Cart()),\n      ],\n      child: MyApp(),\n    ),\n  );\n}<\/code><\/pre>\n<p>Next, let&#8217;s build the UI that allows users to add products. The user interface will include a product list and a cart button:<\/p>\n<pre><code>class ProductList extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    final cart = Provider.of<Cart>(context);\n    \n    return ListView(\n      children: [\n        ListTile(\n          title: Text('Product 1'),\n          trailing: IconButton(\n            icon: Icon(Icons.add),\n            onPressed: () {\n              cart.addItem(CartItem('Product 1', 29.99));\n            },\n          ),\n        ),\n        ListTile(\n          title: Text('Product 2'),\n          trailing: IconButton(\n            icon: Icon(Icons.add),\n            onPressed: () {\n              cart.addItem(CartItem('Product 2', 19.99));\n            },\n          ),\n        ),\n      ],\n    );\n  }\n}<\/code><\/pre>\n<h2>6. Advantages and disadvantages of state management<\/h2>\n<p>State management with Provider offers many advantages. However, there are also drawbacks. Without a deep understanding of state management, incorrect implementations can lead to code complexity.<\/p>\n<h3>6.1 Advantages<\/h3>\n<ul>\n<li>Reusable code: The same state can be easily used across multiple screens.<\/li>\n<li>Performance improvement: Only the necessary widgets are updated, providing performance benefits.<\/li>\n<li>Ease of maintenance: Thanks to a simple API, maintaining the code becomes easier.<\/li>\n<\/ul>\n<h3>6.2 Disadvantages<\/h3>\n<ul>\n<li>Complex applications can make the structure of Provider even more complicated.<\/li>\n<li>If the scope of the state is unclear, it can be misused.<\/li>\n<li>Developer experience is crucial for implementing proper state management.<\/li>\n<\/ul>\n<h2>7. Conclusion<\/h2>\n<p>Today, we explored the Provider tool in Flutter. Provider leverages the power of state management to make the flow of the application smoother. As the complexity of apps increases, the significance of state management also rises, and I hope this course has helped you grasp the basic concepts and usage of Provider.<\/p>\n<p>In the next course, we will cover more advanced features and patterns. If you have any questions or need additional help regarding this course, please leave a comment. Thank you!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello! In this course, we will take a deep dive into Provider, a popular tool for state management in Flutter. State management is a crucial element in the process of developing Flutter applications, as it is important to manage the flow of data and UI updates effectively. Provider is a tool that helps implement this &hellip; <a href=\"https:\/\/atmokpo.com\/w\/32547\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Flutter Course: Exploring the Provider Tool&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[151],"tags":[],"class_list":["post-32547","post","type-post","status-publish","format-standard","hentry","category-flutter-course"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Flutter Course: Exploring the Provider Tool - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/32547\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Flutter Course: Exploring the Provider Tool - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Hello! In this course, we will take a deep dive into Provider, a popular tool for state management in Flutter. State management is a crucial element in the process of developing Flutter applications, as it is important to manage the flow of data and UI updates effectively. Provider is a tool that helps implement this &hellip; \ub354 \ubcf4\uae30 &quot;Flutter Course: Exploring the Provider Tool&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/32547\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:09:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:54:51+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/32547\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/32547\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Flutter Course: Exploring the Provider Tool\",\"datePublished\":\"2024-11-01T09:09:54+00:00\",\"dateModified\":\"2024-11-01T11:54:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/32547\/\"},\"wordCount\":747,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Flutter course\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/32547\/\",\"url\":\"https:\/\/atmokpo.com\/w\/32547\/\",\"name\":\"Flutter Course: Exploring the Provider Tool - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:09:54+00:00\",\"dateModified\":\"2024-11-01T11:54:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/32547\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/32547\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/32547\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Flutter Course: Exploring the Provider Tool\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Flutter Course: Exploring the Provider Tool - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atmokpo.com\/w\/32547\/","og_locale":"ko_KR","og_type":"article","og_title":"Flutter Course: Exploring the Provider Tool - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Hello! In this course, we will take a deep dive into Provider, a popular tool for state management in Flutter. State management is a crucial element in the process of developing Flutter applications, as it is important to manage the flow of data and UI updates effectively. Provider is a tool that helps implement this &hellip; \ub354 \ubcf4\uae30 \"Flutter Course: Exploring the Provider Tool\"","og_url":"https:\/\/atmokpo.com\/w\/32547\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:09:54+00:00","article_modified_time":"2024-11-01T11:54:51+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"5\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/32547\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/32547\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Flutter Course: Exploring the Provider Tool","datePublished":"2024-11-01T09:09:54+00:00","dateModified":"2024-11-01T11:54:51+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/32547\/"},"wordCount":747,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Flutter course"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/32547\/","url":"https:\/\/atmokpo.com\/w\/32547\/","name":"Flutter Course: Exploring the Provider Tool - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:09:54+00:00","dateModified":"2024-11-01T11:54:51+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/32547\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/32547\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/32547\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Flutter Course: Exploring the Provider Tool"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/32547","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=32547"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/32547\/revisions"}],"predecessor-version":[{"id":32548,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/32547\/revisions\/32548"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=32547"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=32547"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=32547"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}