Google search engine
Home Blog Page 4

Explore Dart String Interpolation

0

In this article, we will be Explore Dart String Interpolation. We will learn how to execute a demo program. We will show you many demo for understanding string interpolations in your Dart applications.

If you’re looking for the best Flutter app development company for your mobile application then feel free to contact us at — support@flutterdevs.com.


Table Of Contents:

Introduction

Dart String Interpolation Demo 1

Demo 2 – Embedding Expressing Dart String Interpolation

Demo 3 – Multi-Line Strings

Demo 4 – Method & Properties access into String

Conclusion



Introduction:

It is possible to incorporate variable values into string literals in Dart. Here, the String Interpolation feature in Dart offers a more lucid method of displaying text in Dart, allowing us to do away with the laborious string concatenation method that we previously employed (where we use the + Operator to concatenate text).

We can encapsulate a variable value or expression inside a string in Dart by utilising String Interpolation. Syntax looks like this: $variableName or ${expression}.

Dart String Interpolation Demo 1:

Here are some examples that will help you better grasp string interpolations.

void main() {
  String name = 'Sam';
  int age = 28;

  String greeting = 'Hello, $name! You are $age years old.';
  print(greeting); // Output: Hello, Sam! You are 28 years old.
}

Name and age are two variables with values that are inserted into a string greeting using the $name & $age syntax, as you can see in the source code above.

Demo 2 – Embedding Expressing Dart String Interpolation:

You must use ${}, or curly braces, when doing any calculations or when employing expressions.

void main() {
  int a = 3;
  int b = 2;

  String result = 'The sum of $a and $b is ${a + b}.';
  print(result); // Output: The sum of 3 and 2 is 5.
}

In this case, the final string result is embedded within the string after a + b is done.

Demo 3 – Multi-Line Strings:

void main() {
  String firstName = 'Sam';
  String lastName = 'Thomas';

  String introduction = '''
  My name is $firstName $lastName.
  I am expert in Dart.
  ''';

  print(introduction);
  // Output:
  // My name is John Doe.
  // I am expert in Dart.
}

We may construct a multiline string in Dart and interpolate the variable into it by utilising triple quotes.

Demo 4 – Method & Properties access into String:

We may also integrate method and property access in Dart by using the string interpolation technique, as seen in the example below.

void main() {
  DateTime currentDate= DateTime.now();

  String currentTime = 'Current time is: ${currentDate.hour}:${currentDate.minute}:${currentDate.second}';
  print(currentTime);
  // Output: Current time is: HH:MM:SS (actual time values)
}

Here, DateTime is being used to obtain the current DateTime. Using the syntax ${currentDate.hours}, ${currentDate.minute}, and ${currentDate.second}, we can readily access the attributes of the now() Class Object, which include hours, minutes, and seconds, into strings.

Conclusion:

In the article, I have explained how the Explore Dart String Interpolation; you can modify this code according to your choice. This was a small introduction to Explore Dart String Interpolation User Interaction from my side, and it’s working using Flutter.

I hope this blog will provide you with sufficient information on trying the Explore Dart String Interpolation in your Flutter projectsThe best method for retrieving values from dynamic strings in Dart is String Interpolation. This makes your code much easier to read and maintain. String interpolation is a crucial method in Flutter Dart programming, regardless of whether you are working with basic string concatenation or intricate data representation. So please try it.

❤ ❤ Thanks for reading this article ❤❤

If I need to correct something? Let me know in the comments. I would love to improve.

Clap 👏 If this article helps you.


From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire Flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! For any flutter-related queries, you can connect with us on FacebookGitHubTwitter, and LinkedIn.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.


Custom Camera Component in Flutterflow

0

In today’s mobile-first world, integrating camera functionality into your app isn’t just a cool feature — it’s a necessity. Whether you’re building a social app, e-commerce platform, or document scanner, capturing photos natively provides an intuitive and engaging user experience.

That’s where our Custom Camera Component for FlutterFlow comes in. In this blog, we’ll walk through what this component does, how it works, and how you can easily integrate it into your project — no manual camera configuration required.

What is the Custom Camera Component?

The Custom Camera Component is a plug-and-play widget built with Flutter and fully compatible with FlutterFlow. It allows users to take pictures directly from within your app. Once the photo is captured, the component displays the image in a bottom sheet preview, allowing for instant confirmation or further action.

It simplifies camera integration into a single, reusable, and UI-friendly interface.

What Is It?

The Custom Camera Component allows users to:

  • Open the device’s camera
  • Capture a photo when the “Take Picture” button is tapped
  • Display the captured image in a bottom sheet
  • Store the image as a base64 string for further use

How It Works — State Management

To manage the photo-capturing flow, two AppState variables are used:

  1. makePhoto (Boolean): This is used to trigger the photo capture when set to true.
  2. fileBase64 (String): This stores the captured image in base64 format, which can later be used for previewing or uploading.

Make sure both variables are created in your FlutterFlow App State (Settings > App State):

  • makePhotoBoolean (default: false)
  • fileBase64String

🚀 Key Features

  • One-Tap Access to Camera — Launch the device’s camera with a single tap.
  • 🖼 Real-time Image Preview — Shows the captured image immediately in a bottom sheet.
  • 🛠 Modular & Reusable — Easily drop this component into any screen or flow.
  • FlutterFlow Ready — No manual platform code required; just drag, drop, and go.

How It Works

When added to your app, the component renders a button labeled “Take Picture.” Here’s what happens under the hood:

  1. User taps “Take Picture” — The component calls the device’s native camera using image_picker or camera package logic.
  2. Camera opens — The device camera interface is launched, allowing the user to capture a photo.
  3. Image captured — After the user takes the photo, the captured image is saved temporarily.
  4. Bottom sheet appears — The image is displayed in a styled bottom sheet, where users can review or confirm the picture.

All of this happens in a smooth, intuitive flow that keeps users engaged and on-task.

📲 Use Cases

The Custom Camera Component is perfect for:

  • User profile pictures
  • Product listings in a marketplace
  • Document or receipt uploads
  • Field data capture
  • Social sharing apps

Custom Widget Code: CameraPhoto

Here’s the complete code for the camera component:

// Automatic FlutterFlow imports
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/custom_code/widgets/index.dart'; // Imports other custom widgets
import '/flutter_flow/custom_functions.dart'; // Imports custom functions
import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:camera/camera.dart';

class CameraPhoto extends StatefulWidget {
const CameraPhoto({
Key? key,
this.width,
this.height,
}) : super(key: key);

final double? width;
final double? height;

@override
_CameraPhotoState createState() => _CameraPhotoState();
}

class _CameraPhotoState extends State<CameraPhoto> {
CameraController? controller;
late Future<List<CameraDescription>> _cameras;

@override
void initState() {
super.initState();
_cameras = availableCameras();
}

@override
void didUpdateWidget(covariant CameraPhoto oldWidget) {
super.didUpdateWidget(oldWidget);
if (FFAppState().makePhoto) {
controller!.takePicture().then((file) async {
Uint8List fileAsBytes = await file.readAsBytes();
final base64 = base64Encode(fileAsBytes);

FFAppState().update(() {
FFAppState().fileBase64 = base64;
FFAppState().makePhoto = false;
});
}).catchError((error) {});
}
}

@override
void dispose() {
controller?.dispose();
super.dispose();
}

@override
Widget build(BuildContext context) {
return FutureBuilder<List<CameraDescription>>(
future: _cameras,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasData && snapshot.data!.isNotEmpty) {
if (controller == null) {
controller =
CameraController(snapshot.data![0], ResolutionPreset.max);
controller!.initialize().then((_) {
if (!mounted) return;
setState(() {});
});
}
return controller!.value.isInitialized
? MaterialApp(home: CameraPreview(controller!))
: Container();
} else {
return const Center(child: Text('No cameras available.'));
}
} else {
return const Center(child: CircularProgressIndicator());
}
},
);
}
}

Custom Function to Convert base64 to File

When previewing or uploading the image, you’ll need to convert it back to a file. Here’s a helpful custom function for that:

import 'dart:convert';
import '/flutter_flow/uploaded_file.dart';

FFUploadedFile? base64toFile(String base64Img) {
final bytes = base64Decode(base64Img);
final file = FFUploadedFile(bytes: bytes);
return file;
}

How to Use This Component

  1. Add CameraPhoto widget to any page.
  2. Add a button with an Action to:
     Set App State → makePhoto = true
  3. Use a Conditional widget or Bottom Sheet to detect when fileBase64 is updated and show the image using base64toFile(fileBase64).
  4. Done! You’ve got a working custom camera integration.

🧩 How to Use in Your FlutterFlow App

  1. Add the component to any screen.
  2. No additional setup required — no Firebase or platform channels.
  3. Customize UI (optional) by changing the button style, icon, or sheet design.

Because it uses standard Flutter widgets and is pre-wired for camera access, there’s no platform-specific setup needed beyond the usual permissions in Android/iOS (which FlutterFlow handles with ease).

Conclusion

Integrating native camera access doesn’t need to be complicated. With this Custom Camera Component, you get a fast, reliable, and visually polished solution that enhances the usability of your app.

Whether you’re building a new FlutterFlow project or improving an existing one, this component makes capturing and previewing images a breeze.

From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire Flutterflow developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! For any flutter-related queries, you can connect with us on Facebook, GitHub, Twitter, and LinkedIn.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.

Flutter: Socket.IO WebSockets Client

0

In this article, we will explore Flutter: Socket.IO WebSockets Client. We will learn how to execute a demo program. We will show you how to use Socket.IO Client with the socket_io_client package in your Flutter applications.

For Socket IO Client:

socket_io_client | Dart package
Dartlang port of socket. io-client for web, flutter, dartvm to usepub.dev

If you’re looking for the best Flutter app development company for your mobile application then feel free to contact us at — support@flutterdevs.com.


Table Of Contents:

What is Socket.IO

How Socket.IO Works

Implementation

Code Implement

Conclusion



What is Socket.IO:

By allowing real-time connection between clients and servers, the Flutter library Socket.IO allows us to enable or superpower Flutter apps. WebSocket Technology is ideal for developing applications such as online gaming, real-time chat, and more.

How Socket.IO Works:

We set up a real-time, bidirectional data transfer between the client application (Flutter) and the backend server, which will function as a WebSockets server.

Actions to take:

  • Create a connection between the server and the client.
  • Any event or message that comes in from the server will be heard by the Flutter app.
  • Data will be broadcast to the backend by Emet Events.
  • Always cut off the client-server connection when it is no longer required.

Implementation:

Step 1: Add the dependencies

Add dependencies to pubspec . yaml file.

dependencies:
  flutter:
    sdk: flutter
  socket_io_client: ^latest version

Step 2: Import

import 'package:socket_io_client/socket_io_client.dart' as IO;

Step 3: Run flutter packages get in the root directory of your app.

How to implement code in dart file:

=> Initialize SocketIO in Flutter:-

  • onConnect: A callback is initiated when a WebSocket connects.
  • onDisconnect: The onDisconnect method allows us to continuously check for socket disconnections caused by certain sockets.
IO.Socket socket = IO.io('http://localhost:3000',
  OptionBuilder()
      .setTransports(['websocket']) 
      .setExtraHeaders({'foo': 'bar'})
      .build());


socket.connect();

socket.onConnect((_) => print(" Connected to Server "));

socket.onConnectError(() => print('Connection Error: $err'));

socket.onError((err)=> print("Error"));

socket.onDisconnect((_)=> print('Disconnected from Server"));
  • onConnectError: is utilised for handling; a callback will be initiated if an error occurs during socket connection.
  • onError: This can be used to address any errors that may arise during the client-server message exchange.

=> Listening to WebSocket Events:-
We utilise the On method to listen to any incoming messages related to a certain event topic. Flutter apps can utilise On Method to listen to incoming messages, such as showing new chat messages in real time.

void listenToSocketEvent(){

socket.on('eventName' (data){
   print(' Message received: $data');
});

}

=> Sending or Emitting Events to Listeners:-

The emit method is used when we wish to broadcast an event to all listeners or send a message or data to a server. We can instantly send data or messages from client to server by using emit.

void sendData(){

  final messageData = {

   'messageId':'abcd12',
   'text':'Hello, This is First Message', 
   'sender':'userName',
   'isImportant':true,
   'timestamp':DataTime.now().toIso8601String(),
  }

}

=> Closing WebSockets:-

Never forget to disconnect the socket while not in use. This is usually possible while the application is closed.

void closeAllSocketConnection(){

   socket.disconnect();
   socket.dispose();

}

Conclusion:

In the article, I have explained the Clutter: Socket.IO WebSockets Client; you can modify this code according to your choice. This was a small introduction to the Flutter: Socket.IO WebSockets Client User Interaction from my side, and it’s working using Flutter.

I hope this blog will provide you with sufficient information on Trying the Flutter: Socket.IO WebSockets Client in your Flutter projectsWe will show you what the Introduction is. Make a demo program for working on the Socket.IO WebSockets Client using the socket_io_client package in your Flutter applications. So please try it.

❤ ❤ Thanks for reading this article ❤❤

If I need to correct something? Let me know in the comments. I would love to improve.

Clap 👏 If this article helps you.


From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire Flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! For any flutter-related queries, you can connect with us on FacebookGitHubTwitter, and LinkedIn.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.


Flutter Deep Links – A unique way!

0

We can provide our users with a customised flow thanks to deep linking. Apps can reply to URLs and direct users to particular sites or actions through deep linking. Firebase Dynamic Links was a well-known solution for this feature up to this point. Nevertheless, Firebase has decided to discontinue support for Dynamic Links, and on August 25, 2025, the service will cease operations (Reference). And now that time is running out, we must either utilise a custom/unique solution or switch to a new one.

This blog will take a different approach to examining Flutter Deep Links! Instead of integrating and experimenting with several solutions in your Flutter applications, we will look at how to develop a new one.

If you’re looking for the best Flutter app development company for your mobile application then feel free to contact us at — support@flutterdevs.com



Create a website:

Every deep link has a webpage, or URL, as you might say. In our situation, all we need to do is make a basic website. If the user hasn’t installed your app, they will see this page. So that customers can download the program, you can add logic to open the appropriate shopfronts.

Imagine that you make a website at https://flutterdevs.com/. Any free hosting service, such as Firebase Hosting, Netlify, etc., can be used to host the website; a.com domain or any other type of paid domain is not necessary.

Configuration Files on your website:

We must produce two files for iOS and Android once your website is complete. You must establish a subdirectory named “.well-known” in the codebase of your website, which will house the configuration files. Don’t alter the folder’s name!

Android
Make sure to include a new file named assetlinks.json in your well-known.
The settings for your Android app will be in this file. It ought to include the following information:

[
    {
        "relation": [
            "delegate_permission/common.handle_all_urls"
        ],
        "target": {
            "namespace": "android_app",
            "package_name": "com.example.app",
            "sha256_cert_fingerprints": [
                "your sha256 key"
            ]
        }
    }
]

You must add a SHA256 key to the list and change the package_name in the aforementioned file to the package name of your application. If you want to debug your device, you may add its SHA256 key. You can also include the SHA256 key you used to sign your app when it was released. You can also locate it in the Developer Console under Setup > App Integrity > App Signing if you sign your production app through the Google Play Store.

iOS
Make a new file called apple-app-site-association within your. well-known folder. The settings for your iOS app will be in this file. It ought to include the following information:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appIDs": [
                    "teamID.bundleID"
                ],
                "components": [
                    {
                        "/": "*",
                        "comment": "Matches any URL path"
                    }
                ]
            }
        ]
    }
}

You must change teamID to your app’s Team ID (which you can obtain from Xcode or the Apple Developer Console) and bundleID to your app’s Bundle ID in the aforementioned file. You may either add all URLs by including * in the components or you can mention specific destinations.

After adding these files, redeploy them and make sure the modified files are visible at https://flutterdevs.com/.well-known/assetlinks.json and https://flutterdevs.com/.well-known/apple-app-site-association. Try clearing your cache or waiting a little while if you don’t see the updated material.

App Configuration:

It’s time to set up our software to manage deep links after you’ve finished configuring your website.

Android
Let’s make changes to the AndroidManifest.xml file to enable deep links on Android. To your file, add the following:

<intent-filter android:autoVerify="true">
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />

  <data android:scheme="https" />
  <data android:host="yourDomain.com" />
</intent-filter>

Remember to adjust the domain, which in our case would be flutterdevs.com. Any path on your website will open your app like the example above. You can take the following action if you want to limit the app’s opening to particular paths:

<data android:path=”/invite” />

iOS
You must launch Xcode and add your domain to Associated Domains in Signing & Capabilities in order for iOS to support deep links.

Handling Deep Links:

We must now manage the deep links in our application after finishing all the configurations. To handle the deep link quickly and simply, you can use a package like app_links. You must take the following actions to use the app_links package to handle deep links:

final appLinks = AppLinks(); // AppLinks is singleton

// Subscribe to all events (initial link and further)
final sub = appLinks.uriLinkStream.listen((uri) {
// Do something (navigation, ...)
});

That’s it! You won’t have to pay or test out numerous solution providers because it’s so simple to construct your deep-linking solution.

Conclusion:

In the article, I have explained the Flutter Deep Links – A unique way! basic structure in Flutter; you can modify this code according to your choice. This was a small introduction to the  Flutter Deep Links – A unique way!, On User Interaction from my side, and it’s working using Flutter.

I hope this blog will provide you with sufficient information on trying the Flutter Deep Links – A unique way! In your projects. So please try it.

❤ ❤ Thanks for reading this article ❤❤

If I got something wrong? Let me know in the comments. I would love to improve.

Clap 👏 If this article helps you.


From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire Flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! For any flutter-related queries, you can connect with us on FacebookGitHubTwitter, and LinkedIn.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.


Integrating REST APIs into Your FlutterFlow App

0

FlutterFlow is a powerful no-code/low-code platform that allows users to build fully functional mobile and web applications quickly. One of its most valuable features is the ability to integrate REST APIs, enabling dynamic content, user data operations, and interactions with external services. In this blog post, we’ll walk you through the process of integrating REST APIs into your FlutterFlow project.

Why Integrate REST APIs?

REST APIs (Representational State Transfer Application Programming Interfaces) allow your app to communicate with external servers and databases. This means you can:

  • Fetch data from a backend service
  • Send user input to a server
  • Authenticate users
  • Interact with third-party services (like payment gateways, weather APIs, etc.)

Step-by-Step Guide to REST API Integration

Step 1: Understand Your API

Before integrating an API, understand the following details:

  • Base URL: The root URL for API calls
  • Endpoints: Paths for different operations (e.g., /login, /products)
  • Request Methods: GET, POST, PUT, DELETE, etc.
  • Headers: Information sent with requests (like Content-Type, Authorization)
  • Request Body: Data sent in POST or PUT requests
  • Response Format: Typically JSON

Step 2: Add the API Call in FlutterFlow

  1. Navigate to the API Calls Section:
  • Go to your FlutterFlow project.
  • On the left menu, click API Calls.
  • Click + Add API Call

2. Fill in API Details:

  • Name: Give a meaningful name (e.g., GetUserProfile).
  • Method: Choose the appropriate method (GET, POST, etc.).
  • URL: Enter the full URL or endpoint.
  • Headers: Add any headers your API needs.
  • Body Parameters: For POST/PUT requests, add key-value pairs for the body.
  • Response & Test: Click Test API Call to verify the response and map the JSON response structure.

Step 3: Use the API in Your App

After setting up the API call:

  1. Add an Action to a Widget:
  • Select a button or page.
  • Go to Actions > Backend Call > Custom API Call.
  • Select your API call and set input parameters if needed.

2. Display API Data:

  • Use the Set from Variable option to bind response data to text, image, or list widgets.
  • Use App State or Local State if you want to store data temporarily.

Step 4: Handling API Errors

Add conditional actions for API call failures:

  • Show error messages to users
  • Retry logic
  • Redirect to login if authentication fails

Step 5: Secure Your API Usage

  • Avoid hardcoding sensitive data like API keys.
  • Use secure headers and HTTPS.
  • Use authentication tokens and refresh tokens as required.

Example: Fetching a List of Products

Let’s say you want to fetch a list of products from https://api.example.com/products.

  1. Create API Call:

2. Test and Map Response:

  • Test the call and map fields like productName, price, imageURL.

3. Display in a ListView:

  • Use a ListView widget
  • Bind each item to API response data

Conclusion

Integrating REST APIs into your FlutterFlow app expands its capabilities significantly. Whether you’re creating a social app, an e-commerce platform, or a custom business tool, using REST APIs will help you build dynamic and scalable applications. With FlutterFlow’s intuitive interface and robust API integration tools, even complex data operations become manageable without writing backend code.

From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire Flutterflow developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! For any flutter-related queries, you can connect with us on Facebook, GitHub, Twitter, and LinkedIn.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.

Flutter 3.32 – What’s New in Flutter?

0

Flutter continues its rapid evolution, and the release of Flutter 3.32 brings another significant leap forward in performance, rendering capabilities, tooling, and platform-specific improvements. Whether you’re building for mobile, web, or desktop, Flutter 3.32 enhances the development experience while bringing more polish to production-ready apps.

In this blog post, we’ll break down everything that’s new and improved in Flutter 3.32—from core engine changes to ecosystem updates—so you can get the most out of this release.

Why Flutter 3.32 Matters

Flutter 3.32 represents a refinement-focused release. While it doesn’t introduce sweeping new features, it brings key advancements that contribute to:

  • Faster runtime and smoother animations
  • More robust Material 3 component support
  • Web and desktop maturity
  • Streamlined development and debugging workflows

Desktop support is no longer experimental—it’s now robust enough for shipping fully-featured desktop apps.

Key Highlights

  • Dart 3.3 support
  • Enhanced Impeller rendering engine
  • Improved DevTools and debugging
  • Updates to Material 3 support
  • Enhanced Web and Desktop performance
  • Tooling improvements and more

✅ Dart 3.3 — Smarter and More Powerful

Flutter 3.32 ships with Dart 3.3, which includes a range of performance and productivity enhancements:

  • Faster JIT and AOT compilation: Dart 3.3 improves the speed of compilation, especially during hot reload, saving valuable development time.
  • Improved type inference: Type inference is smarter, especially in complex expressions.
  • New language features: Minor syntax enhancements, better static analysis, and more efficient memory usage in certain cases.

With Dart continuing to mature, developers can expect a smoother coding experience and better runtime performance.

🧱 Impeller Rendering Engine Updates

Flutter’s next-gen renderer, Impeller, continues to improve and is now enabled by default for iOS (and optionally for Android):

  • Smoother animations
  • Reduced jank
  • Better performance in complex UIs

The goal of Impeller is to provide a consistent and high-fidelity rendering experience across platforms, and with Flutter 3.32, it’s getting closer to production readiness on Android as well.

Material 3 – More Components and Polish

Flutter 3.32 continues its push toward full Material 3 compliance with enhancements like:

  • Improved component theming
  • Updates to NavigationBar, NavigationDrawer, and BottomAppBar
  • Better support for MaterialState behaviors (hover, focus, pressed)

These updates allow developers to create modern, Google-design-compliant interfaces with less customization effort.

Web and Desktop Improvements

Web

Flutter 3.32 brings noticeable improvements for web development:

  • Reduced JavaScript bundle sizes: Smaller output means faster loading times.
  • Improved canvasKit performance
  • Better keyboard and mouse input handling

Desktop

On Windows, macOS, and Linux:

  • Improved text rendering
  • Better high-DPI display support
  • Enhanced accessibility features

Desktop support continues to mature, making Flutter a strong contender for cross-platform desktop development.

DevTools and Debugging

Developer tooling sees a boost in this release:

  • Faster widget inspector performance
  • Improved memory and CPU profiling
  • Simplified performance overlays

You’ll also notice enhancements to error messages, stack traces, and hot reload stability, making development smoother and more efficient.

Performance and Stability

Flutter 3.32 includes a wide range of under-the-hood optimizations:

  • Reduced memory usage
  • Lower frame build times
  • Improved list view scrolling performance

These changes mean apps run faster, feel more responsive, and consume fewer resources on devices.

Package Ecosystem Updates

Many popular packages have also been updated to align with Flutter 3.32, including:

  • google_fonts
  • flutter_localizations
  • camera
  • firebase_* plugins

Make sure to check compatibility and update dependencies accordingly.

Migration and Compatibility

Flutter 3.32 is mostly backward-compatible, but it’s always a good idea to:

  • Run flutter upgrade
  • Use flutter doctor to check your environment
  • Review deprecations in the official changelog

No major breaking changes are expected for most apps, but testing is recommended.

The Road Ahead

The Flutter team continues to focus on:

  • Completing Material 3 support
  • Full rollout of Impeller on Android
  • Improving startup times
  • More seamless DevTools integration

Flutter’s momentum remains strong as it evolves into a true “write once, run anywhere” framework for modern apps.

Conclusion

Flutter 3.32 is a solid, incremental release that brings stability, performance, and tooling improvements. Whether you’re building beautiful mobile apps, interactive web experiences, or robust desktop applications, this update provides the tools you need to build better, faster, and more consistently.

From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire Flutterflow developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! For any flutter-related queries, you can connect with us on Facebook, GitHub, Twitter, and LinkedIn.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.

Flutter Code Obfuscation: Improving App Security

0

Software developers must protect their code against any harmful action once their application is released into the world. There are genuine risks of reverse engineering, manipulation, and exploitation that could seriously harm your work.

This blog will explore the Flutter Code Obfuscation: Improving App Security. We will examine how code obfuscation can help you protect your code and stop it from being abused in your Flutter applications.

If you’re looking for the best Flutter app development company for your mobile application then feel free to contact us at — support@flutterdevs.com


Table Of Contents:

What is reverse engineering?

What is code obfuscation?

Implement Code

Reading the Obfuscating stack trace

Conclusion



What is reverse engineering?

The process of disassembling hardware or software to gain a comprehensive grasp of its architecture, design, and operation is known as reverse engineering.
Reverse engineering can be applied to software to find bugs, retrieve private data, or even replicate the program itself. Software for reverse engineering makes private data accessible, which could be exploited maliciously.

What is code obfuscation?

In software development, code obfuscation is a common technique used to make source code harder to read and comprehend.
This method changes the code into a version that is comparable but much harder to understand. Code obfuscation’s primary objective is to stop or significantly hinder reverse engineering.

Implement Code:

Run the Flutter build command in release mode with the –obfuscate and –split-debug-info arguments to add code obfuscation to your Flutter application.
The directory to which Flutter should output debug files is specified by the –split-debug-info option. This command will produce a symbol mapping in the context of obfuscation. Here’s an illustration of how to make use of these choices.

flutter build apk --obfuscate --split-debug-info=/path/to/your/project/directory

Save the generated symbols file after the obfuscation procedure is finished. If you want to later de-obfuscate a stack trace, you will need this file.

Reading the Obfuscating stack trace:

Use the following procedures to make a stack trace produced by an obfuscated application human-readable in order to debug it:

  • Locate the file with the matching symbols. For instance, app.android-arm64.symbols would be required in the event of a crash from an Android arm64 device.
  • Flutter symbolizes both the symbols file and the stack trace, which is saved in a file. For instance:
flutter symbolize -i <stack trace file> -d /out/android/app.android-arm64.symbols

Run flutter symbolize -h to learn more about the symbolize command.

Conclusion:

In the article, I have explained the Flutter Code Obfuscation: Improving App Security basic structure in Flutter; you can modify this code according to your choice. This was a small introduction to the  Flutter Code Obfuscation: Improving App Security, On User Interaction from my side, and it’s working using Flutter.

I hope this blog will provide you with sufficient information on trying the Flutter Code Obfuscation: Improving App Security in your projects. It is strongly advised to obfuscate your code before launching your application. By making it considerably more difficult for malevolent actors to reverse-engineer your application bundle, this crucial step increases the security of your app. This gives your application and code an extra degree of security. So please try it.

❤ ❤ Thanks for reading this article ❤❤

If I got something wrong? Let me know in the comments. I would love to improve.

Clap 👏 If this article helps you.


From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire Flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! For any flutter-related queries, you can connect with us on FacebookGitHubTwitter, and LinkedIn.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.


Explore Design Patterns in Flutter

0

Consider creating a virtual zoo. You start by creating a simple Animal class. However, you also need to include other species, such as birds, elephants, and lions. Although you could create a different class for every animal, you find that you’re repeatedly writing the same code. This method is not only inefficient, but it also makes your code more difficult to manage and adapt.

The design patterns enter the scene at this point. Design patterns are tried-and-true solutions to typical software design problems. They offer a framework for organising your classes to make them easier to comprehend, more reusable, and maintainable.

This blog will Explore Design Patterns in Flutter. We will see how to execute a demo program in your Flutter applications.

If you’re looking for the best Flutter app development company for your mobile application then feel free to contact us at — support@flutterdevs.com


Table Of Contents:

Design Patterns in Flutter

Design Patterns: What Is Their History?

What Makes Design Patterns Important?

Design Pattern Types

Conclusion



Design Patterns in Flutter:

Design patterns can be applied to Flutter to solve common issues in app development. To make sure that a class has only one instance, for instance, use the Singleton pattern; to notify widgets of changes, use the Observer pattern; and to effectively manage the state of an application, use a variety of state management patterns.

Design Patterns: What Is Their History?

The discipline of architecture is where the idea of design patterns first emerged. In 1977, an architect named Christopher Alexander wrote a book titled A Pattern Language that suggested utilising patterns to identify effective design practices in the disciplines of urban planning and building architecture. This concept was then applied to programming approaches by software developers Ward Cunningham and Kent Beck.

With the 1994 publication of Design Patterns: Elements of Reusable Object-Oriented Software, the idea of design patterns gained traction. This book, authored by the Gang of Four (GoF)—Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides—introduced 23 design patterns and is regarded as a seminal work in the field of software engineering. Design patterns are becoming an essential component of software development. Design pattern knowledge is currently considered a crucial ability for software developers, and many more patterns have been identified and published.

What Makes Design Patterns Important?

The software developer can profit from design patterns in many ways, including:-

  1. Reusable Solutions: Design patterns offer reliable and tested solutions for typical issues in software design. They can be utilised to lessen the difficulties that developers commonly encounter in their day-to-day programming tasks and are regarded as industry best practices.
  2. Communication: Design patterns facilitate communication among developers by offering a standardised language and being tailored to the issue they address. For instance, developers may easily identify the type of solution they are discussing when they refer to a “Singleton” or “Factory” pattern.
  3. Efficiency: By providing tried-and-true solutions, design patterns can aid in accelerating development. This can enhance the readability and organisation of the code and assist avoid little errors that could cause bigger issues.
  4. Code Maintainability: Code that follows design patterns is usually easier to read and maintain since it is more structured and comprehensible. Additionally, they promote reuse and can aid in avoiding anti-patterns or code smells.
  5. Learning OO Principles: Encapsulation, inheritance, and polymorphism are just a few of the object-oriented design principles that developers may better comprehend and implement with the help of design patterns.

Design Pattern Types:

The three main categories of design patterns are structural, behavioural, and creational.

  • Object creation techniques are covered by creational patterns, which aim to build things in a situation-appropriate way.
  • The way things interact with one another, or the composition of objects, is related to structural patterns.
  • To make sure that entities are communicating correctly, behavioural patterns are employed.
CreationalStructuralBehavioral
SingletonAdapterChain of Responsibility
Factory MethodBridgeCommand
Abstract FactoryCompositeInterpreter
BuilderDecoratorIterator
PrototypeFacadeMediator
 FlyweightMemento
 ProxyObserver
  State
  Strategy
  Template Method
  Visitor

Conclusion:

In the article, I have explained the  Design System with Atomic Design basic structure in a flutter; you can modify this code according to your choice. This was a small introduction to the  Design System with Atomic Design in Flutter, On User Interaction from my side, and it’s working using Flutter.

I hope this blog will provide you with sufficient information on trying the Design System with Atomic Design in Flutter in your projects. When used with Flutter, the atomic design pattern and design systems offer a streamlined and effective method for creating modular, scalable, and testable user interfaces. The interface can be made consistent, less redundant, and easier to design, and reusable parts: atoms, molecules, creatures, templates, and pages.

We can create Flutter apps that are both technically sound and aesthetically pleasing by fusing the strength of design systems with atomic design principles. Using this method will surely improve your development workflow, making your codebase more structured, reusable, and future-proof, regardless of how big or small your project is. So please try it.

❤ ❤ Thanks for reading this article ❤❤

If I got something wrong? Let me know in the comments. I would love to improve.

Clap 👏 If this article helps you.


From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire Flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! For any flutter-related queries, you can connect with us on FacebookGitHubTwitter, and LinkedIn.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.


Multi-Item Picker Componentin FlutterFlow

0

FlutterFlow is a powerful visual app builder that allows you to create fully functional mobile and web applications without writing extensive code. While it provides many built-in components, sometimes you need a more tailored solution. In this blog, we’ll walk you through the process of creating a custom multi-item picker widget in FlutterFlow.

Why a Multi-Item Picker?

A multi-item picker is essential when users need to select more than one option from a list. Common use cases include selecting interests, tags, categories, or filtering items in e-commerce and survey apps.

FlutterFlow doesn’t have a built-in multi-select component, but with the help of custom widgets, you can easily build one that integrates seamlessly into your app.

Step 1: Set Up Your Custom Widget in FlutterFlow

To start, create a new custom widget in FlutterFlow:

  1. Go to the Custom Code section in the left panel.
  2. Under Widgets, click + Add.
  3. Name it something like MultiItemPickerComponent.
  4. Define the parameters:
  • items (List, required): The list of all items to display.
  • initialSelectedItems (List, optional): The list of items that should appear pre-selected.
  • title (String, optional): Title of the picker UI.
  • searchHintText (String, optional): Placeholder for the search input field.
  • width, height, maxHeight (optional): For layout customization.

Step 2: Writing the Widget Code

Here’s a simplified version of a FlutterFlow-compliant widget (no function callbacks):

// Automatic FlutterFlow imports
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/custom_code/widgets/index.dart'; 
import '/flutter_flow/custom_functions.dart'; 
import 'package:flutter/material.dart';
// Begin custom widget code
// DO NOT REMOVE OR MODIFY THE CODE ABOVE!

class MultiItemPickerComponent extends StatefulWidget {
  const MultiItemPickerComponent({
    Key? key,
    this.width,
    this.height,
    required this.items,
    this.initialSelectedItems,
    this.searchHintText = 'Search items...',
    this.title = 'Select Items',
    // this.buttonText = 'Done',
    this.maxHeight,
  }) : super(key: key);

  final double? width;
  final double? height;
  final double? maxHeight;
  final List<String> items;
  final List<String>? initialSelectedItems;
  final String searchHintText;
  final String title;
  // final String buttonText;

  @override
  _MultiItemPickerComponentState createState() =>
      _MultiItemPickerComponentState();
}

class _MultiItemPickerComponentState extends State<MultiItemPickerComponent> {
  final TextEditingController _searchController = TextEditingController();
  List<String> _filteredItems = [];
  List<String> _selectedItems = [];

  @override
  void initState() {
    super.initState();
    _filteredItems = widget.items;
    _selectedItems = widget.initialSelectedItems ?? [];
    _searchController.addListener(_filterItems);
  }

  @override
  void dispose() {
    _searchController.removeListener(_filterItems);
    _searchController.dispose();
    super.dispose();
  }

  void _filterItems() {
    final query = _searchController.text.toLowerCase();
    setState(() {
      _filteredItems = widget.items
          .where((item) => item.toLowerCase().contains(query))
          .toList();
    });
  }

  void _toggleItemSelection(String item) {
    setState(() {
      if (_selectedItems.contains(item)) {
        _selectedItems.remove(item);
      } else {
        _selectedItems.add(item);
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      width: widget.width ?? double.infinity,
      height: widget.height,
      constraints: BoxConstraints(
        maxHeight: widget.maxHeight ?? 400,
      ),
      decoration: BoxDecoration(
        color: Theme.of(context).cardColor,
        borderRadius: BorderRadius.circular(8),
        boxShadow: [
          BoxShadow(
            blurRadius: 4,
            color: Color(0x33000000),
            offset: Offset(0, 2),
          ),
        ],
      ),
      child: Padding(
        padding: EdgeInsets.all(16),
        child: Column(
          mainAxisSize: MainAxisSize.min,
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Text(widget.title,
                    style: Theme.of(context).textTheme.titleMedium),
                Text('${_selectedItems.length} selected',
                    style: Theme.of(context).textTheme.bodySmall),
              ],
            ),
            SizedBox(height: 12),
            TextFormField(
              controller: _searchController,
              decoration: InputDecoration(
                hintText: widget.searchHintText,
                border: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(8),
                ),
                prefixIcon: Icon(Icons.search),
                suffixIcon: _searchController.text.isNotEmpty
                    ? InkWell(
                        onTap: () {
                          _searchController.clear();
                        },
                        child: Icon(Icons.clear),
                      )
                    : null,
              ),
            ),
            SizedBox(height: 12),
            Text('Selected Items:',
                style: TextStyle(fontWeight: FontWeight.bold)),
            Wrap(
              spacing: 8,
              runSpacing: 8,
              children: _selectedItems.map((item) {
                return Chip(
                  label: Text(item),
                  onDeleted: () => _toggleItemSelection(item),
                );
              }).toList(),
            ),
            SizedBox(height: 12),
            Text('Available Items:',
                style: TextStyle(fontWeight: FontWeight.bold)),
            Expanded(
              child: ListView.builder(
                itemCount: _filteredItems.length,
                itemBuilder: (context, index) {
                  final item = _filteredItems[index];
                  final isSelected = _selectedItems.contains(item);
                  return ListTile(
                    title: Text(item),
                    trailing: Icon(
                      isSelected
                          ? Icons.check_box
                          : Icons.check_box_outline_blank,
                      color: isSelected
                          ? Theme.of(context).colorScheme.primary
                          : null,
                    ),
                    onTap: () => _toggleItemSelection(item),
                  );
                },
              ),
            ),
            SizedBox(height: 16),
          ],
        ),
      ),
    );
  }
}

Step 3: Use the Widget in Your UI

Now that your widget is added:

  1. Drag the MultiItemPickerComponent widget from the Custom Widgets tab.
  2. Pass the items list and optionally initialSelectedItems, title, or searchHintText.
  3. To retrieve selected items, bind the selected items to a local state or AppState variable using Actions in FlutterFlow.

For example:

  • On done/tap, update an AppState list variable with selected items using a custom action or logic.

Conclusion

With this custom widget, you now have a robust multi-item picker that works beautifully within the FlutterFlow environment. This approach offers flexibility, search capability, and a user-friendly interface.

This pattern — building custom widgets without callback parameters — can be reused for other advanced components. Happy building!

From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire Flutterflow developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! For any flutter-related queries, you can connect with us on Facebook, GitHub, Twitter, and LinkedIn.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.

Streamline your Flutter models with Freezed

Dart is fantastic, but let’s face it: defining a “model” might be difficult at times. Consider this:

  1. You must define properties and constructors.
  2. Override operator ==, hashCode, and toString.
  3. To clone the object, use the copyWith method.
  4. Take care of the (de)serialization.

That boilerplate code is a lot! Hundreds of lines can result from all of this, which raises the possibility of errors and makes your code more difficult to comprehend.

In this article, we will be explore Streamline your Flutter models with Freezed. We will learn how to execute a demo program. We will show you how to use freezed in Flutter with the freezed package in your Flutter applications.

For Freezed:

freezed | Dart package
Code generation for immutable classes that have a simple syntax/API without compromising on the features.pub.dev

If you’re looking for the best Flutter app development company for your mobile application then feel free to contact us at — support@flutterdevs.com.


Table Of Contents:

Introduction

Implementation

Code Implement

Conclusion



Introduction:

Freezed is a potent Dart code creation tool that:

  1. creates constructors, equality checks, toString, and other things automatically.
  2. simplifies null safety and immutability for your models.
  3. simplifies (de)serialization.

Freezed handles the rest, allowing you to concentrate on specifying the structure of your model.

Implementation:

Step 1: Add the dependencies

Include build_runner and bdd_widget_test in your pubspec.yaml file’s dev_dependencies section:

dependencies:
  freezed_annotation: latest version
  json_annotation: latest version

dev_dependencies:
  build_runner: latest version
  freezed: latest version
  json_serializable: latest version

Step 2: Run flutter packages get in the root directory of your app

flutter pub get

How to implement code in your file :

You need to implement it in your code respectively:

Converting a Post Model to Freezed

As an example, let’s look at a post model. The conventional definition is as follows:

class Post {
final int id;
final String title;
final String body;

Post({required this.id, required this.title, required this.body});

factory Post.fromJson(Map<String, dynamic> json) {
return Post(
id: json['id'],
title: json['title'],
body: json['body'],
);
}
}

Let’s use Freezed to rewrite it now. Make a new post.dart file and specify your model:

import ‘package:freezed_annotation/freezed_annotation.dart’;

part ‘post.freezed.dart’;
part ‘post.g.dart’;

@freezed
class Post with _$Post {
const factory Post({
required int id,
required String title,
required String body,
}) = _Post;

factory Post.fromJson(Map<String, dynamic> json) => _$PostFromJson(json);
}

This is what’s taking place:

  1. It instructs the package to create the boilerplate for the Post class using the annotation @freezed.
  2. The const factory is used to define the constructor.
  3. A fromJson method is created to handle serialisation.

Run the code generator:

dart run build_runner build

The following files will be produced as a result:

  • post.freezed.dart: The created constructors, equality, copyWith, and other utilities are contained.
  • post.g.dart: Serialisation logic is contained.

Using the Generated Code

You can use the Post model as follows, as Freezed has already done all the hard work for you:

Create a Post Instance:

final post = Post(id: 1, title: 'Hello World', body: 'This is the body of the post.');

Clone an Object with Modifications:

final updatedPost = post.copyWith(title: 'Updated Title');

Serialize to JSON:

final json = post.toJson();

Deserialize from JSON:

final newPost = Post.fromJson({
  'id': 2,
  'title': 'New Post',
  'body': 'This is a new post body.',
});

Conclusion:

In the article, I have explained how the Streamline your Flutter models with Freezed; you can modify this code according to your choice. This was a small introduction to Streamline your Flutter models with Freezed User Interaction from my side, and it’s working using Flutter.

I hope this blog will provide you with sufficient information on trying the Streamline your Flutter models with Freezed in your Flutter projectsWe will show you what the Introduction is. The agony of defining models in Dart is eliminated by Freezed. It takes care of the boilerplate so you can concentrate on creating amazing apps rather than being distracted by repeating code. So please try it.

❤ ❤ Thanks for reading this article ❤❤

If I need to correct something? Let me know in the comments. I would love to improve.

Clap 👏 If this article helps you.


From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire Flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! For any flutter-related queries, you can connect with us on FacebookGitHubTwitter, and LinkedIn.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.