{"id":20189,"date":"2025-11-29T06:41:49","date_gmt":"2025-11-29T06:41:49","guid":{"rendered":"https:\/\/www.kaashivinfotech.com\/blog\/?p=20189"},"modified":"2025-11-29T06:41:49","modified_gmt":"2025-11-29T06:41:49","slug":"migrate-getit-to-bloc-in-flutter-app","status":"publish","type":"post","link":"https:\/\/www.kaashivinfotech.com\/blog\/migrate-getit-to-bloc-in-flutter-app\/","title":{"rendered":"How to Migrate a Flutter Application from GetIt to Bloc (Without Losing Your Code)"},"content":{"rendered":"<p data-start=\"666\" data-end=\"723\">If you&#8217;re here, you&#8217;re probably searching something like:<\/p>\n<blockquote data-start=\"725\" data-end=\"872\">\n<p data-start=\"727\" data-end=\"872\"><strong data-start=\"727\" data-end=\"762\">&#8220;How to migrate GetIt to Bloc?&#8221;<\/strong><br data-start=\"762\" data-end=\"765\" \/><strong data-start=\"767\" data-end=\"811\">&#8220;Is it worth moving from GetIt to Bloc?&#8221;<\/strong><br data-start=\"811\" data-end=\"814\" \/><strong data-start=\"816\" data-end=\"872\">&#8220;Should I refactor my existing Flutter app to Bloc?&#8221;<\/strong><\/p>\n<\/blockquote>\n<p data-start=\"874\" data-end=\"912\">Trust me \u2014 I searched the same things.<\/p>\n<p data-start=\"914\" data-end=\"1192\">My first Flutter project wasn\u2019t big. I built it fast using GetIt because dependency injection felt clean and effortless. But as the project grew, something changed \u2014 the state became harder to track, debugging felt unpredictable, and suddenly my widget tree held too much logic.<\/p>\n<p data-start=\"1194\" data-end=\"1254\">That&#8217;s when I knew it was time to <strong data-start=\"1228\" data-end=\"1253\">migrate GetIt to Bloc<\/strong>.<\/p>\n<p data-start=\"1256\" data-end=\"1325\">This guide is everything I wish I knew before starting the migration.<\/p>\n<p data-start=\"1256\" data-end=\"1325\"><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter wp-image-20190 \" src=\"https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/Flutter-web-app.webp\" alt=\"\" width=\"602\" height=\"381\" srcset=\"https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/Flutter-web-app.webp 870w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/Flutter-web-app-300x190.webp 300w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/Flutter-web-app-768x486.webp 768w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/Flutter-web-app-380x240.webp 380w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/Flutter-web-app-800x506.webp 800w\" sizes=\"(max-width: 602px) 100vw, 602px\" \/><\/p>\n<h2 data-start=\"1404\" data-end=\"1436\">\ud83e\udded Why Migrate GetIt to Bloc?<\/h2>\n<p data-start=\"1438\" data-end=\"1483\">Before you start refactoring, you should ask:<\/p>\n<blockquote data-start=\"1485\" data-end=\"1530\">\n<p data-start=\"1487\" data-end=\"1530\">Why do I want to migrate GetIt to Bloc?<\/p>\n<\/blockquote>\n<p data-start=\"1532\" data-end=\"1556\">For me \u2014 the answer was:<\/p>\n<ul data-start=\"1558\" data-end=\"1752\">\n<li data-start=\"1558\" data-end=\"1599\">\n<p data-start=\"1560\" data-end=\"1599\">I needed <strong data-start=\"1569\" data-end=\"1599\">predictable state behavior<\/strong><\/p>\n<\/li>\n<li data-start=\"1600\" data-end=\"1646\">\n<p data-start=\"1602\" data-end=\"1646\">I wanted clearer <strong data-start=\"1619\" data-end=\"1646\">event \u2192 state \u2192 UI flow<\/strong><\/p>\n<\/li>\n<li data-start=\"1647\" data-end=\"1692\">\n<p data-start=\"1649\" data-end=\"1692\">I needed better <strong data-start=\"1665\" data-end=\"1692\">scalability and testing<\/strong><\/p>\n<\/li>\n<li data-start=\"1693\" data-end=\"1752\">\n<p data-start=\"1695\" data-end=\"1752\">Multiple screens were sharing state and things felt messy<\/p>\n<\/li>\n<\/ul>\n<h3 data-start=\"1754\" data-end=\"1782\">\ud83d\udea6 When Bloc Makes Sense<\/h3>\n<p data-start=\"1784\" data-end=\"1811\">\ud83d\udc4d You <em data-start=\"1791\" data-end=\"1799\">should<\/em> migrate if:<\/p>\n<ul data-start=\"1813\" data-end=\"1972\">\n<li data-start=\"1813\" data-end=\"1859\">\n<p data-start=\"1815\" data-end=\"1859\">The project is growing or becoming long-term<\/p>\n<\/li>\n<li data-start=\"1860\" data-end=\"1896\">\n<p data-start=\"1862\" data-end=\"1896\">Multiple screens need shared state<\/p>\n<\/li>\n<li data-start=\"1897\" data-end=\"1941\">\n<p data-start=\"1899\" data-end=\"1941\">You want cleaner business logic separation<\/p>\n<\/li>\n<li data-start=\"1942\" data-end=\"1972\">\n<p data-start=\"1944\" data-end=\"1972\">You need robust unit testing<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"1974\" data-end=\"2005\">\ud83d\udc4e You <em data-start=\"1981\" data-end=\"1993\">should NOT<\/em> migrate if:<\/p>\n<ul data-start=\"2007\" data-end=\"2118\">\n<li data-start=\"2007\" data-end=\"2036\">\n<p data-start=\"2009\" data-end=\"2036\">The app is small and static<\/p>\n<\/li>\n<li data-start=\"2037\" data-end=\"2068\">\n<p data-start=\"2039\" data-end=\"2068\">No shared\/global state exists<\/p>\n<\/li>\n<li data-start=\"2069\" data-end=\"2118\">\n<p data-start=\"2071\" data-end=\"2118\">GetIt already works perfectly for your use case<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"2120\" data-end=\"2170\">Migration should solve a problem \u2014 not create one.<\/p>\n<p><img decoding=\"async\" class=\"wp-image-20191  aligncenter\" src=\"https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/migrate-flutter-application.webp\" alt=\"\" width=\"558\" height=\"297\" srcset=\"https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/migrate-flutter-application.webp 612w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/migrate-flutter-application-300x160.webp 300w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/migrate-flutter-application-380x202.webp 380w\" sizes=\"(max-width: 558px) 100vw, 558px\" \/><\/p>\n<h2 data-start=\"2177\" data-end=\"2219\">Step 1 \u2014 Identify What GetIt Manages<\/h2>\n<p data-start=\"2221\" data-end=\"2281\">Before removing anything, list what GetIt currently handles.<\/p>\n<p data-start=\"2283\" data-end=\"2325\">For example, in one of my projects, I had:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"diff\">- ThemeService\r\n- AuthService\r\n- ApiClient\r\n- UserPreferences\r\n- CartService\r\n<\/pre>\n<p>GetIt makes it easy to write this:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"dart\">final locator = GetIt.instance;\r\n\r\nvoid setupLocator() {\r\n  locator.registerSingleton&lt;ThemeService&gt;(ThemeService());\r\n}\r\n<\/pre>\n<p>But the problem?<br data-start=\"2590\" data-end=\"2593\" \/>Services <strong data-start=\"2602\" data-end=\"2619\">contain logic<\/strong>, and widgets eventually rely on them directly. Which means UI + logic blend together \u2014 and that\u2019s not ideal long-term.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-20192 \" src=\"https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/flutter-getit.webp\" alt=\"\" width=\"704\" height=\"332\" srcset=\"https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/flutter-getit.webp 848w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/flutter-getit-300x142.webp 300w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/flutter-getit-768x362.webp 768w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/flutter-getit-380x179.webp 380w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/flutter-getit-800x377.webp 800w\" sizes=\"(max-width: 704px) 100vw, 704px\" \/><\/p>\n<h2 data-start=\"2745\" data-end=\"2797\">Step 2 \u2014 Choose Which Feature to Convert First<\/h2>\n<p data-start=\"2799\" data-end=\"2836\">Don\u2019t migrate the entire app at once.<\/p>\n<p data-start=\"2838\" data-end=\"2889\">Start with something simple \u2014 like theme switching.<\/p>\n<p data-start=\"2891\" data-end=\"2915\">Why theme?<br data-start=\"2901\" data-end=\"2904\" \/>Because it:<\/p>\n<ul data-start=\"2917\" data-end=\"2976\">\n<li data-start=\"2917\" data-end=\"2933\">\n<p data-start=\"2919\" data-end=\"2933\">touches the UI<\/p>\n<\/li>\n<li data-start=\"2934\" data-end=\"2958\">\n<p data-start=\"2936\" data-end=\"2958\">requires state sharing<\/p>\n<\/li>\n<li data-start=\"2959\" data-end=\"2976\">\n<p data-start=\"2961\" data-end=\"2976\">is easy to test<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"2978\" data-end=\"3074\">This will help you validate the flow before migrating more complex features like authentication.<\/p>\n<p data-start=\"2392\" data-end=\"2480\">Instead of throwing everything into one giant Bloc, break things down:<\/p>\n<ul data-start=\"2482\" data-end=\"2546\">\n<li data-start=\"2482\" data-end=\"2496\">\n<p data-start=\"2484\" data-end=\"2496\"><strong data-start=\"2484\" data-end=\"2496\">AuthBloc<\/strong><\/p>\n<\/li>\n<li data-start=\"2497\" data-end=\"2512\">\n<p data-start=\"2499\" data-end=\"2512\"><strong data-start=\"2499\" data-end=\"2512\">ThemeBloc<\/strong><\/p>\n<\/li>\n<li data-start=\"2513\" data-end=\"2527\">\n<p data-start=\"2515\" data-end=\"2527\"><strong data-start=\"2515\" data-end=\"2527\">UserBloc<\/strong><\/p>\n<\/li>\n<li data-start=\"2528\" data-end=\"2546\">\n<p data-start=\"2530\" data-end=\"2546\"><strong data-start=\"2530\" data-end=\"2546\">SettingsBloc<\/strong><\/p>\n<\/li>\n<\/ul>\n<p data-start=\"2548\" data-end=\"2676\">Each Bloc handles one responsibility.<br data-start=\"2585\" data-end=\"2588\" \/>Bloc embraces the <strong data-start=\"2606\" data-end=\"2641\">Single Responsibility Principle<\/strong> \u2014 something GetIt doesn\u2019t enforce.<\/p>\n<h2 data-start=\"3081\" data-end=\"3125\">Step 3 \u2014 Before &amp; After (GetIt \u2192 Bloc)<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-20196 \" src=\"https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/state-management-in-flutter.webp\" alt=\"\" width=\"604\" height=\"318\" srcset=\"https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/state-management-in-flutter.webp 2048w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/state-management-in-flutter-300x158.webp 300w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/state-management-in-flutter-1024x538.webp 1024w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/state-management-in-flutter-768x404.webp 768w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/state-management-in-flutter-1536x807.webp 1536w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/state-management-in-flutter-380x200.webp 380w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/state-management-in-flutter-800x420.webp 800w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/state-management-in-flutter-1160x609.webp 1160w\" sizes=\"(max-width: 604px) 100vw, 604px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p data-start=\"3127\" data-end=\"3156\">Let\u2019s look at a real example.<\/p>\n<h3 data-start=\"3158\" data-end=\"3195\">\ud83e\uddf5 Before: Using GetIt + setState<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"dart\">final themeService = GetIt.instance&lt;ThemeService&gt;();\r\n\r\nclass SettingsPage extends StatefulWidget {\r\n  @override\r\n  _SettingsPageState createState() =&gt; _SettingsPageState();\r\n}\r\n\r\nclass _SettingsPageState extends State&lt;SettingsPage&gt; {\r\n  bool isDark = themeService.isDarkMode;\r\n\r\n  void toggleTheme() {\r\n    themeService.toggleTheme();\r\n    setState(() {\r\n      isDark = themeService.isDarkMode;\r\n    });\r\n  }\r\n\r\n  @override\r\n  Widget build(BuildContext context) {\r\n    return Switch(value: isDark, onChanged: (_) =&gt; toggleTheme());\r\n  }\r\n}\r\n<\/pre>\n<p data-start=\"3730\" data-end=\"3741\">Notice how:<\/p>\n<ul data-start=\"3743\" data-end=\"3817\">\n<li data-start=\"3743\" data-end=\"3771\">\n<p data-start=\"3745\" data-end=\"3771\">UI triggers business logic<\/p>\n<\/li>\n<li data-start=\"3772\" data-end=\"3795\">\n<p data-start=\"3774\" data-end=\"3795\">Service updates state<\/p>\n<\/li>\n<li data-start=\"3796\" data-end=\"3817\">\n<p data-start=\"3798\" data-end=\"3817\">UI updates manually<\/p>\n<\/li>\n<\/ul>\n<h3 data-start=\"3855\" data-end=\"3879\">After: Using Bloc<\/h3>\n<p data-start=\"3881\" data-end=\"3904\">We first create a Bloc:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"dart\">class ThemeEvent {}\r\n\r\nclass ToggleThemeEvent extends ThemeEvent {}\r\n\r\nclass ThemeState {\r\n  final bool isDark;\r\n  ThemeState(this.isDark);\r\n}\r\n\r\nclass ThemeBloc extends Bloc&lt;ThemeEvent, ThemeState&gt; {\r\n  final ThemeService themeService;\r\n\r\n  ThemeBloc(this.themeService) : super(ThemeState(themeService.isDarkMode)) {\r\n    on&lt;ToggleThemeEvent&gt;((event, emit) {\r\n      themeService.toggleTheme();\r\n      emit(ThemeState(themeService.isDarkMode));\r\n    });\r\n  }\r\n}\r\n<\/pre>\n<p>Now the UI becomes clean and reactive:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"dart\">BlocBuilder&lt;ThemeBloc, ThemeState&gt;(\r\n  builder: (context, state) {\r\n    return Switch(\r\n      value: state.isDark,\r\n      onChanged: (_) =&gt; context.read&lt;ThemeBloc&gt;().add(ToggleThemeEvent()),\r\n    );\r\n  },\r\n);\r\n<\/pre>\n<p data-start=\"4618\" data-end=\"4703\">No more <code class=\"\" data-line=\"\">setState()<\/code>.<br data-start=\"4639\" data-end=\"4642\" \/>No direct service call in widgets.<br data-start=\"4676\" data-end=\"4679\" \/>UI reacts automatically.<\/p>\n<p data-start=\"4705\" data-end=\"4793\">This is what migrating GetIt to Bloc feels like \u2014 structured, predictable, and scalable.<\/p>\n<h2 data-start=\"4800\" data-end=\"4843\">Step 4 \u2014 Inject Blocs at the App Level<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-20193 \" src=\"https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/getit-to-bloc.webp\" alt=\"\" width=\"504\" height=\"288\" srcset=\"https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/getit-to-bloc.webp 640w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/getit-to-bloc-300x172.webp 300w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2025\/11\/getit-to-bloc-380x217.webp 380w\" sizes=\"(max-width: 504px) 100vw, 504px\" \/><\/p>\n<p data-start=\"4845\" data-end=\"4876\">We now use <code class=\"\" data-line=\"\">MultiBlocProvider<\/code>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"dart\">void main() {\r\n  setupLocator();\r\n\r\n  runApp(\r\n    MultiBlocProvider(\r\n      providers: [\r\n        BlocProvider(\r\n          create: (_) =&gt; ThemeBloc(locator&lt;ThemeService&gt;()),\r\n        ),\r\n      ],\r\n      child: const MyApp(),\r\n    ),\r\n  );\r\n}\r\n<\/pre>\n<p>At this stage, GetIt still exists \u2014 and that&#8217;s okay.<br data-start=\"5173\" data-end=\"5176\" \/>Migration happens feature-by-feature.<\/p>\n<h2 data-start=\"5220\" data-end=\"5267\">Step 5 \u2014 Slowly Remove GetIt (When Ready)<\/h2>\n<p data-start=\"5269\" data-end=\"5316\">Once all features move to Bloc, you can decide:<\/p>\n<ul data-start=\"5318\" data-end=\"5435\">\n<li data-start=\"5318\" data-end=\"5369\">\n<p data-start=\"5320\" data-end=\"5369\">Keep GetIt ONLY for dependency injection<br data-start=\"5360\" data-end=\"5363\" \/><strong data-start=\"5363\" data-end=\"5369\">or<\/strong><\/p>\n<\/li>\n<li data-start=\"5370\" data-end=\"5435\">\n<p data-start=\"5372\" data-end=\"5435\">Remove GetIt entirely if Bloc + Repository pattern feels enough<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"5437\" data-end=\"5550\">In my case, removing GetIt fully made the project feel clean \u2014 but this depends on your architecture preferences.<\/p>\n<h2 data-start=\"5437\" data-end=\"5550\">\ud83d\udca1 Common Mistakes<\/h2>\n<table>\n<thead>\n<tr>\n<th>Mistake<\/th>\n<th>Fix<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Migrating everything at once<\/td>\n<td>Do it feature by feature<\/td>\n<\/tr>\n<tr>\n<td>Keeping logic in widgets<\/td>\n<td>Move to Bloc<\/td>\n<\/tr>\n<tr>\n<td>One giant Bloc managing everything<\/td>\n<td>Create multiple feature Blocs<\/td>\n<\/tr>\n<tr>\n<td>Not writing tests<\/td>\n<td>Bloc makes testing easy \u2014 use it<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 data-start=\"5904\" data-end=\"5924\">\ud83c\udfaf Final Thoughts<\/h2>\n<p data-start=\"5926\" data-end=\"6026\">Migrating a Flutter app is not just moving code \u2014 it\u2019s improving how the app thinks and behaves.<\/p>\n<p data-start=\"6028\" data-end=\"6196\">If you&#8217;re ready to scale, test, and build long-term maintainable apps, then migrating <strong data-start=\"6114\" data-end=\"6131\">GetIt to Bloc<\/strong> is one of the best decisions you\u2019ll make as a Flutter developer.<\/p>\n<p data-start=\"6198\" data-end=\"6364\">And when you finally delete that last <code class=\"\" data-line=\"\">GetIt.instance<\/code>, trust me\u2026<br data-start=\"6263\" data-end=\"6266\" \/>you\u2019ll feel like you just cleaned your entire room at 2 AM while listening to nostalgic songs. \ud83d\ude05\u2728<\/p>\n<p data-start=\"6198\" data-end=\"6364\">Want to learn <a href=\"https:\/\/www.kaashivinfotech.com\/flutter-course-in-chennai\/\">Flutter Course<\/a>, <a href=\"https:\/\/www.wikitechy.com\/tutorials\/javascript\/\" target=\"_blank\" rel=\"noopener\">Javascript<\/a>, or <a href=\"https:\/\/www.kaashivinfotech.com\/react-js-training-in-chennai\/\">React Js Course<\/a>,\u00a0<a href=\"https:\/\/www.kaashivinfotech.com\/front-end-developer-course\/\">Frontend Development Course<\/a>,\u00a0<a href=\"https:\/\/www.kaashivinfotech.com\/courses\/\">Full Stack Development Course<\/a>\u00a0and More, Visit Our Website\u00a0<a href=\"https:\/\/www.kaashivinfotech.com\/\">www.kaashivinfotech.com.<\/a><\/p>\n<h2 data-start=\"6198\" data-end=\"6364\">Related Reads:<\/h2>\n<ul>\n<li>\n<p class=\"entry-title\"><a href=\"https:\/\/www.kaashivinfotech.com\/blog\/new-react-19-2-features-explained\/\">New React 19.2 Features You Should Know \u2013 Explained with Code Examples<\/a><\/p>\n<\/li>\n<li>\n<p class=\"entry-title\"><a href=\"https:\/\/www.kaashivinfotech.com\/blog\/hex-color-code-explained\/\">Hex Color Code Explained: The Complete Guide to Colors, Pickers &amp; Best Practices (2025)<\/a><\/p>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>If you&#8217;re here, you&#8217;re probably searching something like: &#8220;How to migrate GetIt to Bloc?&#8221;&#8220;Is it worth moving from GetIt to Bloc?&#8221;&#8220;Should I refactor my existing Flutter app to Bloc?&#8221; Trust me \u2014 I searched the same things. My first Flutter project wasn\u2019t big. I built it fast using GetIt because dependency injection felt clean and [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":20194,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[604],"tags":[10744,10740,10739,10742,10743,10745,10738,10741],"class_list":["post-20189","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developer-skills","tag-app-tutorial-flutter","tag-bloc-with-getit","tag-flutter-bloc","tag-flutter-first-app","tag-flutter-from-scratch","tag-freecodecamp-flutter","tag-get_it-flutter","tag-how-to-build-app-in-flutter"],"_links":{"self":[{"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/posts\/20189","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/comments?post=20189"}],"version-history":[{"count":0,"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/posts\/20189\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/media\/20194"}],"wp:attachment":[{"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/media?parent=20189"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/categories?post=20189"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/tags?post=20189"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}