<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sumeet Sharma</title>
    <description>The latest articles on DEV Community by Sumeet Sharma (@sumeet_sharma_93b3d3b71a6).</description>
    <link>https://dev.to/sumeet_sharma_93b3d3b71a6</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3381656%2Ffc769d2d-2761-4f6e-8f98-ee8d0e7f2213.jpg</url>
      <title>DEV Community: Sumeet Sharma</title>
      <link>https://dev.to/sumeet_sharma_93b3d3b71a6</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sumeet_sharma_93b3d3b71a6"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Sumeet Sharma</dc:creator>
      <pubDate>Wed, 12 Nov 2025 09:04:59 +0000</pubDate>
      <link>https://dev.to/sumeet_sharma_93b3d3b71a6/-4836</link>
      <guid>https://dev.to/sumeet_sharma_93b3d3b71a6/-4836</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/sumeet_sharma_93b3d3b71a6/building-dynamic-forms-in-flutter-like-a-pro-5j4" class="crayons-story__hidden-navigation-link"&gt;Building Dynamic Forms in Flutter Like a Pro&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/sumeet_sharma_93b3d3b71a6" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3381656%2Ffc769d2d-2761-4f6e-8f98-ee8d0e7f2213.jpg" alt="sumeet_sharma_93b3d3b71a6 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/sumeet_sharma_93b3d3b71a6" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Sumeet Sharma
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Sumeet Sharma
                
              
              &lt;div id="story-author-preview-content-2743321" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/sumeet_sharma_93b3d3b71a6" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3381656%2Ffc769d2d-2761-4f6e-8f98-ee8d0e7f2213.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Sumeet Sharma&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/sumeet_sharma_93b3d3b71a6/building-dynamic-forms-in-flutter-like-a-pro-5j4" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 31 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/sumeet_sharma_93b3d3b71a6/building-dynamic-forms-in-flutter-like-a-pro-5j4" id="article-link-2743321"&gt;
          Building Dynamic Forms in Flutter Like a Pro
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/flutter"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;flutter&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mobile"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mobile&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/android"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;android&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/sumeet_sharma_93b3d3b71a6/building-dynamic-forms-in-flutter-like-a-pro-5j4#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>flutter</category>
      <category>programming</category>
      <category>mobile</category>
      <category>android</category>
    </item>
    <item>
      <title>Supercharge Your Flutter App with Native Python Execution</title>
      <dc:creator>Sumeet Sharma</dc:creator>
      <pubDate>Tue, 05 Aug 2025 13:28:09 +0000</pubDate>
      <link>https://dev.to/sumeet_sharma_93b3d3b71a6/supercharge-your-flutter-app-with-native-python-execution-fmb</link>
      <guid>https://dev.to/sumeet_sharma_93b3d3b71a6/supercharge-your-flutter-app-with-native-python-execution-fmb</guid>
      <description>&lt;p&gt;Ever wondered if you could run native Python code directly inside your Flutter app? Yes, you read that right—it’s absolutely possible! As a senior mobile app developer working with both Flutter and hybrid stacks like Ionic, I’ll walk you through how to unlock this power in your next project.&lt;/p&gt;

&lt;p&gt;Previously, I published a guide on running Python in native Android using Chaquopy. If you haven't gone through that setup yet, check out my Medium post first:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="https://medium.com/@sumeetsharma_29269/bring-python-to-your-android-app-using-chaquopy-91f852426033" class="ltag__link__link" rel="noopener noreferrer"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afill%3A64%3A64%2F1%2AP2-4wWdBvOtEcalm-negCg.jpeg" alt="Sumeet Sharma"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://medium.com/@sumeetsharma_29269/bring-python-to-your-android-app-using-chaquopy-91f852426033" class="ltag__link__link" rel="noopener noreferrer"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Bring Python to Your Android App Using Chaquopy | by Sumeet Sharma | Jul, 2025 | Medium&lt;/h2&gt;
      &lt;h3&gt;Sumeet Sharma ・ &lt;time&gt;Jul 31, 2025&lt;/time&gt; ・ 
      &lt;div class="ltag__link__servicename"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fmedium-f709f79cf29704f9f4c2a83f950b2964e95007a3e311b77f686915c71574fef2.svg" alt="Medium Logo"&gt;
        Medium
      &lt;/div&gt;
    &lt;/h3&gt;
&lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
.

&lt;p&gt;That post covers the foundational Chaquopy integration. Once you’ve set up the basic dependencies in your root and app-level Gradle files, you only need a small tweak to make things work smoothly with your Flutter setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Adjust your root-level build.gradle.kts&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;buildscript {
    dependencies {
        classpath("com.android.tools.build:gradle:8.8.2")
        classpath("com.chaquo.python:gradle:16.1.0")
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep the rest of your Chaquopy configurations from the Medium guide the same.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Set up the Method Channel in Flutter&lt;/strong&gt;&lt;br&gt;
To bridge communication between Flutter (Dart) and Android native (Kotlin), create a Method Channel service in your Flutter code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class MyMethodChannelService {
  static const platform = MethodChannel('my_method_channel');

  static Future&amp;lt;String&amp;gt; helloWorld() async {
    try {
      return await platform.invokeMethod('hello_world');
    } on PlatformException catch (e) {
      return 'Failed to invoke Python method: ${e.message}';
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This service lets you invoke native Android code from your Flutter widgets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Configure Kotlin (MainActivity.kt)&lt;/strong&gt;&lt;br&gt;
On the Kotlin side, set up the method channel with the same name, initialize Python (if not already started), and define the channel handler. This handler will listen for Flutter invocations and call the desired Python function..&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;private val CHANNEL = "my_method_channel"
private lateinit var python: Python
private lateinit var pythonModule: com.chaquo.python.PyObject

override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
    super.configureFlutterEngine(flutterEngine)
    if (!Python.isStarted()) {
        Python.start(AndroidPlatform(this))
    }
    python = Python.getInstance()
    pythonModule = python.getModule("main")

    MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result -&amp;gt;
        when (call.method) {
            "hello_world" -&amp;gt; {
                handleAsyncCall(result) {
                    pythonModule.callAttr("hello_world").toString()
                }
            }
            else -&amp;gt; {
                result.notImplemented()
            }
        }
    }
}

private fun handleAsyncCall(result: MethodChannel.Result, pythonCall: suspend () -&amp;gt; String) {
    CoroutineScope(Dispatchers.IO).launch {
        try {
            val pythonResult = pythonCall()
            withContext(Dispatchers.Main) {
                result.success(pythonResult)
            }
        } catch (e: Exception) {
            withContext(Dispatchers.Main) {
                result.error("PYTHON_ERROR", "Error executing Python function: ${e.message}", e.toString())
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This setup ensures the async Python call doesn’t block the main thread, and all exceptions are gracefully handled.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Call from Your Flutter UI&lt;/strong&gt;&lt;br&gt;
Now, hook it up to your Flutter UI. For example, in your Home widget:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Home extends StatelessWidget {
  const Home({super.key});

  void helloWorld(BuildContext context) async {
    final result = await MyMethodChannelService.helloWorld();
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text(result)),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: ElevatedButton(
          onPressed: () =&amp;gt; helloWorld(context),
          child: const Text("Run Python Function"),
        ),
      ),
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/sumeet1001/flutter_chaquopy" rel="noopener noreferrer"&gt;Check out the code on GitHub.&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When the button is pressed, it calls your native Python function and displays the result in a snackbar.&lt;/p&gt;

&lt;p&gt;That’s it! You now have a clean, production-ready bridge to execute Python code from Flutter, leveraging native Android with Chaquopy. Perfect for embedding AI, data science, or any Python-powered feature in your cross-platform app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fler2psyl0o7d9i09dxkg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fler2psyl0o7d9i09dxkg.png" alt="Demo run screenshot of the debug logs" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>mobile</category>
      <category>android</category>
      <category>python</category>
    </item>
    <item>
      <title>Building Dynamic Forms in Flutter Like a Pro</title>
      <dc:creator>Sumeet Sharma</dc:creator>
      <pubDate>Tue, 05 Aug 2025 11:44:39 +0000</pubDate>
      <link>https://dev.to/sumeet_sharma_93b3d3b71a6/building-dynamic-forms-in-flutter-like-a-pro-51jm</link>
      <guid>https://dev.to/sumeet_sharma_93b3d3b71a6/building-dynamic-forms-in-flutter-like-a-pro-51jm</guid>
      <description>&lt;p&gt;Ever wondered how dynamic forms actually work? Turns out, you can build smart, dynamic forms with just about any tech stack—but today, I’ll walk you through a supercharged way to do this in Flutter. And trust me, once you try it, manual form coding will feel like chiseling on stone!&lt;/p&gt;

&lt;p&gt;We’ll leverage the awesome &lt;a href="https://pub.dev/packages/flutter_form_builder" rel="noopener noreferrer"&gt;flutter_form_builder&lt;/a&gt; package for our form wizardry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Folder Structure: Laying the Foundation&lt;/strong&gt;&lt;br&gt;
Clean code = happy dev life! Here’s how I like to organize things, following a “feature-first” structure (which scales great for teams or solo hustle):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;widgets/: All your input widgets go here—text fields, radios, dropdowns—you name it.&lt;/li&gt;
&lt;li&gt;presentation/: The home for screens and UI logic.&lt;/li&gt;
&lt;li&gt;model/: Data models. If it’s shaping your data, it lives here.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out a sample setup:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F30zpisjkyd4066hbznb9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F30zpisjkyd4066hbznb9.png" alt="flutter feature folder structure" width="508" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Heartbeat: Config JSON&lt;/strong&gt;&lt;br&gt;
The real superpower behind dynamic forms? Your config JSON! Store it on your server, fetch it when needed, and voilà—instantly update your UI without touching the app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Meet the ConfigJson Class&lt;/strong&gt;&lt;br&gt;
Our ConfigJson class defines every form field, what type it is, its options, and more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;name: Unique field key (for saving form data).&lt;/li&gt;
&lt;li&gt;label: What the user actually sees.&lt;/li&gt;
&lt;li&gt;type: Text? Radio? Checkbox? You decide.&lt;/li&gt;
&lt;li&gt;required: Simple true/false for validations.&lt;/li&gt;
&lt;li&gt;options: Use this for dropdowns, radios, checkboxes—wherever you need choices.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's the code for reference:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;enum FieldType { text, radio, checkbox, dropdown }

class LabelValue {
  final String? label;
  final String? value;
}

class ConfigJson {
  final String name;
  final String? label;
  final FieldType type;
  final bool required;
  final List&amp;lt;LabelValue&amp;gt;? options;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Boom. Dynamic configs are now a snap! &lt;a href="https://github.com/sumeet1001/dynamic_form" rel="noopener noreferrer"&gt;check the code on github&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UI: Making the Magic Happen&lt;/strong&gt;&lt;br&gt;
Now, let's render the form. In your forms.dart (inside presentation/), here’s a quick peek at our build method. It wraps the dynamic fields inside a stylish, modern Scaffold.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@override 
Widget build(BuildContext context) {
  return Scaffold(
    body: SafeArea(
      child: Column(
        children: [
          Expanded(
            child: FormBuilder(
              key: _formKey,
              child: FormFieldList(formConfig: formConfig),
            ),
          ),
        ],
      ),
    ),
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;final _formKey = GlobalKey();&lt;br&gt;
This gives us full power over form state for validation, submission, and introspection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rendering Each Field&lt;/strong&gt;&lt;br&gt;
Loop over the config using a FormFieldList, and hand each field off to a specialized widget that knows how to render it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class FormFieldList extends StatelessWidget {
  final List&amp;lt;ConfigJson&amp;gt; formConfig;
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: formConfig.length,
      itemBuilder: (context, index) =&amp;gt; Field(field: formConfig[index]),
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, inside your Field widget, switch on field.type and build the correct widget (text, radio, checkbox, or dropdown).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Validations: Mix It (in)!&lt;/strong&gt;&lt;br&gt;
Nobody likes bad data. I’ve whipped up a FormFieldValidatorsMixin that latches onto each field and injects necessary validation. Required fields? Just mark required: true in your config, and the mixin handles the rest.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mixin FormFieldValidatorsMixin {
  List&amp;lt;FormFieldValidator&amp;gt; bindValidations(ConfigJson field) {
    List&amp;lt;FormFieldValidator&amp;gt; validations = [];
    if (field.required) {
      validations.add(FormBuilderValidators.required());
    }
    return validations;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Custom validations? Add them to your JSON and extend the mixin as needed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7w8os7hv1attb234pr1n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7w8os7hv1attb234pr1n.png" alt="final output of the flutter dynamic form with flutte_form_builder" width="800" height="341"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Wrapping Up&lt;/strong&gt;&lt;br&gt;
And there you have it! You're now equipped to build scalable, maintainable, and fully dynamic forms in Flutter like a true pro. Simply update your JSON on the server, and your app's forms will adapt on the fly—no rebuilds, no App Store reviews, no sweat.&lt;/p&gt;

&lt;p&gt;Level up your form game and remember: a well-structured dynamic form is a thing of beauty!&lt;/p&gt;

&lt;p&gt;For the complete source code and to see it all in action, &lt;a href="https://github.com/sumeet1001/dynamic_form" rel="noopener noreferrer"&gt;check out the project on GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>programming</category>
      <category>mobile</category>
      <category>android</category>
    </item>
    <item>
      <title>Building Dynamic Forms in Flutter Like a Pro</title>
      <dc:creator>Sumeet Sharma</dc:creator>
      <pubDate>Thu, 31 Jul 2025 08:01:47 +0000</pubDate>
      <link>https://dev.to/sumeet_sharma_93b3d3b71a6/building-dynamic-forms-in-flutter-like-a-pro-5j4</link>
      <guid>https://dev.to/sumeet_sharma_93b3d3b71a6/building-dynamic-forms-in-flutter-like-a-pro-5j4</guid>
      <description>&lt;p&gt;Ever wondered how dynamic forms actually work? Turns out, you can build smart, dynamic forms with just about any tech stack—but today, I’ll walk you through a supercharged way to do this in Flutter. And trust me, once you try it, manual form coding will feel like chiseling on stone!&lt;/p&gt;

&lt;p&gt;We’ll leverage the awesome &lt;a href="https://pub.dev/packages/flutter_form_builder" rel="noopener noreferrer"&gt;flutter_form_builder&lt;/a&gt; package for our form wizardry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Folder Structure: Laying the Foundation&lt;/strong&gt;&lt;br&gt;
Clean code = happy dev life! Here’s how I like to organize things, following a “feature-first” structure (which scales great for teams or solo hustle):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;widgets/: All your input widgets go here—text fields, radios, dropdowns—you name it.&lt;/li&gt;
&lt;li&gt;presentation/: The home for screens and UI logic.&lt;/li&gt;
&lt;li&gt;model/: Data models. If it’s shaping your data, it lives here.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out a sample setup:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F30zpisjkyd4066hbznb9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F30zpisjkyd4066hbznb9.png" alt="flutter feature folder structure" width="508" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Heartbeat: Config JSON&lt;/strong&gt;&lt;br&gt;
The real superpower behind dynamic forms? Your config JSON! Store it on your server, fetch it when needed, and voilà—instantly update your UI without touching the app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Meet the ConfigJson Class&lt;/strong&gt;&lt;br&gt;
Our ConfigJson class defines every form field, what type it is, its options, and more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;name: Unique field key (for saving form data).&lt;/li&gt;
&lt;li&gt;label: What the user actually sees.&lt;/li&gt;
&lt;li&gt;type: Text? Radio? Checkbox? You decide.&lt;/li&gt;
&lt;li&gt;required: Simple true/false for validations.&lt;/li&gt;
&lt;li&gt;options: Use this for dropdowns, radios, checkboxes—wherever you need choices.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's the code for reference:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;enum FieldType { text, radio, checkbox, dropdown }

class LabelValue {
  final String? label;
  final String? value;
}

class ConfigJson {
  final String name;
  final String? label;
  final FieldType type;
  final bool required;
  final List&amp;lt;LabelValue&amp;gt;? options;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Boom. Dynamic configs are now a snap! &lt;a href="https://github.com/sumeet1001/dynamic_form" rel="noopener noreferrer"&gt;check the code on github&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UI: Making the Magic Happen&lt;/strong&gt;&lt;br&gt;
Now, let's render the form. In your forms.dart (inside presentation/), here’s a quick peek at our build method. It wraps the dynamic fields inside a stylish, modern Scaffold.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@override 
Widget build(BuildContext context) {
  return Scaffold(
    body: SafeArea(
      child: Column(
        children: [
          Expanded(
            child: FormBuilder(
              key: _formKey,
              child: FormFieldList(formConfig: formConfig),
            ),
          ),
        ],
      ),
    ),
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;final _formKey = GlobalKey();&lt;br&gt;
This gives us full power over form state for validation, submission, and introspection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rendering Each Field&lt;/strong&gt;&lt;br&gt;
Loop over the config using a FormFieldList, and hand each field off to a specialized widget that knows how to render it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class FormFieldList extends StatelessWidget {
  final List&amp;lt;ConfigJson&amp;gt; formConfig;
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: formConfig.length,
      itemBuilder: (context, index) =&amp;gt; Field(field: formConfig[index]),
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, inside your Field widget, switch on field.type and build the correct widget (text, radio, checkbox, or dropdown).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Validations: Mix It (in)!&lt;/strong&gt;&lt;br&gt;
Nobody likes bad data. I’ve whipped up a FormFieldValidatorsMixin that latches onto each field and injects necessary validation. Required fields? Just mark required: true in your config, and the mixin handles the rest.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mixin FormFieldValidatorsMixin {
  List&amp;lt;FormFieldValidator&amp;gt; bindValidations(ConfigJson field) {
    List&amp;lt;FormFieldValidator&amp;gt; validations = [];
    if (field.required) {
      validations.add(FormBuilderValidators.required());
    }
    return validations;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Custom validations? Add them to your JSON and extend the mixin as needed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7w8os7hv1attb234pr1n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7w8os7hv1attb234pr1n.png" alt="final output of the flutter dynamic form with flutte_form_builder" width="800" height="341"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Wrapping Up&lt;/strong&gt;&lt;br&gt;
And there you have it! You're now equipped to build scalable, maintainable, and fully dynamic forms in Flutter like a true pro. Simply update your JSON on the server, and your app's forms will adapt on the fly—no rebuilds, no App Store reviews, no sweat.&lt;/p&gt;

&lt;p&gt;Level up your form game and remember: a well-structured dynamic form is a thing of beauty!&lt;/p&gt;

&lt;p&gt;For the complete source code and to see it all in action, &lt;a href="https://github.com/sumeet1001/dynamic_form" rel="noopener noreferrer"&gt;check out the project on GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>programming</category>
      <category>mobile</category>
      <category>android</category>
    </item>
    <item>
      <title>Bring Python to Your Android App Using Chaquopy</title>
      <dc:creator>Sumeet Sharma</dc:creator>
      <pubDate>Mon, 28 Jul 2025 09:35:42 +0000</pubDate>
      <link>https://dev.to/sumeet_sharma_93b3d3b71a6/bring-python-to-your-android-app-using-chaquopy-5aci</link>
      <guid>https://dev.to/sumeet_sharma_93b3d3b71a6/bring-python-to-your-android-app-using-chaquopy-5aci</guid>
      <description>&lt;p&gt;Hi Devs,&lt;/p&gt;

&lt;p&gt;I've written a Medium article about integrating a Python script natively into your Android app.&lt;br&gt;
&lt;a href="https://medium.com/@sumeetsharma_29269/bring-python-to-your-android-app-using-chaquopy-91f852426033" rel="noopener noreferrer"&gt;Read here.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kotlin</category>
      <category>python</category>
      <category>android</category>
      <category>java</category>
    </item>
  </channel>
</rss>
