<?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" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Pratik Butani on Medium]]></title>
        <description><![CDATA[Stories by Pratik Butani on Medium]]></description>
        <link>https://medium.com/@pratikbutani?source=rss-c7f96f483bd7------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*j2mPbgl9PBd0ASkZAI_R6Q.png</url>
            <title>Stories by Pratik Butani on Medium</title>
            <link>https://medium.com/@pratikbutani?source=rss-c7f96f483bd7------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 15:35:44 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@pratikbutani/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[4 Platforms I’m Exploring for Jobs, Freelance Work, and Paid AI Opportunities]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://pratikbutani.medium.com/4-platforms-im-exploring-for-jobs-freelance-work-and-paid-ai-opportunities-9e37b5343e73?source=rss-c7f96f483bd7------2"><img src="https://cdn-images-1.medium.com/max/1672/1*Hfw7hxGsa19O0U-Y4RubnQ.png" width="1672"></a></p><p class="medium-feed-snippet">I found four platforms that approach work differently. Here&#x2019;s what they do, who they are for, and how you can get started.For a long time&#x2026;</p><p class="medium-feed-link"><a href="https://pratikbutani.medium.com/4-platforms-im-exploring-for-jobs-freelance-work-and-paid-ai-opportunities-9e37b5343e73?source=rss-c7f96f483bd7------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://pratikbutani.medium.com/4-platforms-im-exploring-for-jobs-freelance-work-and-paid-ai-opportunities-9e37b5343e73?source=rss-c7f96f483bd7------2</link>
            <guid isPermaLink="false">https://medium.com/p/9e37b5343e73</guid>
            <category><![CDATA[freelance]]></category>
            <category><![CDATA[jobs]]></category>
            <category><![CDATA[ai-jobs]]></category>
            <dc:creator><![CDATA[Pratik Butani]]></dc:creator>
            <pubDate>Mon, 28 Sep 2026 18:36:15 GMT</pubDate>
            <atom:updated>2026-09-28T18:36:15.656Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Understanding the New Android Developer Verification Requirements: A Complete Guide]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/mindorks/understanding-the-new-android-developer-verification-requirements-a-complete-guide-1e8a2d98d7ad?source=rss-c7f96f483bd7------2"><img src="https://cdn-images-1.medium.com/max/1024/1*hIesipMjMWrj-XxCTL5rrg.jpeg" width="1024"></a></p><p class="medium-feed-snippet">Google is introducing a major update to how applications are distributed and installed on certified Android devices. Moving forward&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/mindorks/understanding-the-new-android-developer-verification-requirements-a-complete-guide-1e8a2d98d7ad?source=rss-c7f96f483bd7------2">Continue reading on MindOrks »</a></p></div>]]></description>
            <link>https://medium.com/mindorks/understanding-the-new-android-developer-verification-requirements-a-complete-guide-1e8a2d98d7ad?source=rss-c7f96f483bd7------2</link>
            <guid isPermaLink="false">https://medium.com/p/1e8a2d98d7ad</guid>
            <category><![CDATA[android-development]]></category>
            <category><![CDATA[androiddev]]></category>
            <category><![CDATA[google]]></category>
            <category><![CDATA[android]]></category>
            <category><![CDATA[google-play-store]]></category>
            <dc:creator><![CDATA[Pratik Butani]]></dc:creator>
            <pubDate>Mon, 18 May 2026 07:18:33 GMT</pubDate>
            <atom:updated>2026-05-18T07:18:33.678Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Most People Don’t Know This About ChatGPT: Use “Secret Codes” to Control AI Like a Pro]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://pratikbutani.medium.com/most-people-dont-know-this-about-chatgpt-use-secret-codes-to-control-ai-like-a-pro-444c54631c92?source=rss-c7f96f483bd7------2"><img src="https://cdn-images-1.medium.com/max/1536/1*W0QilC5MZYeFLZ0ZSAD3fw.png" width="1536"></a></p><p class="medium-feed-snippet">Most people use ChatGPT casually.</p><p class="medium-feed-link"><a href="https://pratikbutani.medium.com/most-people-dont-know-this-about-chatgpt-use-secret-codes-to-control-ai-like-a-pro-444c54631c92?source=rss-c7f96f483bd7------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://pratikbutani.medium.com/most-people-dont-know-this-about-chatgpt-use-secret-codes-to-control-ai-like-a-pro-444c54631c92?source=rss-c7f96f483bd7------2</link>
            <guid isPermaLink="false">https://medium.com/p/444c54631c92</guid>
            <category><![CDATA[writing-prompts]]></category>
            <category><![CDATA[chatgpt]]></category>
            <category><![CDATA[ai-prompt-engineering]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[productivity]]></category>
            <dc:creator><![CDATA[Pratik Butani]]></dc:creator>
            <pubDate>Tue, 24 Feb 2026 06:46:36 GMT</pubDate>
            <atom:updated>2026-02-24T06:46:36.638Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Melos - Manage your Dart Projects with Monorepo]]></title>
            <link>https://pratikbutani.medium.com/melos-manage-your-dart-projects-with-monorepo-df8ccc6e4a44?source=rss-c7f96f483bd7------2</link>
            <guid isPermaLink="false">https://medium.com/p/df8ccc6e4a44</guid>
            <category><![CDATA[melo]]></category>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[invertase]]></category>
            <category><![CDATA[dart]]></category>
            <category><![CDATA[monorepo]]></category>
            <dc:creator><![CDATA[Pratik Butani]]></dc:creator>
            <pubDate>Wed, 03 May 2023 18:43:40 GMT</pubDate>
            <atom:updated>2023-05-03T18:46:21.658Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TpYQ6-JnRPK4W8EfLYPznw.png" /></figure><p>Have you ever struggled with managing multiple packages or libraries within a Dart project? If you have, you know how challenging it can be to handle dependencies, configurations, and versioning across different packages. This is where <a href="https://melos.invertase.dev/"><strong>Melos</strong></a><strong> </strong>comes in.</p><p>In this blog post, we’ll explore what <strong>Melos</strong> is, its pros and cons, and how you can use it to streamline your development process.</p><h3>What is Melos?</h3><p>Melos is a powerful tool for managing Dart projects as monorepos, providing a simple and efficient way to manage multiple packages and libraries under a single codebase. Melos is designed to help manage these challenges by providing a streamlined workflow for building, testing, and managing dependencies across all projects in the monorepo.</p><blockquote>Melos provides a command-line interface (CLI) that allows you to run scripts across all projects in the monorepo. For example, you can run the same build or test script across all projects, or you can run a script that installs dependencies for all projects. This makes it easy to manage dependencies and keep all projects in sync.</blockquote><p>Melos also provides a plugin system (for <a href="https://melos.invertase.dev/ide-support#intellij">Intellij</a> and <a href="https://melos.invertase.dev/ide-support#vs-code">VS Code</a>) that allows you to extend its functionality. Plugins can be used to add support for new languages, tools, or workflows, or to customize the behavior of existing commands.</p><p>Overall, Melos can be a powerful tool for managing monorepo projects. Its streamlined workflow and plugin system make it easy to manage dependencies and build and test multiple projects in a single repository.</p><h3>What are the pros &amp; cons of Melos?</h3><p>Here are some of the pros and cons of using Melos to manage Dart projects as a monorepo:</p><h4>Pros:</h4><ol><li><strong>Simplified dependency management: </strong>With Melos, you can easily manage dependencies across multiple packages within a monorepo. This helps reduce conflicts and ensures that all packages use the same version of dependencies, making it easier to maintain and update your codebase.</li><li><strong>Consistent development environment:</strong> Melos allows you to ensure that all packages within your monorepo are using the same version of Dart and other dependencies. This helps reduce compatibility issues and streamlines the development process, ensuring that everyone is working with the same tools and resources.</li><li><strong>Streamlined release process:</strong> Melos simplifies the process of publishing packages within your monorepo to the pub.dev registry. This saves time and ensures that all packages are updated with the latest features and bug fixes.</li><li><strong>Enhanced collaboration:</strong> Monorepos can promote collaboration between teams and simplify the sharing of code and resources. With Melos, you can easily manage these shared resources and ensure that they are up-to-date and compatible, making it easier for multiple developers to work on the same codebase simultaneously.</li></ol><h4>Cons:</h4><ol><li><strong>Learning curve:</strong> Melos can be challenging to learn, especially for developers who are new to monorepo concepts or are unfamiliar with the command-line interface.</li><li><strong>Limited flexibility: </strong>Melos requires that you structure your project in a specific way, which may limit your flexibility and make it harder to customize your project structure to fit your needs.</li><li><strong>Increased complexity: </strong>Managing multiple packages and libraries within a single codebase can increase the complexity of your project, making it harder to maintain and troubleshoot.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/400/0*K_BxBmJHVTpn4-s8.gif" /></figure><h3>Installation:</h3><p>To make <a href="https://melos.invertase.dev/">Melos</a> accessible from any location on your system, install it as a global package using <a href="https://pub.dev/packages/melos">pub.dev</a>. It is a one-time step.</p><pre>dart pub global activate melos</pre><h4>Setup in your project:</h4><p>Melos is intended to be used with a workspace, which is a folder that contains all the packages that will be developed simultaneously. The root directory of the workspace must havemelos.yamlfile.</p><pre>name: new_widgets<br><br>packages:<br>  - packages/*<br><br>scripts:<br>  analyze:<br>    exec: dart analyze .</pre><h4>Execute the command:</h4><p>To run the script which is written in melos.yaml use following command:</p><pre>melos run analyze .</pre><p>And it will give you the output as below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OtrAWg0zy7cL2AgOlXh9kg.png" /><figcaption>Melos — Output after running a melos command successfully.</figcaption></figure><p>So this is very basic example in which you learned that how what is Melos, Its pros/cons, and basic example. We will check more examples in next blog.</p><p>Before wrapping up, I would like to share some useful links about Melos:</p><ul><li><a href="https://melos.invertase.dev/">Official Documentation</a></li><li>The best example of Melos that I’ve ever seen: <a href="https://github.com/firebase/flutterfire/blob/master/melos.yaml">FlutterFire</a></li></ul><h4>Melos used by (<a href="https://melos.invertase.dev/#projects-using-melos">Source</a>):</h4><ul><li><a href="https://github.com/flame-engine/flame"><strong>Flame-Engine/Flame</strong></a></li><li><a href="https://github.com/aws-amplify/amplify-flutter"><strong>aws-amplify/amplify-flutter</strong></a></li><li><a href="https://github.com/fluttercommunity/plus_plugins"><strong>fluttercommunity/plus_plugins</strong></a></li><li><a href="https://github.com/GetStream/stream-chat-flutter"><strong>GetStream/stream-chat-flutter</strong></a></li><li><a href="https://github.com/4itworks/opensource_qwkin_dart"><strong>4itworks/opensource_qwkin_dart</strong></a></li><li><a href="https://github.com/gql-dart/ferry"><strong>gql-dart/ferry</strong></a></li><li><a href="https://github.com/cbl-dart/cbl-dart"><strong>cbl-dart/cbl-dart</strong></a></li><li><a href="https://github.com/ema987/paddinger"><strong>ema987/paddinger</strong></a></li><li><a href="https://github.com/flutter-stripe/flutter_stripe"><strong>flutter-stripe/flutter_stripe</strong></a></li><li><a href="https://github.com/kmartins/groveman"><strong>kmartins/groveman</strong></a></li><li><a href="https://github.com/ApptiveGrid/apptive_grid_flutter"><strong>ApptiveGrid/apptive_grid_flutter</strong></a></li><li><a href="https://github.com/flutternetwork/WiFiFlutter"><strong>flutternetwork/WiFiFlutter</strong></a></li><li><a href="https://github.com/iapicca/yak_packages"><strong>iapicca/yak_packages</strong></a></li><li><a href="https://github.com/atsign-foundation/at_app"><strong>atsign-foundation/at_app</strong></a></li><li><a href="https://github.com/sub6resources/flutter_html"><strong>sub6resources/flutter_html</strong></a></li><li><a href="https://github.com/ferraridamiano/ConverterNOW"><strong>ferraridamiano/ConverterNOW</strong></a></li><li><a href="https://github.com/rrifafauzikomara/youtube_video"><strong>rrifafauzikomara/youtube_video</strong></a></li></ul><p>If you’re working on a Dart Monorepo project, I highly recommend giving Melos a try. With its powerful features, intuitive interface, and strong community support, it’s an excellent choice for managing even the most complex projects.</p><p>So don’t hesitate to reach out and get involved in the <a href="https://invertase.link/discord"><strong>Melos community</strong></a> today!</p><p>I will try to explore more about Melos and share with you in next blog, You can also comment if you are going to try and share your feedback later.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/498/0*RbURV3jsW0eMN3m8.gif" /></figure><p>Don’t forget to clap, I know you can clap for 50 times. 👏 😎</p><p>Keep packaging with Melos 🎉</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=df8ccc6e4a44" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Hackathon — What I learned in 24 hours?]]></title>
            <link>https://medium.com/7span/hackathon-what-i-learned-in-24-hours-8cce87d8b928?source=rss-c7f96f483bd7------2</link>
            <guid isPermaLink="false">https://medium.com/p/8cce87d8b928</guid>
            <category><![CDATA[hackathons]]></category>
            <category><![CDATA[7span]]></category>
            <category><![CDATA[hackathon-organizing]]></category>
            <category><![CDATA[sharing-stories]]></category>
            <category><![CDATA[learning]]></category>
            <dc:creator><![CDATA[Pratik Butani]]></dc:creator>
            <pubDate>Thu, 22 Sep 2022 13:29:10 GMT</pubDate>
            <atom:updated>2022-09-22T13:39:17.162Z</atom:updated>
            <content:encoded><![CDATA[<h3>Hackathon — What I learned in 24 hours?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*IrdqBFIxNchSg-Sf9dtIew.jpeg" /><figcaption>7Span — 24hr Hackathon</figcaption></figure><p>Where can you experience all of these emotions in a 24-hour period: <strong>excitement</strong>, <strong>nervousness</strong>, <strong>eagerness</strong>, <strong>inspiration</strong>, <strong>sleepiness</strong>, <strong>enthusiasm</strong>, <strong>enlightenment, </strong>and last but not least <em>Dance Party</em>? To experience these, though, you must take part in a hackathon.</p><p>It was my first Hackathon in my professional career (forgot about college time 😆) and really it is a great experience for me.</p><p>Special thanks to <a href="https://medium.com/u/3e6b6ae724ea">7Span</a> for organizing this event. We had the opportunity to learn about how we can create each part of the product and how every department is required for one product.</p><h3>Definition:</h3><p><a href="https://medium.com/u/2493798f904b">Kaushal Gajjar</a> &amp; <a href="https://medium.com/u/e55f7b61566a">Harsh Kansagara</a> explained the rules.<a href="https://medium.com/u/9022e5c0348d"> Hemratna Bhimani</a> announced the definition of Hackathon in just a single line that is <strong>“URL Shortner”.</strong> For a little moment, everyone was perplexed as to what it was and how it would be executed.</p><h3>Name of Teams:</h3><ul><li>Team-1: <strong>BugBusters</strong> (My Team ❤️)</li><li>Team-2: <strong>CodElfs</strong></li><li>Team-3: <strong>ZeroRisk</strong></li><li>Team-4: <strong>NeodaModes</strong></li><li>Team-5: <strong>UnknownSociety</strong></li></ul><h3>First 30 Mins:</h3><p>We <strong>BugBusters </strong>arranged a meeting for the first 30 mins and discussed all the features which we can implement. We have decided on some features which must be implemented. Apart from that, we thought about Good to have features as well as out-of-the-box features too.</p><h4>Criteria:</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/894/1*KfAl2eFS5icx1WsO-JxeHA.png" /></figure><h3>My Role:</h3><p>In this hackathon, my role is for <strong>Flutter Application Development</strong> as well as managing the team. We two (out of 14) team member has decided to do the management of the team also.</p><h3>What I learned from this Hackathon:</h3><ul><li>Instead of starting the code directly, just check out the libraries or code availability for core functionality <strong>only.</strong></li><li>You don’t have to stick with any one or two criteria. Just implement fewer features but it should be in all required technologies like Mobile App, Web Page, etc.</li><li>Manage the team if you have experience and try to check what your team members are doing.</li><li>Be passionate, and Have patience.</li><li>Be a team player</li><li>Don’t try new things if you don’t know anything about that</li><li>Think twice before implementation,</li><li>Try to find a most accurate solution for core functionality</li><li>Don’t be shy, you should speak. Maybe your point is valid at that time.</li><li>Discipline — Very important thing</li></ul><h3>Result:</h3><p>We’ve had a 24-hour hackathon, and we’re all eager to see the results. Our result was revealed the next day.</p><blockquote>The team BugBusters<strong> is runner-up. Absolutely the first one is ZeroRisk. </strong>We yelled when our name was called. Because it was so loud, everyone in the auditorium turned to face us. We were shocked! Finally, every single effort had paid off!</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*G1jT3Sx7FhfiB-pcz6tObQ.jpeg" /><figcaption>Winner Team — ZeroRisk — 7Span Hackathon</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9n0YwwbjP9HcY2YfG8vzeQ.jpeg" /><figcaption>Winner Team — ZeroRisk — 7Span Hackathon</figcaption></figure><p>And best wishes to everyone who participated and put forth such a wonderful effort. You are top-notch.</p><h3>I hope anyone who missed this hackathon would participate the next time.</h3><p>Thanks for reading. Have a great time.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8cce87d8b928" width="1" height="1" alt=""><hr><p><a href="https://medium.com/7span/hackathon-what-i-learned-in-24-hours-8cce87d8b928">Hackathon — What I learned in 24 hours?</a> was originally published in <a href="https://medium.com/7span">7Span</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[First Talk at Flutter Ahmedabad - Mysterious Widgets Part — II]]></title>
            <link>https://pratikbutani.medium.com/first-talk-at-flutter-ahmedabad-mysterious-widgets-part-ii-48cd1d127cda?source=rss-c7f96f483bd7------2</link>
            <guid isPermaLink="false">https://medium.com/p/48cd1d127cda</guid>
            <category><![CDATA[widgets-in-flutter]]></category>
            <category><![CDATA[flutter-app-development]]></category>
            <category><![CDATA[new-learning]]></category>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[flutter-widget]]></category>
            <dc:creator><![CDATA[Pratik Butani]]></dc:creator>
            <pubDate>Tue, 02 Aug 2022 13:55:04 GMT</pubDate>
            <atom:updated>2022-08-02T13:55:04.040Z</atom:updated>
            <content:encoded><![CDATA[<h3>First Talk at Flutter Ahmedabad - Mysterious Widgets Part — II</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*iMziy4FxK94xQ7NJlVdM8A.jpeg" /></figure><p>Hello Folks, Hope you have enjoyed the weekend.</p><p>Of course, we also had a great time at the <a href="https://www.meetup.com/flutterahm/events/287331089/"><strong>Flutter Ahmedabad</strong></a><strong> July Meet-up.</strong> It’s my first offline event as a speaker at Flutter Ahmedabad, therefore I’m going to talk about my experience.</p><p>First and foremost, I want to express my gratitude to <a href="https://medium.com/u/79e16f5a5db1">Bhavik Makwana</a> &amp; <a href="https://medium.com/u/2e044ba89158">Bharat Makwana</a> for arranging this event and inviting <a href="https://medium.com/u/ea5224204e53">Mukund Jogi</a> and me to speak. They are both doing an excellent job.</p><p>I talked about stunning widgets that programmers are unaware of. The same subject was covered by me during the <a href="https://medium.com/7span/mysterious-widgets-my-first-flutter-festival-talk-ce9e21ea2b31"><strong>Flutter Festival in Kozhikode.</strong></a></p><p><a href="https://medium.com/7span/mysterious-widgets-my-first-flutter-festival-talk-ce9e21ea2b31">Mysterious Widgets - My First Flutter Festival Talk</a></p><p>Thankfully, I also had the opportunity to speak here. Due to time constraints, I decided to stick with the same theme, but I also added a lot of new widgets to my slides.</p><blockquote>I watched the <a href="https://youtube.com/playlist?list=PLjxrf2q8roU23XGwz3Km7sQZFTdB996iG"><strong><em>Widget of the Week</em></strong></a> playlist on YouTube to find such widgets. If you want to learn new widgets, I strongly suggest watching the playlist.</blockquote><p>These new widgets, which I described today, are as follows:</p><h4><em>1. StatefulBuilder:</em></h4><ul><li>I know that you already know about this widget. If I am not wrong, You have used this widget to update the values in <em>Dialog</em> or <em>BottomNavigationSheets</em>.</li><li>As I mentioned, the majority of developers only use StatefulBuilder widgets to update data, but if you’ve used them for anything else, please comment on it.</li><li>I have used it for different purposes, you can check my demo<strong> </strong><a href="https://github.com/pratikbutani/flutter_mysterious_widget/blob/main/lib/widgets/demo_stateful_builder.dart"><strong>here.</strong></a></li></ul><p><strong>Output:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/540/1*5muCV1cDTZ5MDlxuOAfumg.png" /><figcaption>Screenshot — <a href="https://github.com/pratikbutani/flutter_mysterious_widget/blob/main/lib/widgets/demo_stateful_builder.dart">StatefulBuilder</a> Widget</figcaption></figure><ul><li>You can check the demo by clicking on each button it will show you the usage of the <strong>StatefulBuilder</strong> widget.</li></ul><h4>2. NavigationRails:</h4><ul><li>BottomNavigationBars are great for mobile, but they’re not great for larger screens.</li><li>NavigationRail provides the same functionality but is designed to look and work better with desktop and web apps running on larger screens.</li></ul><p><strong>Output:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/497/1*TdIvBuPk5QfFyVA4pxcWSw.png" /><figcaption>Screenshot — <a href="https://github.com/pratikbutani/flutter_mysterious_widget/blob/main/lib/widgets/demo_navigation_rail.dart">NavigationRails</a> widget</figcaption></figure><ul><li>Check out the full demo <a href="https://github.com/pratikbutani/flutter_mysterious_widget/blob/main/lib/widgets/demo_navigation_rail.dart">here</a>.</li></ul><h4>Bonus Widgets:</h4><h4>3. InteractiveViewer:</h4><ul><li>The user can transform the child by dragging to pan or pinching to zoom.</li><li>Checkout the <a href="https://api.flutter.dev/flutter/widgets/InteractiveViewer-class.html">documentation</a></li></ul><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fzrn7V3bMJvg%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dzrn7V3bMJvg&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fzrn7V3bMJvg%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/ad493ca375251b21242822f0820dce05/href">https://medium.com/media/ad493ca375251b21242822f0820dce05/href</a></iframe><h4>4. AboutDialog:</h4><ul><li>This is a dialog box with the application’s icon, name, version number, and copyright, plus a button to show licenses for software used by the application.</li><li>Checkout the <a href="https://api.flutter.dev/flutter/material/AboutDialog-class.html">documentation</a></li></ul><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FYFCSODyFxbE%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DYFCSODyFxbE&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FYFCSODyFxbE%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/62bcfcdac66f4e8d564951c8afaa3aec/href">https://medium.com/media/62bcfcdac66f4e8d564951c8afaa3aec/href</a></iframe><h4>5. ToggleButtons:</h4><ul><li>It&#39;s not the same as Toggle Switch, you can use it when you have a collection of buttons and you want to set the state of each button like true or false.</li><li>For example, If you are going to create an awesome text editor and you want to put buttons for bold, italic &amp; underline then it should be ToggleButtons.</li><li>Check out the <a href="https://api.flutter.dev/flutter/material/ToggleButtons-class.html">Documentation</a></li></ul><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FkVEguaQWGAY%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DkVEguaQWGAY&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FkVEguaQWGAY%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/d9f2d4dbd3003e2fd5b86662487d8452/href">https://medium.com/media/d9f2d4dbd3003e2fd5b86662487d8452/href</a></iframe><h4>6. DataTable:</h4><ul><li>To display data in a table, all the data must be measured twice: first to negotiate the dimensions to use for each column and again to actually build out the table based on the outcomes of the negotiation.</li><li>For this reason, If you have lots of data to display in table format then you can go with <strong>DataTable.</strong></li><li>Check out the <a href="https://api.flutter.dev/flutter/material/DataTable-class.html">Documentation</a></li></ul><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FktTajqbhIcY%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DktTajqbhIcY&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FktTajqbhIcY%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/71a18e83d52c53a695745622770abcbe/href">https://medium.com/media/71a18e83d52c53a695745622770abcbe/href</a></iframe><h4>7. SelectableText:</h4><ul><li>Text widget with selectable text, you can select the text and it allows you to copy the text.</li></ul><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FZSU3ZXOs6hc%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DZSU3ZXOs6hc&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FZSU3ZXOs6hc%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/b7ad97e5c789871758fd783bbf5869fb/href">https://medium.com/media/b7ad97e5c789871758fd783bbf5869fb/href</a></iframe><p>That’s it, folks. I learned about these widgets and shared them with developers.</p><p>Apart from that, we also played a small game in which we have to draw the dash with some unique style.</p><p><a href="https://twitter.com/search?q=%23FlutterAhmDash">Here</a> you can check who has participated and shown their creativity. 😃</p><p>Thank you for reading.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Ftenor.com%2Fembed%2F20773745&amp;display_name=Tenor&amp;url=https%3A%2F%2Ftenor.com%2Fview%2Fim-proud-of-you-dan-levy-david-david-rose-schitts-creek-gif-20773745&amp;image=https%3A%2F%2Fmedia.tenor.com%2F-DXhLQTX9hwAAAAd%2Fim-proud-of-you-dan-levy.gif&amp;key=d04bfffea46d4aeda930ec88cc64b87c&amp;type=text%2Fhtml&amp;schema=tenor" width="600" height="400" frameborder="0" scrolling="no"><a href="https://medium.com/media/583c80f3f287651e4f4f97d3a3f51689/href">https://medium.com/media/583c80f3f287651e4f4f97d3a3f51689/href</a></iframe><h3>Keep Clapping 👏 (You can clap up to +50)</h3><p>Your love is everything to me. Keep Appreciating.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=48cd1d127cda" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Flutter Web ⇔ JavaScript — Everything that you need to know]]></title>
            <link>https://medium.com/7span/flutter-web-javascript-everything-that-you-need-to-know-b07a32d7ad56?source=rss-c7f96f483bd7------2</link>
            <guid isPermaLink="false">https://medium.com/p/b07a32d7ad56</guid>
            <category><![CDATA[flutter-web]]></category>
            <category><![CDATA[flutter-app]]></category>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[flutter-app-development]]></category>
            <dc:creator><![CDATA[Pratik Butani]]></dc:creator>
            <pubDate>Thu, 07 Jul 2022 14:09:48 GMT</pubDate>
            <atom:updated>2022-07-08T05:00:16.970Z</atom:updated>
            <content:encoded><![CDATA[<h3>Flutter Web ⇔ JavaScript — Everything that you need to know</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7kmHra9UG9pY8poAkCZMpw.gif" /><figcaption>Flutter Web + JavaScript by Pratik Butani (7Span)</figcaption></figure><p><strong>Common Questions from FlutterDev:</strong></p><ul><li>How do I pass the values from Flutter to JavaScript?</li><li>How to get a response from JavaScript to Flutter?</li><li>How can I wait for a response from JavaScript?</li><li>How can we open a new window of browser in Flutter Web?</li></ul><p>At the end of the blog you will get all the answers related to Flutter Web with JavaScript.</p><h4>Overview:</h4><p>The web itself is a flexible platform, but <a href="https://flutter.dev/multi-platform/web">Flutter</a> is ideal for building web applications like PWAs or SPAs and bringing your existing mobile app to the web.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6pD03G9L2JMf9khILf7lGw.png" /><figcaption>Benefits of Flutter Web (Source: flutter.dev/web)</figcaption></figure><p><a href="https://api.dart.dev/stable/2.7.2/dart-js/dart-js-library.html"><strong>Dart.js</strong></a> is a built-in library that can interop with JavaScript but as per documentation we should usually use package:js instead of this library.</p><p>For more information, see the <a href="https://dart.dev/web/js-interop">JS interop page</a>.</p><p>Let&#39;s see step by step:</p><h4>Step 1: Add package:js into pubspec.yaml</h4><pre>dependencies:<br>  js: ^0.6.4</pre><h4>Step 2: Create a JavaScript Library file</h4><p>I have created a JavaScript library file at lib/js/js_library.dart</p><pre>@JS()<br>library script.js;<br><br>import &#39;package:js/js.dart&#39;;<br><br><em>// This function will do Promise to return something<br></em>@JS()<br>external dynamic jsPromiseFunction(String message);<br><br><em>// This function will open new popup window for given URL.<br></em>@JS()<br>external dynamic jsOpenTabFunction(String url);</pre><pre><em>///         ^            ^                ^<br>///      return     functionName       arguments</em></pre><p>Here I have created two functions.</p><p>The first one is jsPromiseFunction in which I will pass some string and it will return with a modified string by JS.</p><p>The second one is jsOpenTabFunction with URL which is passed in the argument and it will show an alert once that popup is closed.</p><p>We have imported script.js into an above file. We will write our logic into this JavaScript file that will be available in our <strong>web </strong>folder as below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/384/1*b3h-Vix7xGPYdF6clgu5Qg.png" /><figcaption>script.js location in our flutter project</figcaption></figure><p>Here is the code of <strong>script.js </strong>:</p><pre>function getPlatform() {<br>  return navigator.platform;<br>}<br><br>async function jsPromiseFunction(message) {<br>    let msg = message;<br>    let promise = new Promise(function(resolve, reject) {<br>        resolve(&#39;Hello : &#39; + message);<br>    });<br>    let result = await promise;<br>    return result;<br>}<br><br>async function jsOpenTabFunction(url) {<br>    let promise = new Promise(function(resolve, reject) {<br>        var win = window.open(url,&quot;New Popup Window&quot;,&quot;width=800,height=800&quot;);<br>        console.log(&quot;window&quot;,win);<br><br>        var timer = setInterval(function() {<br>                if (win.closed) {<br>                    clearInterval(timer);<br>                    alert(&quot;&#39;Popup Window&#39; closed!&quot;);<br>                    resolve(&#39;Paid&#39;);<br>                }<br>            }, 500);<br>        console.log(&quot;window&quot;,win);<br>    });<br>    let result = await promise;<br>    console.log(&quot;result&quot;,result);<br>    return result;<br>}</pre><p>Let&#39;s understand how that function will be called. So we will create one helper class that will decide whether the compilation platform is Mobile or Web so we can import the file based on that.</p><p>Let me show you the code of that file: (<strong>js_helper.dart</strong>)</p><pre><em>// THIS FILE WILL PREVENT COMPILE TIME ERRORS,<br>// WHICH OCCURS BECAUSE OF PLATFORM DEPENDENT IMPORTS...<br><br></em>export &#39;js_helper_mobile.dart&#39; <em>// By default<br>    </em>if (dart.library.js) &#39;js_helper_web.dart&#39;<br>    if (dart.library.io) &#39;js_helper_mobile.dart&#39;;<br><br><em>/// The compiler will then say something like this:<br>/// Let’s export &#39;js_helper_mobile.dart&#39; By default,<br>/// but if the &quot;dart.library.js&quot; is available, export &#39;js_helper_web.dart&#39;.<br>/// But hey, if &quot;dart.library.io&quot; is available, export &#39;js_helper_mobile.dart&#39;!</em></pre><p>Note: This file will allow import based on platform (like dart.library.js is for <strong>web </strong>and dart.library.io is for <strong>mobile.</strong></p><p>Now we will create both files for Mobile and Web. Let&#39;s have a look:</p><p><strong>js_helper_web.dart:</strong></p><pre>import &#39;dart:js&#39; as js;<br><br>import &#39;package:js/js_util.dart&#39;;<br><br>import &#39;js_library.dart&#39;;<br><br>class JSHelper {<br>  <em>/// This method name inside &#39;getPlatform&#39; should be same in JavaScript file<br>  </em>String getPlatformFromJS() {<br>    return js.context.callMethod(&#39;getPlatform&#39;);<br>  }<br><br>  Future&lt;String&gt; callJSPromise() async {<br>    return await promiseToFuture(jsPromiseFunction(&quot;I am back from JS&quot;));<br>  }<br><br>  Future&lt;String&gt; callOpenTab() async {<br>    return await promiseToFuture(jsOpenTabFunction(&#39;https://google.com/&#39;));<br>  }<br>}</pre><p>Note: Both the file will have the same class name and same method names. We will write the logic into a <strong>Web</strong> file only.<strong> The mobile</strong> file will have empty methods.</p><p>Here is the <strong>js_helper_mobile.dart:</strong></p><pre>class JSHelper {<br>  String getPlatformFromJS() {<br>    return &quot;&quot;;<br>  }<br><br>  Future&lt;String&gt; callOpenTab() {<br>    return Future.value(&#39;&#39;);<br>  }<br><br>  Future&lt;String&gt; callJSPromise() async {<br>    return &quot;&quot;;<br>  }<br>}</pre><p>Confused??? 😆</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*jTI4JIzeEtpO5J1E.jpg" /><figcaption>Don’t be confused. Let&#39;s have an example.</figcaption></figure><p>Let’s check how to use it.</p><p>Create an object of <strong>JSHelper</strong> class.</p><pre>final JSHelper _jsHelper = JSHelper();</pre><p>Calling the first method to get a platform:</p><pre>onPressed: () async {<br>  <em>// Loader<br>  </em>String platForm = _jsHelper.getPlatformFromJS();<br>  print(&quot;platForm ----------- $platForm&quot;);<br>}</pre><p>And it will print the platform on which you are running this project.</p><p><strong>Output:</strong></p><pre>platForm ----------- MacIntel</pre><p>Now you can check other functions by downloading the <a href="https://github.com/pratikbutani/flutter_web_js/"><strong>GitHub project</strong></a></p><blockquote>I believe that you will check the demo and you will find the interesting part of Flutter Web with JavaScript communication.</blockquote><p>I am always available for help if you get stuck anywhere.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/498/0*Sv8AjpQcEtUmo0iU.gif" /><figcaption>Clap for Appreciation :)</figcaption></figure><p>Hope you like the article and learned something useful. <strong>Keep Clapping.</strong> 😄 👏</p><p>Connect with me on <a href="https://www.linkedin.com/in/pratikbutani/">LinkedIn</a>, <a href="https://twitter.com/pratik13butani/">Twitter</a> and Don’t forget to follow me <a href="http://pratikbutani.medium.com/">here</a> for more updates.</p><p>Keep Sharing. Thank you 😅</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b07a32d7ad56" width="1" height="1" alt=""><hr><p><a href="https://medium.com/7span/flutter-web-javascript-everything-that-you-need-to-know-b07a32d7ad56">Flutter Web ⇔ JavaScript — Everything that you need to know</a> was originally published in <a href="https://medium.com/7span">7Span</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Mysterious Widgets - My First Flutter Festival Talk]]></title>
            <link>https://medium.com/7span/mysterious-widgets-my-first-flutter-festival-talk-ce9e21ea2b31?source=rss-c7f96f483bd7------2</link>
            <guid isPermaLink="false">https://medium.com/p/ce9e21ea2b31</guid>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[flutter-app-development]]></category>
            <category><![CDATA[flutter-ui]]></category>
            <category><![CDATA[flutter-widget]]></category>
            <category><![CDATA[widgets-in-flutter]]></category>
            <dc:creator><![CDATA[Pratik Butani]]></dc:creator>
            <pubDate>Tue, 21 Jun 2022 18:48:35 GMT</pubDate>
            <atom:updated>2022-08-02T14:08:23.337Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sT59_ynGyXahUwJ7_kVAHA.png" /><figcaption><strong>My First Flutter Festival</strong> —<strong> Flutter Developer Group Kozhikode</strong></figcaption></figure><p>Hello everyone,</p><p>Here I have given my First <strong>#FlutterFestival</strong> talk and I am thankful to <a href="https://www.meetup.com/Flutter-Developer-Group-Kozhikode/events/283382104/"><strong>Flutter Developer Group — Kozhikode</strong></a> for giving me the opportunity by invited as a Speaker &amp; share my knowledge with the community.</p><p>I always love to share new things with the developers. Here I’ve chosen that topic just because I can share something new with developers which is might not be known.</p><p>I have prepared some widgets which may be unknown to most developers. So let&#39;s start with the list of Mysterious Widgets.</p><h4>1. Error Widget:</h4><ul><li>Display custom widget instead of the scary RED color screen while debugging the app.</li><li>This kind of error will be displayed when the builder fails to build a widget.</li><li>Try out for <strong>release mode, </strong>and do let me know in a comment whether is it working or not. :P</li><li>For more visit <a href="https://docs.flutter.dev/testing/errors#define-a-custom-error-widget-for-build-phase-errors">official docs</a></li></ul><p><strong>Here is the code:</strong></p><ul><li>First of all, you have to write the builder inside the <strong>MaterialApp.</strong></li></ul><pre>return MaterialApp(<br>    title: &#39;Flutter Demo&#39;,<br>    <em>builder: (context, widget) {</em><br>      <strong>ErrorWidget.<em>builder </em>= (FlutterErrorDetails errorDetails) {<br>        return DemoErrorWidget(<br>          errorDetails: errorDetails, <em>// [Optional]<br>        </em>);<br>      };<br>      return widget!;</strong><br>    <em>},</em><br>    theme: ThemeData(<br>      primarySwatch: Colors.<em>blue</em>,<br>    ),<br>    <em>// home: const MyHomePage(title: &#39;Flutter Festival&#39;),<br>    </em>home: const MyHomePage(title: &#39;Change Widgets Accordingly&#39;),<br>  );<br>}</pre><p>You can create <a href="https://github.com/pratikbutani/flutter_mysterious_widget/blob/main/lib/widgets/demo_error_widget.dart"><strong>DemoErrorWidget</strong></a><strong> </strong>with your own custom UI.</p><p>Here is the output of what I have done.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/540/1*Ywn1ai3rSaTQM1gRFB8O7w.png" /><figcaption><a href="https://github.com/pratikbutani/flutter_mysterious_widget/blob/main/lib/widgets/demo_error_widget.dart"><strong>Custom Error Widget instead of Scary Red Screen</strong></a></figcaption></figure><p>Additionally, visit this <a href="https://docs.flutter.dev/testing/errors#handling-all-types-of-errors">link</a> to check how we can handle all kinds of errors in Flutter.</p><h4>2. ExactAssetImage:</h4><ul><li>Scale your image based on device pixel ratio and size</li><li>Requires an explicit final <a href="https://api.flutter.dev/flutter/painting/ExactAssetImage/assetName.html">assetName</a> and <a href="https://api.flutter.dev/flutter/painting/ExactAssetImage/scale.html">scale</a> in constructor</li></ul><p><strong>Here is the code:</strong></p><pre>Container(<br>  width: 400, // Just an example<br>  color: Colors.<em>green</em>,<br>  child: const Image(<br>    image: ExactAssetImage(<br>      &#39;assets/images/dash.png&#39;,<br>      scale: 2, // It will scale the image by 2<br>    ),<br>  ),<br>)</pre><p>Check out the full code <a href="https://github.com/pratikbutani/flutter_mysterious_widget/blob/main/lib/widgets/demo_exact_assets_image.dart">here</a>.</p><p><strong>Output:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/540/1*4n_vC4FtS9pkjP04W4SRMQ.png" /><figcaption><a href="https://api.flutter.dev/flutter/painting/ExactAssetImage-class.html">ExactAssestImage</a> Example</figcaption></figure><h4>3. FractionallySizedBox:</h4><ul><li>Sizes its child to a fraction of the total available space</li></ul><p>Let&#39;s look into a code directly to understand it easily.</p><pre>Container(<br>  width: double.<em>maxFinite</em>,<br>  color: Colors.<em>black45</em>,<br>  child: FractionallySizedBox(<br>    widthFactor: 0.7,<br>    child: ElevatedButton(<br>      onPressed: () {<br>        setState(() {<br>          width += 50;<br>        });<br>      },<br>      child: const Text(&#39;Button&#39;),<br>    ),<br>  ),<br>),</pre><p>Check the full code <a href="https://github.com/pratikbutani/flutter_mysterious_widget/blob/main/lib/widgets/demo_fractionally_sized_box.dart">here</a>.</p><p>Here is the output of the full code:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/540/0*ckO4rPupr3_jYWO4.png" /><figcaption><a href="https://github.com/pratikbutani/flutter_mysterious_widget/blob/main/lib/widgets/demo_fractionally_sized_box.dart"><strong>FractionallySizedBox</strong></a></figcaption></figure><p>In this output, you can see the second button has spaces on both sides. It will automatically resize based on Container’s width. Try out the demo and do let me know how is it.</p><h4>4. ImageFiltered:</h4><ul><li>Applies an ImageFilter to its child.</li><li>You can do Blur &amp; Matrix (like translation, scaling, rotating, etc.)</li><li>In Flutter, everything is a widget so you can pass anything to a child.</li></ul><p><strong>Here is the code:</strong></p><pre>ImageFiltered(<br>  imageFilter: ImageFilter.blur(sigmaX: 5),<br>  child: const Text(<br>    &#39;Flutter Festival&#39;,<br>    style: TextStyle(fontSize: 30),<br>  ),<br>),</pre><p><strong>Output:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/540/0*RTdArSR5tsqIo6wA.png" /><figcaption><a href="https://api.flutter.dev/flutter/widgets/ImageFiltered-class.html"><strong>ImageFiltered</strong></a><strong> Widget</strong></figcaption></figure><p>Here is the <a href="https://github.com/pratikbutani/flutter_mysterious_widget/blob/main/lib/widgets/demo_image_filter.dart">full snippet</a> with a matrix example.</p><h4>5. ListWheelScrollView:</h4><ul><li>A box in which children on a wheel can be scrolled.</li><li>We can say its a cool 3D ListView</li><li>All children must be the same size along the scrolling axis.</li></ul><p><strong>Here is the code:</strong></p><pre>ListWheelScrollView(<br>  itemExtent: 150,<br>  offAxisFraction: 0,<br>  diameterRatio: 3,<br>  children: List.generate(<br>    50,<br>    (index) =&gt; Padding(<br>      padding: const EdgeInsets.all(8.0),<br>      child: Container(<br>        height: 200,<br>        width: double.<em>maxFinite</em>,<br>        child: Center(child: Text(&#39;Index $index&#39;)),<br>        color: Color((math.Random().nextDouble() * 0xFFFFFF).toInt())<br>            .withOpacity(1.0),<br>      ),<br>    ),<br>  ),<br>),</pre><p><strong>Output:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/423/0*uKmiNqFrcTckC9CS.gif" /><figcaption><a href="https://api.flutter.dev/flutter/widgets/ListWheelScrollView-class.html"><strong>ListWheelScrollView</strong></a></figcaption></figure><p>You can check the <a href="https://github.com/pratikbutani/flutter_mysterious_widget/blob/main/lib/widgets/demo_list_wheel_scroll_view.dart">full code</a> here.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/498/0*wkd5UNdDLNbYHMjx.gif" /><figcaption>Is this end? — Nope.</figcaption></figure><p>Yeah… The end is here.. but I have one surprise for you :)</p><h4>Bonus: Try out to write Animated and check suggestions.</h4><p>Don&#39;t forget to try it out and comment here on what you found.</p><p><a href="https://pratikbutani.medium.com/first-talk-at-flutter-ahmedabad-mysterious-widgets-part-ii-48cd1d127cda">First Talk at Flutter Ahmedabad - Mysterious Widgets Part — II</a></p><p>Thank you so much for reading.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/498/0*UUqNUgHK1DqSOQVx.gif" /></figure><h4>Keep clapping 👏 (you can appreciate it by clapping 50 times.)</h4><p>Happy to help anytime. Connect with me on <a href="https://www.linkedin.com/in/pratikbutani/"><strong>LinkedIn</strong></a><strong> 🎉 😄</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ce9e21ea2b31" width="1" height="1" alt=""><hr><p><a href="https://medium.com/7span/mysterious-widgets-my-first-flutter-festival-talk-ce9e21ea2b31">Mysterious Widgets - My First Flutter Festival Talk</a> was originally published in <a href="https://medium.com/7span">7Span</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Flutter version solving failed error — After Flutter 2 Upgrade]]></title>
            <link>https://pratikbutani.medium.com/flutter-2-upgrade-flutter-version-solving-failed-error-33ac1087cb6b?source=rss-c7f96f483bd7------2</link>
            <guid isPermaLink="false">https://medium.com/p/33ac1087cb6b</guid>
            <category><![CDATA[pub]]></category>
            <category><![CDATA[flutter-app-development]]></category>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[dependencies]]></category>
            <category><![CDATA[pubspec]]></category>
            <dc:creator><![CDATA[Pratik Butani]]></dc:creator>
            <pubDate>Sat, 06 Mar 2021 10:20:53 GMT</pubDate>
            <atom:updated>2022-04-29T12:44:39.902Z</atom:updated>
            <content:encoded><![CDATA[<h3>Flutter version solving failed error -[after Flutter 2 upgrade]</h3><h4>I know <a href="https://medium.com/u/d53dd768d047">Stack Overflow</a> and <a href="https://medium.com/u/8df3bf3c40ae">GitHub</a> are full of the question for flutter 2 that is <strong>version solving failed, a dependency depends on another dependency… Here I am going to give you two solutions to this problem.</strong></h4><p>I am so happy after the announcement of Flutter 2. Hopefully, you too. This is my first article on Flutter and it will help many developers for sure.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*-HsnhHupIIrFDktf.png" /><figcaption>Flutter 2 —Google Developers Blogs</figcaption></figure><p>I have just started working on Flutter before few months only. I am super excited to go with Flutter now.</p><p>I developed one application 6 months back in Android that I am converting to Flutter and it&#39;s almost ready!</p><p>I know all the developers facing dependency issues in Flutter after <strong>upgrading Version 2.</strong></p><p>Here are some examples of errors that may you got in the past or you will get in the feature.</p><h4>Example 1: Firebase Dependencies Error</h4><blockquote>Because firebase_remote_config 0.6.0 depends on firebase_core ^0.7.0 and no versions of firebase_remote_config match &gt;0.6.0 &lt;0.7.0, firebase_remote_config ^0.6.0 requires firebase_core ^0.7.0. So, because flutter_demo depends on both firebase_core ^1.0.0 and firebase_remote_config ^0.6.0, version solving failed. pub get failed (1; So, because flutter_demo depends on both firebase_core ^1.0.0 and firebase_remote_config ^0.6.0, version solving failed.)</blockquote><h4>Example 2: Flutter Location Notification Error</h4><blockquote>Because flutter_local_notifications_platform_interface 2.0.0+1 depends on plugin_platform_interface ^1.0.2 and no versions of flutter_local_notifications_platform_interface match &gt;2.0.0+1 ❤.0.0, flutter_local_notifications_platform_interface ^2.0.0+1 requires plugin_platform_interface ^1.0.2. So, because flutter_demo depends on both flutter_local_notifications_platform_interface ^2.0.0+1 and plugin_platform_interface ^2.0.0, version solving failed. pub get failed (1; So, because flutter_demo depends on both flutter_local_notifications_platform_interface ^2.0.0+1 and plugin_platform_interface ^2.0.0, version solving failed.)</blockquote><p>and many more errors posted on <a href="https://stackoverflow.com/search?q=body%3Aflutter+version+conflict"><strong>Stackoverflow</strong></a><strong> and GitHub</strong> by many developers.</p><h3>I know you are waiting for a solution, here it is:</h3><h3>Solution 1:</h3><p>The simplest solution is if you are doing some important and deadline work and you don&#39;t want to take any risk, you can use an <strong>older version of Flutter</strong> only.</p><p>If you have already upgraded Flutter 2, You can downgrade the older version using flutter downgrade</p><blockquote>Note: Must try everything on new or older Flutter after taking a backup of your project.</blockquote><h3>Solution 2:</h3><p>If you are just learning and not doing any deadline work then you can try this option because it&#39;s all about trial-n-error.</p><p>Use a new section in <strong>pubspec.yaml </strong>named <strong><em>`dependency_overrides:` </em></strong><a href="https://dart.dev/tools/pub/dependencies#dependency-overrides"><strong><em>[Documentation]</em></strong></a></p><p><strong>You can use </strong><strong>dependency_overrides it to temporarily override all references to a dependency.</strong></p><p>Here is the older version of my <a href="https://gist.github.com/pratikbutani/be7c0afcd48607f1e84bdb0372d9da37#file-pub_spec_1-yaml"><strong>pubspec.yaml</strong></a><strong> </strong>which is working before upgrading to Flutter 2. I got the errors in as it is pubspec after upgrading Flutter 2. After trying for 2 days I got a solution using <strong>dependency_overrides.</strong></p><p>And finally here is the new <a href="https://gist.github.com/pratikbutani/be7c0afcd48607f1e84bdb0372d9da37#file-pub_spec_2-yaml"><strong>pubspec.yaml</strong></a><strong>, </strong>In which you can check some dependency added to <em>dependency_overrides.</em></p><p><strong>How to do it:</strong></p><p>You can check which dependency is dependent on another dependency. You can write that dependency in dependency_overrides:</p><pre><em>dependency_overrides:<br>  firebase_auth: “&gt;=1.0.0”<br>  firebase_core: “&gt;=0.7.0”<br>  firebase_messaging: “&gt;=8.0.0-dev.14”<br>  firebase_remote_config: “&gt;=0.6.0”<br>  firebase_auth_web: “&gt;=0.2.0” <br>  firebase: “&gt;=7.0.0”<br>  flutter_local_notifications: “&gt;=4.0.0”</em></pre><p>As of now, At the time of writing this blog, It is working for me, you can change version changes as per your needs.</p><blockquote><strong>Warning:</strong> Using a dependency override involves some risk. For example, using an override to specify a version outside the range that the package claims to support, or using an override to specify a local copy of a package that has unexpected behaviors, may break your application.</blockquote><p>Hopefully, someone will get help or a clue from it.</p><p>If you have any questions, free feel to ping me any time.</p><p><strong>Be Independent :P</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*D259cydKAxSCEDsneqA8Yg.gif" /></figure><h3>Keep Clapping 👏 (You can clap up to +50)</h3><p>Your love is everything to me. Keep Appreciating.</p><p>Thank you for reading. ❤ ❤ ❤</p><p>Let’s be friends: <a href="http://www.linkedin.com/in/pratikbutani">LinkedIn,</a> <a href="https://www.facebook.com/pratikbutani">Facebook,</a> <a href="https://www.quora.com/profile/Pratik-Butani">Quora</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=33ac1087cb6b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[eInvoice Verification — QR Code JSON Scanner]]></title>
            <link>https://pratikbutani.medium.com/einvoice-verification-qr-code-json-scanner-df5b5e07b3f3?source=rss-c7f96f483bd7------2</link>
            <guid isPermaLink="false">https://medium.com/p/df5b5e07b3f3</guid>
            <category><![CDATA[qr-code]]></category>
            <category><![CDATA[gst]]></category>
            <category><![CDATA[einvoicing-solutions]]></category>
            <category><![CDATA[android-apps]]></category>
            <category><![CDATA[einvoice]]></category>
            <dc:creator><![CDATA[Pratik Butani]]></dc:creator>
            <pubDate>Thu, 22 Oct 2020 07:09:17 GMT</pubDate>
            <atom:updated>2020-10-22T08:19:29.822Z</atom:updated>
            <content:encoded><![CDATA[<h3>eInvoice Verification — QR Code JSON Scanner for e-Invoices</h3><figure><img alt="eInvoice Verification App from Soham ERP Solutions Private Limited" src="https://cdn-images-1.medium.com/max/1024/1*y_nXeKT_gn8JT5MDxCVCaQ.png" /><figcaption>Soham ERP Solutions Private Limited</figcaption></figure><p>The GST council has notified that every taxpayer with a turnover (B2B supplies) above INR 500 crores in a financial year will have to implement e-Invoicing. Under this, the taxpayers have to generate invoices on their internal systems (ERP/accounting/billing software) and then report it online to the ‘Invoice Registration Portal (IRP). The IRP will validate the information provided in the invoices and return the digitally signed e-Invoices with a unique ‘Invoice Reference Number (IRN)’ along with a QR Code in JSON format to the taxpayer.</p><p>The QR code generated by IRP has to be printed on the invoice copy shared with the buyer.</p><p>Once you get the QR Code, You can check whether it is verified or not on<br><a href="https://play.google.com/store/apps/details?id=com.soham.einvoice.verification"><strong>eSoham - eInvoice Verification</strong></a><strong>.</strong></p><p>Sample QR Code:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/228/1*lefRIKogToplzHXwY0Nyjg.png" /><figcaption>Sample QR Code of eInvoice</figcaption></figure><h4>There are two options available in the application:</h4><p><strong>1. Verify Digital Signature using QR Code:</strong> This option allows you to scan the QR code of the e-invoice, verify the digital signature of the QR code, and display the signed content.</p><p><strong>2. Verify Digital Signature using JSON: </strong>This option allows you to upload the signed e-invoice JSON file and verify the digital signature of the invoice and display the signed content.</p><p>The <a href="https://play.google.com/store/apps/details?id=com.soham.einvoice.verification"><strong>eSoham - eInvoice Verification</strong></a><strong> App </strong>is<strong> </strong>also verified JSON that you can upload from the app. The <a href="https://einvoice1.gst.gov.in/Documents/SampleJson.json">Sample JSON</a> is available. You can modify and upload to check whether it&#39;s verified or not.</p><p>Here are some screenshots:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/720/1*LbN8hofjnb5QIgeB8tP1yw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/720/1*s0AQQMgI5qv9qanjkca9Ew.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/720/1*5-y68qvrZAeFXuI4_mcH1Q.png" /><figcaption>Screenshots of eInvoice Verification by QR Code or JSON</figcaption></figure><p>Hope you will love this app. Do not forget to rate the app.</p><p>Let’s be friends on <a href="http://www.linkedin.com/in/pratikbutani">LinkedIn,</a> <a href="https://www.facebook.com/pratikbutani">Facebook,</a> <a href="https://www.quora.com/profile/Pratik-Butani">Quora</a></p><p>Thank you.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=df5b5e07b3f3" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>