{"id":315,"date":"2024-03-09T07:18:50","date_gmt":"2024-03-09T15:18:50","guid":{"rendered":"https:\/\/kdcinfo.com\/blog\/?p=315"},"modified":"2024-03-09T07:18:54","modified_gmt":"2024-03-09T15:18:54","slug":"flutter-http-retryclient-example","status":"publish","type":"post","link":"https:\/\/kdcinfo.com\/blog\/2024\/03\/09\/flutter-http-retryclient-example\/","title":{"rendered":"Flutter HTTP RetryClient Example"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">One can only hope that developers who implement HTTP calls in their Flutter apps are aware of the <a href=\"https:\/\/pub.dev\/documentation\/http\/latest\/retry\/RetryClient-class.html\" target=\"_blank\" rel=\"noreferrer noopener\">`<code>RetryClient<\/code>` class<\/a>. Although <code>http<\/code> examples provided by streamlined tutorials across the web are helpful, they may not always provide a complete picture of the `http` package&#8217;s capabilities. And because calls to common API endpoints are typically developed under happy path conditions, it can be easy to overlook the need for something like the <code>RetryClient<\/code> class.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">[<strong>http: RetryClient<\/strong>] By default, this retries any request whose response has status code 503 Temporary Failure up to three retries. It waits 500ms before the first retry, and increases the delay by 1.5x each time. All of this can be customized using the\u00a0<a href=\"https:\/\/pub.dev\/documentation\/http\/latest\/retry\/RetryClient\/RetryClient.html\" target=\"_blank\" rel=\"noreferrer noopener\"><code>RetryClient()<\/code><\/a>\u00a0constructor.<\/p>\n<cite>Google: <a href=\"https:\/\/pub.dev\" target=\"_blank\" rel=\"noreferrer noopener\">pub.dev<\/a> | <a href=\"https:\/\/pub.dev\/packages\/http\" target=\"_blank\" rel=\"noreferrer noopener\">http package<\/a><\/cite><\/blockquote>\n\n\n<div class=\"wp-block-image wp-duotone-unset-1\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6af67fb6cece8&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6af67fb6cece8\" class=\"aligncenter size-medium is-resized wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"197\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/kdcinfo.com\/blog\/wp-content\/uploads\/2024\/03\/http_with_retry_client-300x197.png\" alt=\"A RetryClient simple example\" class=\"wp-image-324\" style=\"width:550px\" srcset=\"https:\/\/kdcinfo.com\/blog\/wp-content\/uploads\/2024\/03\/http_with_retry_client-300x197.png 300w, https:\/\/kdcinfo.com\/blog\/wp-content\/uploads\/2024\/03\/http_with_retry_client-1024x674.png 1024w, https:\/\/kdcinfo.com\/blog\/wp-content\/uploads\/2024\/03\/http_with_retry_client-768x506.png 768w, https:\/\/kdcinfo.com\/blog\/wp-content\/uploads\/2024\/03\/http_with_retry_client.png 1346w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">I was attempting to fix an uncaught exception error when loading an app on an emulator when I discovered the <code>RetryClient<\/code> class. And although it didn&#8217;t help fix that particular exception, it really felt this class should be a part of <strong><em>any<\/em><\/strong> HTTP call. Like, <code>http<\/code> and the <code>RetryClient<\/code> wrapper should be part and parcel to every HTTP call. Like selling hardware firewalls with computers. Like, a house with a roof. Or, you know, like, peanut butter and talking horses.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In any case, I couldn&#8217;t find many expanded <a href=\"https:\/\/pub.dev\/packages\/http#retrying-requests\" target=\"_blank\" rel=\"noreferrer noopener\">examples for the <code>RetryClient<\/code> class<\/a> in my search, so I took a little time to develop it out manually. The following is the result.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I hope it helps someone, and I&#8217;m always open to suggestions for making things better.<\/p>\n\n\n\n<pre class=\"wp-block-code has-border-color has-black-background-color has-background\" style=\"border-color:#0693e3;border-radius:15px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\"><code>import 'dart:developer';\r\n\r\n\/\/\/\r\n\/\/\/ *** The CONFIGS ***\r\n\/\/\/\r\n\r\n\/\/\/ These HTTP response status codes determine if an HTTP call is retried below.\r\n\/\/\/ Source: https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Status\r\nfinal httpRetryResponseStatusCodes = &lt;int>&#91;\r\n  400, \/\/ | Bad Request\r\n  401, \/\/ | Unauthorized\r\n  403, \/\/ | Forbidden\r\n  404, \/\/ | Not Found\r\n  408, \/\/ | Request Timeout\r\n  409, \/\/ | Conflict\r\n  429, \/\/ | Too Many Requests\r\n  500, \/\/ | Internal Server Error\r\n  502, \/\/ | Bad Gateway\r\n  503, \/\/ | Service Unavailable (Temporary Failure)\r\n  504, \/\/ | Gateway Timeout\r\n];\r\n\r\nconst apiUrl = 'https:\/\/yourdomain.com\/api\/endpoint.php';\r\nfinal apiUri = Uri.parse(apiUrl);\r\n\r\nconst apiErr = 'Retry error: Please check your connection and try again.';\r\n\r\nconst whichForm = 'login';\r\nfinal returnObj = &lt;String, List&lt;dynamic>>{\r\n  'httpStatus': &#91;],\r\n  'status': &#91;],\r\n  'message': &#91;],\r\n  'whichForm': &#91;whichForm],\r\n};\r\n\r\nfinal (userId, token) = await _injectedNetworkServiceApi.getAuthInfo;\r\nfinal urlData = {\r\n  'userId': userId,\r\n  'userToken': token,\r\n  'whichForm': whichForm,\r\n};\r\n\r\nlate final Response response;\r\n\r\n\/\/\/\r\n\/\/\/ *** The RETRY ***\r\n\/\/\/\r\n\r\n\/\/\/ RetryClient Sources:\r\n\/\/\/   https:\/\/pub.dev\/packages\/http#retrying-requests\r\n\/\/\/   https:\/\/pub.dev\/documentation\/http\/latest\/retry\/RetryClient-class.html\r\n\/\/\/\r\nfinal client = RetryClient(\r\n  http.Client(),\r\n  \/\/ retries: 7, \/\/ Default: 3\r\n  whenError: (error, stackTrace) => true,\r\n  when: (response) => httpRetryResponseStatusCodes.contains(response.statusCode),\r\n  onRetry: (request, response, retryCount) {\r\n    log('&#91;RetryClient] &#91;onRetry] &#91;$retryCount] $request');\r\n  },\r\n);\r\n\r\ntry {\r\n  response = await client.post(\r\n    apiUri,\r\n    body: json.encode(urlData),\r\n  );\r\n} catch (err) {\r\n  returnObj&#91;'httpStatus']!.add('500');\r\n  returnObj&#91;'status']!.add('error');\r\n  returnObj&#91;'message']!.add(apiErr);\r\n  return returnObj;\r\n  \/\/\r\n} finally {\r\n  client.close();\r\n}\r\n\r\nfinal responseData = json.decode(response.body) as Map&lt;String, dynamic>;\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cheers!<br>&#8211; Keith | <a href=\"https:\/\/keithdc.com\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/keithdc.com<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>One can only hope that developers who implement HTTP calls in their Flutter apps are aware of the `RetryClient` class. Although http examples provided by<\/p>\n","protected":false},"author":1,"featured_media":324,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[110,123,124],"class_list":["post-315","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-flutter","tag-flutter","tag-http","tag-retryclient"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Flutter HTTP RetryClient Example - App Development: Odds and Ends<\/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:\/\/kdcinfo.com\/blog\/2024\/03\/09\/flutter-http-retryclient-example\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Flutter HTTP RetryClient Example - App Development: Odds and Ends\" \/>\n<meta property=\"og:description\" content=\"One can only hope that developers who implement HTTP calls in their Flutter apps are aware of the `RetryClient` class. Although http examples provided by\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kdcinfo.com\/blog\/2024\/03\/09\/flutter-http-retryclient-example\/\" \/>\n<meta property=\"og:site_name\" content=\"App Development: Odds and Ends\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-09T15:18:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-09T15:18:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kdcinfo.com\/blog\/wp-content\/uploads\/2024\/03\/http_with_retry_client.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1346\" \/>\n\t<meta property=\"og:image:height\" content=\"886\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Keith D Commiskey\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Keith D Commiskey\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/2024\\\/03\\\/09\\\/flutter-http-retryclient-example\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/2024\\\/03\\\/09\\\/flutter-http-retryclient-example\\\/\"},\"author\":{\"name\":\"Keith D Commiskey\",\"@id\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/#\\\/schema\\\/person\\\/87980b154db7bd0cd7c569ca09328bac\"},\"headline\":\"Flutter HTTP RetryClient Example\",\"datePublished\":\"2024-03-09T15:18:50+00:00\",\"dateModified\":\"2024-03-09T15:18:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/2024\\\/03\\\/09\\\/flutter-http-retryclient-example\\\/\"},\"wordCount\":255,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/#\\\/schema\\\/person\\\/87980b154db7bd0cd7c569ca09328bac\"},\"image\":{\"@id\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/2024\\\/03\\\/09\\\/flutter-http-retryclient-example\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/http_with_retry_client.png\",\"keywords\":[\"flutter\",\"http\",\"RetryClient\"],\"articleSection\":[\"flutter\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/2024\\\/03\\\/09\\\/flutter-http-retryclient-example\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/2024\\\/03\\\/09\\\/flutter-http-retryclient-example\\\/\",\"url\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/2024\\\/03\\\/09\\\/flutter-http-retryclient-example\\\/\",\"name\":\"Flutter HTTP RetryClient Example - App Development: Odds and Ends\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/2024\\\/03\\\/09\\\/flutter-http-retryclient-example\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/2024\\\/03\\\/09\\\/flutter-http-retryclient-example\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/http_with_retry_client.png\",\"datePublished\":\"2024-03-09T15:18:50+00:00\",\"dateModified\":\"2024-03-09T15:18:54+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/2024\\\/03\\\/09\\\/flutter-http-retryclient-example\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/2024\\\/03\\\/09\\\/flutter-http-retryclient-example\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/2024\\\/03\\\/09\\\/flutter-http-retryclient-example\\\/#primaryimage\",\"url\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/http_with_retry_client.png\",\"contentUrl\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/http_with_retry_client.png\",\"width\":1346,\"height\":886,\"caption\":\"Flutter http RetryClient simple example\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/2024\\\/03\\\/09\\\/flutter-http-retryclient-example\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Flutter HTTP RetryClient Example\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/\",\"name\":\"App Development: Odds and Ends\",\"description\":\"Providing insights into a career of apps and utilities that I&#039;ve conceptualized, designed, and developed; complemented with developmental journeys, findings, observations, and challenges encountered along the way.\",\"publisher\":{\"@id\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/#\\\/schema\\\/person\\\/87980b154db7bd0cd7c569ca09328bac\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/#\\\/schema\\\/person\\\/87980b154db7bd0cd7c569ca09328bac\",\"name\":\"Keith D Commiskey\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/keith-sac-01.jpg\",\"url\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/keith-sac-01.jpg\",\"contentUrl\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/keith-sac-01.jpg\",\"width\":113,\"height\":117,\"caption\":\"Keith D Commiskey\"},\"logo\":{\"@id\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/keith-sac-01.jpg\"},\"description\":\"Web App Creator; Former Flutter Developer; Former Front End Developer; Former Technical Graphics.\",\"sameAs\":[\"https:\\\/\\\/kdcinfo.com\\\/blog\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/commiskey\"],\"url\":\"https:\\\/\\\/kdcinfo.com\\\/blog\\\/author\\\/kdc4wp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Flutter HTTP RetryClient Example - App Development: Odds and Ends","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:\/\/kdcinfo.com\/blog\/2024\/03\/09\/flutter-http-retryclient-example\/","og_locale":"en_US","og_type":"article","og_title":"Flutter HTTP RetryClient Example - App Development: Odds and Ends","og_description":"One can only hope that developers who implement HTTP calls in their Flutter apps are aware of the `RetryClient` class. Although http examples provided by","og_url":"https:\/\/kdcinfo.com\/blog\/2024\/03\/09\/flutter-http-retryclient-example\/","og_site_name":"App Development: Odds and Ends","article_published_time":"2024-03-09T15:18:50+00:00","article_modified_time":"2024-03-09T15:18:54+00:00","og_image":[{"width":1346,"height":886,"url":"https:\/\/kdcinfo.com\/blog\/wp-content\/uploads\/2024\/03\/http_with_retry_client.png","type":"image\/png"}],"author":"Keith D Commiskey","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Keith D Commiskey","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kdcinfo.com\/blog\/2024\/03\/09\/flutter-http-retryclient-example\/#article","isPartOf":{"@id":"https:\/\/kdcinfo.com\/blog\/2024\/03\/09\/flutter-http-retryclient-example\/"},"author":{"name":"Keith D Commiskey","@id":"https:\/\/kdcinfo.com\/blog\/#\/schema\/person\/87980b154db7bd0cd7c569ca09328bac"},"headline":"Flutter HTTP RetryClient Example","datePublished":"2024-03-09T15:18:50+00:00","dateModified":"2024-03-09T15:18:54+00:00","mainEntityOfPage":{"@id":"https:\/\/kdcinfo.com\/blog\/2024\/03\/09\/flutter-http-retryclient-example\/"},"wordCount":255,"commentCount":0,"publisher":{"@id":"https:\/\/kdcinfo.com\/blog\/#\/schema\/person\/87980b154db7bd0cd7c569ca09328bac"},"image":{"@id":"https:\/\/kdcinfo.com\/blog\/2024\/03\/09\/flutter-http-retryclient-example\/#primaryimage"},"thumbnailUrl":"https:\/\/kdcinfo.com\/blog\/wp-content\/uploads\/2024\/03\/http_with_retry_client.png","keywords":["flutter","http","RetryClient"],"articleSection":["flutter"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kdcinfo.com\/blog\/2024\/03\/09\/flutter-http-retryclient-example\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kdcinfo.com\/blog\/2024\/03\/09\/flutter-http-retryclient-example\/","url":"https:\/\/kdcinfo.com\/blog\/2024\/03\/09\/flutter-http-retryclient-example\/","name":"Flutter HTTP RetryClient Example - App Development: Odds and Ends","isPartOf":{"@id":"https:\/\/kdcinfo.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kdcinfo.com\/blog\/2024\/03\/09\/flutter-http-retryclient-example\/#primaryimage"},"image":{"@id":"https:\/\/kdcinfo.com\/blog\/2024\/03\/09\/flutter-http-retryclient-example\/#primaryimage"},"thumbnailUrl":"https:\/\/kdcinfo.com\/blog\/wp-content\/uploads\/2024\/03\/http_with_retry_client.png","datePublished":"2024-03-09T15:18:50+00:00","dateModified":"2024-03-09T15:18:54+00:00","breadcrumb":{"@id":"https:\/\/kdcinfo.com\/blog\/2024\/03\/09\/flutter-http-retryclient-example\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kdcinfo.com\/blog\/2024\/03\/09\/flutter-http-retryclient-example\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/kdcinfo.com\/blog\/2024\/03\/09\/flutter-http-retryclient-example\/#primaryimage","url":"https:\/\/kdcinfo.com\/blog\/wp-content\/uploads\/2024\/03\/http_with_retry_client.png","contentUrl":"https:\/\/kdcinfo.com\/blog\/wp-content\/uploads\/2024\/03\/http_with_retry_client.png","width":1346,"height":886,"caption":"Flutter http RetryClient simple example"},{"@type":"BreadcrumbList","@id":"https:\/\/kdcinfo.com\/blog\/2024\/03\/09\/flutter-http-retryclient-example\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kdcinfo.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Flutter HTTP RetryClient Example"}]},{"@type":"WebSite","@id":"https:\/\/kdcinfo.com\/blog\/#website","url":"https:\/\/kdcinfo.com\/blog\/","name":"App Development: Odds and Ends","description":"Providing insights into a career of apps and utilities that I&#039;ve conceptualized, designed, and developed; complemented with developmental journeys, findings, observations, and challenges encountered along the way.","publisher":{"@id":"https:\/\/kdcinfo.com\/blog\/#\/schema\/person\/87980b154db7bd0cd7c569ca09328bac"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kdcinfo.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/kdcinfo.com\/blog\/#\/schema\/person\/87980b154db7bd0cd7c569ca09328bac","name":"Keith D Commiskey","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/kdcinfo.com\/blog\/wp-content\/uploads\/2023\/08\/keith-sac-01.jpg","url":"https:\/\/kdcinfo.com\/blog\/wp-content\/uploads\/2023\/08\/keith-sac-01.jpg","contentUrl":"https:\/\/kdcinfo.com\/blog\/wp-content\/uploads\/2023\/08\/keith-sac-01.jpg","width":113,"height":117,"caption":"Keith D Commiskey"},"logo":{"@id":"https:\/\/kdcinfo.com\/blog\/wp-content\/uploads\/2023\/08\/keith-sac-01.jpg"},"description":"Web App Creator; Former Flutter Developer; Former Front End Developer; Former Technical Graphics.","sameAs":["https:\/\/kdcinfo.com\/blog","https:\/\/www.linkedin.com\/in\/commiskey"],"url":"https:\/\/kdcinfo.com\/blog\/author\/kdc4wp\/"}]}},"_links":{"self":[{"href":"https:\/\/kdcinfo.com\/blog\/wp-json\/wp\/v2\/posts\/315","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kdcinfo.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kdcinfo.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kdcinfo.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kdcinfo.com\/blog\/wp-json\/wp\/v2\/comments?post=315"}],"version-history":[{"count":5,"href":"https:\/\/kdcinfo.com\/blog\/wp-json\/wp\/v2\/posts\/315\/revisions"}],"predecessor-version":[{"id":326,"href":"https:\/\/kdcinfo.com\/blog\/wp-json\/wp\/v2\/posts\/315\/revisions\/326"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kdcinfo.com\/blog\/wp-json\/wp\/v2\/media\/324"}],"wp:attachment":[{"href":"https:\/\/kdcinfo.com\/blog\/wp-json\/wp\/v2\/media?parent=315"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kdcinfo.com\/blog\/wp-json\/wp\/v2\/categories?post=315"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kdcinfo.com\/blog\/wp-json\/wp\/v2\/tags?post=315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}