<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[NerDev Sudan]]></title><description><![CDATA[NerDev Sudan]]></description><link>https://nerdev-sd.hashnode.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1701076415844/8wRbL6hD7.png</url><title>NerDev Sudan</title><link>https://nerdev-sd.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Wed, 17 Jun 2026 18:10:23 GMT</lastBuildDate><atom:link href="https://nerdev-sd.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[still useful in 2023]]></title><description><![CDATA[still useful in 2023]]></description><link>https://nerdev-sd.hashnode.dev/still-useful-in-2023-1666525449b8</link><guid isPermaLink="true">https://nerdev-sd.hashnode.dev/still-useful-in-2023-1666525449b8</guid><dc:creator><![CDATA[Kururu]]></dc:creator><pubDate>Thu, 23 Nov 2023 14:07:14 GMT</pubDate><content:encoded><![CDATA[<p>still useful in 2023</p>
]]></content:encoded></item><item><title><![CDATA[hahaha]]></title><description><![CDATA[hahaha
no wife yet]]></description><link>https://nerdev-sd.hashnode.dev/hahaha-ed37e426cada</link><guid isPermaLink="true">https://nerdev-sd.hashnode.dev/hahaha-ed37e426cada</guid><dc:creator><![CDATA[Kururu]]></dc:creator><pubDate>Mon, 20 Nov 2023 10:04:29 GMT</pubDate><content:encoded><![CDATA[<p>hahaha</p>
<p>no wife yet</p>
]]></content:encoded></item><item><title><![CDATA[just put a pageview over gridview]]></title><description><![CDATA[just put a pageview over gridview]]></description><link>https://nerdev-sd.hashnode.dev/just-put-a-pageview-over-gridview-5a98b7ae2dc0</link><guid isPermaLink="true">https://nerdev-sd.hashnode.dev/just-put-a-pageview-over-gridview-5a98b7ae2dc0</guid><dc:creator><![CDATA[Kururu]]></dc:creator><pubDate>Wed, 18 Oct 2023 13:50:30 GMT</pubDate><content:encoded><![CDATA[<p>just put a pageview over gridview</p>
]]></content:encoded></item><item><title><![CDATA[Build custom grid with Pageview using flutter]]></title><description><![CDATA[Categories is main part of E-commerce applications .it good to know how to build categories UI.
in this article we will build this UI with help of Pageview and GridView.
lets begin.
var currentPageValue = 0.0;  // to get current pageview page int tot...]]></description><link>https://nerdev-sd.hashnode.dev/build-custom-grid-with-pageview-using-flutter-c9048d06a59d</link><guid isPermaLink="true">https://nerdev-sd.hashnode.dev/build-custom-grid-with-pageview-using-flutter-c9048d06a59d</guid><dc:creator><![CDATA[Kururu]]></dc:creator><pubDate>Tue, 17 Oct 2023 20:30:36 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1701074262751/455c643b-dfa5-4146-a74d-214b3c36fb95.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Categories is main part of E-commerce applications .it good to know how to build categories UI.</p>
<p>in this article we will build this UI with help of Pageview and GridView.</p>
<p>lets begin.</p>
<p>var currentPageValue = 0.0;  // to get current pageview page<br /> int totalGridItems=6;   // total items per page<br />int startItem=0;   //  starting item index for each page<br />PageController controller = PageController();  // page view controller<br /> bool isLastPage= false; // check if this is the last page<br /> int? pages;   // total number of pages<br /> int? lastPageITems;  //last page items number</p>
<p>you may notice a variable called <em>pages</em> we can simply calculate the number of pages by following line of code inside initState method:</p>
<p>pages = (context.read().categoryList.length /6).ceil();  //round app the division result  </p>
<p>//context.read().categoryList  this is the array of categories<br />// you can your own array here:)</p>
<p>then we use Pageview controller listener:</p>
<p> setState(() {<br />    currentPageValue = controller.page!;  </p>
<p>// the sarting item index is currentPageNumber * 6<br />// 6 is the toatal items per page :)<br />    startItem = currentPageValue.toInt()*6;<br />isLastPage= currentPageValue.toInt()+1\==pages;  // check if this is the last page  </p>
<p>//calcuate the the number of items in the last page<br />// if the total array elements the less than 6(items per page) then assign 0<br />// otherwise we asign  (List.length%6)  this will give use the remaining number of items in the last page<br />//then check if we in the last page we will use this [lastPageITems] instead of items per page (6)  </p>
<p>   lastPageITems =<br /> context.read().categoryList.length&lt;6  ?  
  0: context.read().categoryList.length%6;  </p>
<p> });<br />});</p>
<p>lets build indicator part then we will build the main pageview</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1701074259715/856db2e4-14c7-4250-9ddf-e992a25e9322.png" alt /></p>
<p> Center(<br />child: Container(<br />  height: 8,<br /> width: pages!*15+ 20,<br /> decoration: BoxDecoration(<br />        color:Colors.grey,<br />        borderRadius: BorderRadius.circular(50)),<br /> padding: EdgeInsets.symmetric(horizontal: 10),  </p>
<p>  child:   Row(<br />    mainAxisAlignment: MainAxisAlignment.center,<br />    children:List.generate(pages!, (index) =&gt; Container(<br />       width: 15,<br />       decoration: BoxDecoration(<br />        color:<br />        currentPageValue.toInt()==index? //highlihgt current index<br />        Theme.of(context).primaryColor:   Colors.transparent,<br />        borderRadius: BorderRadius.circular(50)),  </p>
<p>    )<br />    ),<br />  ),<br />),<br /> )<br />  ],<br />)</p>
<p>i think nothing special in this piece of code :)</p>
<p>lets see how actual pageview and gridview look like.</p>
<p>PageView.builder(<br />              controller: controller,<br />              pageSnapping: false,<br />               physics: BouncingScrollPhysics(),<br />              itemBuilder: (context, position) {<br />//  grid view will be here<br /> },<br />              itemCount: pages, // Can be null<br />            ),</p>
<p> GridView.builder(<br />             shrinkWrap: true,  </p>
<p>                  gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(<br />                    crossAxisCount: 3,<br />                  ),<br />                  itemCount:     </p>
<p>!isLastPage?<br />                  categoryProvider.categoryList.length&lt;6?<br />                  categoryProvider.categoryList.length:<br />                     6   :lastPageITems,  </p>
<p>                  itemBuilder: (BuildContext context, int index) {  </p>
<p>// var cat = ccategoryList[index+startItem]  </p>
<p>}  </p>
<p>)</p>
<p>you may notice this line of code:</p>
<p>!isLastPage?<br />                  categoryProvider.categoryList.length&lt;6?<br />                  categoryProvider.categoryList.length:<br />                     6   :lastPageITems,</p>
<p>the logic here is:</p>
<p>if this is not the <strong>last page</strong> , then if the array length is less then items per page( which is 6 ) then go with this array length as <strong><em>itemCount</em></strong>. otherwise we will use 6 as <strong><em>itemCount</em></strong>.</p>
<p>if this is the <strong>last page</strong> use <strong><em>lastPageItems</em></strong> as <strong><em>itemCount.</em></strong></p>
<p>LastPage = if(List.length&lt;6) 0 else List.length%6;</p>
<p>Ex. 17 % (6) = 5</p>
<p>5 items in the last page.</p>
<p><strong><em>note</em></strong>: remember 6 is just my choice . you can choose any number of items per page.</p>
<p>var cat = ccategoryList[index+startItem]</p>
<p>in this line of code . we will get the current item. by using this equation:</p>
<p>index+ startItem</p>
<p>startItem is the starting index of current page.</p>
<p>if the number of items per page is 6 then:</p>
<p>page one : start by 0 and end by 5</p>
<p>page two : start by 6 and end by 11</p>
<p>and so on.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1701074261358/45259fdd-1533-4d3d-a84e-d571fff80fed.png" alt /></p>
<p>that’s it. thank you for reading.</p>
<p>check out this <a target="_blank" href="https://gist.github.com/kururu-abdo/1d3d3419b8864b36ce2154235644c67e"><strong>gits</strong></a> for full code</p>
]]></content:encoded></item><item><title><![CDATA[great article]]></title><description><![CDATA[great article
can you please share a full code?]]></description><link>https://nerdev-sd.hashnode.dev/great-article-3fdbfd07d655</link><guid isPermaLink="true">https://nerdev-sd.hashnode.dev/great-article-3fdbfd07d655</guid><dc:creator><![CDATA[Kururu]]></dc:creator><pubDate>Mon, 09 Oct 2023 09:08:10 GMT</pubDate><content:encoded><![CDATA[<p>great article</p>
<p>can you please share a full code?</p>
]]></content:encoded></item><item><title><![CDATA[Android Development Fundmentals I]]></title><description><![CDATA[Android is a mobile operating system based on a modified version of the Linux kernel and other open-source software, designed primarily for touchscreen mobile devices such as smartphones and tablets.
Languages :
Android apps can be written using Kotl...]]></description><link>https://nerdev-sd.hashnode.dev/android-development-fundmentals-i-9c8cde183e39</link><guid isPermaLink="true">https://nerdev-sd.hashnode.dev/android-development-fundmentals-i-9c8cde183e39</guid><dc:creator><![CDATA[Kururu]]></dc:creator><pubDate>Mon, 24 Jul 2023 15:03:59 GMT</pubDate><content:encoded><![CDATA[<p>Android is a mobile operating system based on a modified version of the Linux kernel and other open-source software, designed primarily for touchscreen mobile devices such as smartphones and tablets.</p>
<p><strong>Languages :</strong></p>
<p>Android apps can be written using Kotlin, the Java programming language, and C++ languages. The Android SDK tools compile your code along with any data and resource files into an APK or an Android App Bundle.</p>
<p><strong>Kotlin</strong> is an <strong>Android-compatible</strong> language that is <strong>concise</strong>, <strong>expressive</strong>, and designed to be t<strong>ype-</strong> and <strong>null</strong>-<strong>safe</strong>. It works with the <strong>Java</strong> language seamlessly, so it makes it easy for developers who love the Java language to keep using it but also incrementally add Kotlin code and leverage Kotlin librarie</p>
<h4 id="heading-android-app-bundle-aab-vs-android-packageapk"><strong>Android App Bundle (.aab) vs Android Package(.apk)</strong></h4>
<p><strong>An <em>Android package</em></strong>, which is an archive file with an <code>.apk</code> suffix, contains the contents of an Android app required at runtime, and it is the file that Android-powered devices use to install the app.</p>
<p><strong>An Android App Bundle</strong>, which is an archive file with an <code>.aab</code> suffix, contains the contents of an Android app project, including some additional metadata that isn't required at runtime. An AAB is a publishing format and <strong>can't be installed on Android devices.</strong></p>
<h4 id="heading-android-app-components"><strong>Android App Components</strong></h4>
<ul>
<li><strong>Activities</strong></li>
<li><strong>Services</strong></li>
<li><strong>Broadcast receivers</strong></li>
<li><strong>Content providers</strong></li>
</ul>
<p>every component has it’s own context. as android developer remember this context you will face much more .</p>
<p><strong>&gt; Activities</strong></p>
<p>An <strong><em>activity</em></strong> is the entry point for interacting with the user. It represents a single screen with a user interface</p>
<p><strong>&gt; Services</strong></p>
<p>A <strong><em>service</em></strong> is a general-purpose entry point for keeping an app running in the background for all kinds of reasons. It is a component that runs in the background to perform long-running operations or to perform work for remote processes. A service does not provide a user interfac</p>
<p><strong>&gt; Broadcast receivers</strong></p>
<p>A <strong><em>broadcast receiver</em></strong> is a component that lets the system deliver events to the app outside of a regular user flow so the app can respond to system-wide broadcast announcements. Because broadcast receivers are another well-defined entry into the app, the system can deliver broadcasts even to apps that aren’t currently running.</p>
<p><strong>&gt; Content providers</strong></p>
<p>A <strong><em>content provider</em></strong> manages a shared set of <strong>app data</strong> that you can store in the <strong>file system</strong>, in a <strong>SQLite</strong> database, on the web, or on any other persistent storage location that your app can access. <strong>Through the content provider, other apps can query or modify the data</strong>, if the content provider permits it.</p>
<p>you can activate or access to components using <strong>Intent ,</strong> You can think of them as the <strong>messengers</strong> that request an action from other <strong>components</strong></p>
<p>you can use this intent to navigate to another activities or starting services</p>
<h3 id="heading-manifest-file">Manifest File :</h3>
<p>App declares all its components in this file, which is at the root of the app project directory.</p>
<p>all permissions included in this file</p>
<p>in the next article we will discuss project structure.</p>
<p>references:</p>
<p><a target="_blank" href="https://developer.android.com/guide/components/fundamentals">fundamentals</a></p>
<p><a target="_blank" href="https://en.wikipedia.org/wiki/Android_software_development#:~:text=Android%20software%20development%20is%20the,other%20languages%20is%20also%20possible.">Android_software_development</a></p>
]]></content:encoded></item><item><title><![CDATA[use you need additional obfuscate on native side.]]></title><description><![CDATA[use you need additional obfuscate on native side.
but native code is not a good idea. you need to to do it for both(Android/Ios) . and this is time wasting]]></description><link>https://nerdev-sd.hashnode.dev/use-you-need-additional-obfuscate-on-native-side-3dd887e8edc0</link><guid isPermaLink="true">https://nerdev-sd.hashnode.dev/use-you-need-additional-obfuscate-on-native-side-3dd887e8edc0</guid><dc:creator><![CDATA[Kururu]]></dc:creator><pubDate>Thu, 22 Jun 2023 08:46:43 GMT</pubDate><content:encoded><![CDATA[<p>use you need additional obfuscate on native side.</p>
<p>but native code is not a good idea. you need to to do it for both(Android/Ios) . and this is time wasting</p>
]]></content:encoded></item><item><title><![CDATA[this is great topic bro]]></title><description><![CDATA[this is great topic bro]]></description><link>https://nerdev-sd.hashnode.dev/this-is-great-topic-bro-44653296a543</link><guid isPermaLink="true">https://nerdev-sd.hashnode.dev/this-is-great-topic-bro-44653296a543</guid><dc:creator><![CDATA[Kururu]]></dc:creator><pubDate>Thu, 22 Jun 2023 08:45:04 GMT</pubDate><content:encoded><![CDATA[<p>this is great topic bro</p>
]]></content:encoded></item><item><title><![CDATA[Future.wait(); is one of these isolates. it reduces time to execute multiple futures]]></title><description><![CDATA[Future.wait(); is one of these isolates. it reduces time to execute multiple futures]]></description><link>https://nerdev-sd.hashnode.dev/future-wait-is-one-of-these-isolates-it-reduces-time-to-execute-multiple-futures-ff0c751e9379</link><guid isPermaLink="true">https://nerdev-sd.hashnode.dev/future-wait-is-one-of-these-isolates-it-reduces-time-to-execute-multiple-futures-ff0c751e9379</guid><dc:creator><![CDATA[Kururu]]></dc:creator><pubDate>Thu, 18 May 2023 22:03:58 GMT</pubDate><content:encoded><![CDATA[<p>Future.wait(); is one of these isolates. it reduces time to execute multiple futures</p>
]]></content:encoded></item><item><title><![CDATA[Google Analytics for Flutter App]]></title><description><![CDATA[https://www.pinterest.com/pin/638103840965895601/
Google Analytics is a platform that collects data from your websites and apps to create reports that provide insights into your business.
so you can consider Google Analytics as a Business Intelligenc...]]></description><link>https://nerdev-sd.hashnode.dev/google-analytics-for-flutter-app-b90d45f28661</link><guid isPermaLink="true">https://nerdev-sd.hashnode.dev/google-analytics-for-flutter-app-b90d45f28661</guid><dc:creator><![CDATA[Kururu]]></dc:creator><pubDate>Sat, 29 Apr 2023 12:02:02 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1701074297004/e9ff2362-ff0a-461a-b28b-8944c66c5948.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a target="_blank" href="https://www.pinterest.com/pin/638103840965895601/">https://www.pinterest.com/pin/638103840965895601/</a></p>
<p><strong>Google Analytics</strong> is a platform that collects data from your websites and apps to create reports that provide insights into your business.</p>
<p>so you can consider Google Analytics as a <strong>Business Intelligence</strong> tool that may help you to make some decision depend on Reports .</p>
<p>usually you can add google analytics plugin to your app and register many events . later you can see detailed reports based on this events and logs.</p>
<h3 id="heading-google-analytics-events">Google Analytics Events:</h3>
<p>I. <a target="_blank" href="https://firebase.google.com/docs/analytics/measure-ad-revenue"><strong>ad_impression</strong></a></p>
<p>a user sees an ad impression, for app only</p>
<p>II. <a target="_blank" href="https://developers.google.com/analytics/devguides/collection/ga4/reference/events#earn_virtual_currency"><strong>earn_virtual_currency</strong></a></p>
<p>a user earns virtual currency (coins, gems, tokens, etc.)</p>
<p>III. <a target="_blank" href="https://developers.google.com/analytics/devguides/collection/ga4/reference/events#join_group"><strong>join_group</strong></a></p>
<p>a user joins a group to measure the popularity of each group</p>
<p>IIII. <a target="_blank" href="https://developers.google.com/analytics/devguides/collection/ga4/reference/events#share"><strong>share</strong></a></p>
<p>a user shares content</p>
<p>IV. <a target="_blank" href="https://developers.google.com/analytics/devguides/collection/ga4/reference/events#begin_checkout"><strong>begin_checkout</strong></a></p>
<p>a user begins checkout</p>
<p>IIV. <a target="_blank" href="https://developers.google.com/analytics/devguides/collection/ga4/reference/events#add_payment_info"><strong>add_payment_info</strong></a></p>
<p>a user submits their payment information</p>
<p>and so , on. there are much more events that related to ecommerce applications that can help in business measurement.</p>
<h3 id="heading-adding-google-analytics-to-your-flutter-app">Adding Google Analytics to your flutter App:</h3>
<ol>
<li>make sure you are created a Firebase app and add <a target="_blank" href="https://pub.dev/packages/firebase_core"><em>firebase_core</em></a> to your pubspec.yaml file. and follow all steps to enable Firebase in your project .</li>
<li>add analytics plugin with this command:</li>
</ol>
<p>flutter pub add firebase_analytics</p>
<p>3. import the plugin wherever to want to log events.</p>
<p>import 'package:firebase_analytics/firebase_analytics.dart';</p>
<p><strong>Start logging events:</strong></p>
<p>After you have created a <code>FirebaseAnalytics</code> instance, you can begin to log events with the library's <code>log</code>- methods.</p>
<p>for example you can loop through your order items to log this event:</p>
<p>await FirebaseAnalytics.instance<br />  .logBeginCheckout(<br />    value: 10.0,   //<br />    currency: 'USD', // replace with your Currency<br />    items: [    //   items or products<br />      AnalyticsEventItem(<br />        itemName: 'Socks',<br />        itemId: 'xjw73ndnw',<br />        price: '10.0'<br />      ),<br />    ],<br />    coupon: '10PERCENTOFF'<br />  );</p>
<p>there are many methods other than this <em>logBeginCheckout .</em></p>
<p>also you can add custom event .</p>
<p>await FirebaseAnalytics.instance.logEvent(<br />    name: "share_image",  // you can rename this<br />    parameters: {  // this object that hold data of your event<br />        "image_name": name,<br />        "full_text": text,<br />    },)</p>
<p>so this is helpful tool if you want to measure your business and make right decision.</p>
<p>thanks for reading.</p>
<p>References:</p>
<p>[<strong>[GA4] Recommended events</strong><br /><em>Adding these events to your website or mobile app helps you measure additional features and behavior as well as…</em>support.google.com](https://support.google.com/analytics/answer/9267735?hl=en "https://support.google.com/analytics/answer/9267735?hl=en")<a target="_blank" href="https://support.google.com/analytics/answer/9267735?hl=en"></a></p>
<p>[<strong>Get started with Google Analytics | Google Analytics for Firebase</strong><br /><em>Edit description</em>firebase.google.com](https://firebase.google.com/docs/analytics/get-started?platform=flutter "https://firebase.google.com/docs/analytics/get-started?platform=flutter")<a target="_blank" href="https://firebase.google.com/docs/analytics/get-started?platform=flutter"></a></p>
]]></content:encoded></item><item><title><![CDATA[top article in keys . event understood better than official video]]></title><description><![CDATA[top article in keys . event understood better than official video]]></description><link>https://nerdev-sd.hashnode.dev/top-article-in-keys-event-understood-better-than-official-video-7f9c79958f6c</link><guid isPermaLink="true">https://nerdev-sd.hashnode.dev/top-article-in-keys-event-understood-better-than-official-video-7f9c79958f6c</guid><dc:creator><![CDATA[Kururu]]></dc:creator><pubDate>Fri, 14 Apr 2023 23:39:34 GMT</pubDate><content:encoded><![CDATA[<p>top article in keys . event understood better than official video</p>
]]></content:encoded></item><item><title><![CDATA[Top Article]]></title><description><![CDATA[Top Article]]></description><link>https://nerdev-sd.hashnode.dev/top-article-7a679d08fcfb</link><guid isPermaLink="true">https://nerdev-sd.hashnode.dev/top-article-7a679d08fcfb</guid><dc:creator><![CDATA[Kururu]]></dc:creator><pubDate>Tue, 11 Apr 2023 09:08:35 GMT</pubDate><content:encoded><![CDATA[<p>Top Article</p>
]]></content:encoded></item><item><title><![CDATA[so separating widgets will lead to avoid unwanted rebuilds]]></title><description><![CDATA[so separating widgets will lead to avoid unwanted rebuilds]]></description><link>https://nerdev-sd.hashnode.dev/so-separating-widgets-will-lead-to-avoid-unwanted-rebuilds-1845ddcd66e2</link><guid isPermaLink="true">https://nerdev-sd.hashnode.dev/so-separating-widgets-will-lead-to-avoid-unwanted-rebuilds-1845ddcd66e2</guid><dc:creator><![CDATA[Kururu]]></dc:creator><pubDate>Sun, 09 Apr 2023 11:36:28 GMT</pubDate><content:encoded><![CDATA[<p>so separating widgets will lead to avoid unwanted rebuilds</p>
]]></content:encoded></item><item><title><![CDATA[very goood]]></title><description><![CDATA[very goood]]></description><link>https://nerdev-sd.hashnode.dev/very-goood-6b6610cd4607</link><guid isPermaLink="true">https://nerdev-sd.hashnode.dev/very-goood-6b6610cd4607</guid><dc:creator><![CDATA[Kururu]]></dc:creator><pubDate>Fri, 31 Mar 2023 19:03:48 GMT</pubDate><content:encoded><![CDATA[<p>very goood</p>
]]></content:encoded></item><item><title><![CDATA[i Know . but in dart no interface.]]></title><description><![CDATA[i Know . but in dart no interface.
in jave abstract class and interface are different
using extends with abstract class and implements with interface. and another difference is that you have to implement all interface methods]]></description><link>https://nerdev-sd.hashnode.dev/i-know-but-in-dart-no-interface-10298e2b1466</link><guid isPermaLink="true">https://nerdev-sd.hashnode.dev/i-know-but-in-dart-no-interface-10298e2b1466</guid><dc:creator><![CDATA[Kururu]]></dc:creator><pubDate>Tue, 21 Mar 2023 15:56:06 GMT</pubDate><content:encoded><![CDATA[<p>i Know . but in dart no interface.</p>
<p>in jave abstract class and interface are different</p>
<p>using extends with abstract class and implements with interface. and another difference is that you have to implement all interface methods</p>
]]></content:encoded></item><item><title><![CDATA[In Dart, every class defines an implicit interface.]]></title><description><![CDATA[In Dart, every class defines an implicit interface. You can use an abstract class to define an interface that cannot be instantiated:]]></description><link>https://nerdev-sd.hashnode.dev/in-dart-every-class-defines-an-implicit-interface-34a0f223e677</link><guid isPermaLink="true">https://nerdev-sd.hashnode.dev/in-dart-every-class-defines-an-implicit-interface-34a0f223e677</guid><dc:creator><![CDATA[Kururu]]></dc:creator><pubDate>Tue, 21 Mar 2023 05:57:06 GMT</pubDate><content:encoded><![CDATA[<p>In Dart, every class defines an implicit interface. You can use an abstract class to define an interface that cannot be instantiated:</p>
]]></content:encoded></item><item><title><![CDATA[many state management approaches build upon InheritedWidget and others based on service locator]]></title><description><![CDATA[many state management approaches build upon InheritedWidget and others based on service locator]]></description><link>https://nerdev-sd.hashnode.dev/man-state-management-approaches-build-upon-inheritedwidget-4adc68c0f74c</link><guid isPermaLink="true">https://nerdev-sd.hashnode.dev/man-state-management-approaches-build-upon-inheritedwidget-4adc68c0f74c</guid><dc:creator><![CDATA[Kururu]]></dc:creator><pubDate>Thu, 16 Mar 2023 07:29:16 GMT</pubDate><content:encoded><![CDATA[<p>many state management approaches build upon InheritedWidget and others based on service locator</p>
]]></content:encoded></item></channel></rss>