Google search engine
Home Blog Page 46

Image Compress & Crop In Flutter

0

Working with the camera/gallery and involving it in various applications is very typical in applications yet while carrying out it you might deal with different issues -, for example, assuming you are working in an application that is fundamentally an e-commerce application where we really want to oversee various things we want to choose various things and furthermore post our reactions with pictures around then we should have to compose a single codebase from where we can oversee camera at various areas all through the application.

In this article, we will explore the Image Compress & Crop In Flutter. We will see how to implement a demo program. Learn how to image compress and crop using a camera & gallery in your flutter applications.

For Image Compress:

flutter_native_image | Flutter Package
Run this command: With Flutter: $ flutter pub add flutter_native_image This will add a line like this to your package’s…pub.dev

For Image Crop:

image_cropper | Flutter Package
A Flutter plugin for Android, iOS, and Web supports cropping images. This plugin is based on three different native… pubs.dev

For Image Picker:

image_picker | Flutter Package
A Flutter plugin for iOS and Android for picking images from the image library, and taking new pictures with the…pub.dev

Table Of Contents::

Introduction

Implementation

Code Implement

Code File

Conclusion

GitHub Link



Introduction:

The below demo video shows how to implement an image compress & crop in flutter and shows how image compress & crop will work using the camera and gallery in your flutter applications. We will show a user when clicking on the upload button and then, show a popup with a camera and gallery fields. When the user chooses any one option then the image will be compressed and then crop and It will be shown on your device.

Demo Module ::

Demo

Implementation:

Step 1: Add the dependencies

Add dependencies to pubspec — yaml file.

dependencies:
flutter:
sdk: flutter
image_picker: ^0.8.5
image_cropper: ^1.5.1
flutter_native_image: ^0.0.6+1

Step 2: Import

import 'package:image_picker/image_picker.dart';
import 'package:flutter_native_image/flutter_native_image.dart';
import 'package:image_cropper/image_cropper.dart'

Step 3: Add a few things to the AndriodManifest.xml file.

<activity
android:name="com.yalantis.ucrop.UCropActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>

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

How to implement code in dart file :

You need to implement it in your code respectively:

Create a new dart file called app_helper.dart inside the lib folder.

We will create an AppHelper() class. In this class, we will create the static cropImage name file and add all data for the crop images. Yow will use it anywhere in our project.

static Future<File?> cropImage(File? imageFile) async {
var _croppedFile = await ImageCropper().cropImage(
sourcePath: imageFile!.path,
aspectRatioPresets: Platform.isAndroid
? [
CropAspectRatioPreset.square,
CropAspectRatioPreset.ratio3x2,
CropAspectRatioPreset.original,
CropAspectRatioPreset.ratio4x3,
CropAspectRatioPreset.ratio16x9
]
: [
CropAspectRatioPreset.original,
CropAspectRatioPreset.square,
CropAspectRatioPreset.ratio3x2,
CropAspectRatioPreset.ratio4x3,
CropAspectRatioPreset.ratio5x3,
CropAspectRatioPreset.ratio5x4,
CropAspectRatioPreset.ratio7x5,
CropAspectRatioPreset.ratio16x9
],
androidUiSettings: const AndroidUiSettings(
toolbarColor: Color(0xFF2564AF),
toolbarWidgetColor: Colors.white,
initAspectRatio: CropAspectRatioPreset.original,
lockAspectRatio: false),
);

return _croppedFile;
}

Also, we will create a static compress name file, and inside we will add a file image, quality, and percentage of an image. Yow will use it anywhere in our project.

static Future<File> compress({
required File image,
int quality = 100,
int percentage = 30,
}) async {
var path = await FlutterNativeImage.compressImage(image.absolute.path,
quality: quality, percentage: percentage);
return path;
}
}

Create a new dart file called home_page.dart inside the lib folder.

First, we will create a final _picker that is equal to the ImagePicker(). Also, creating a File instance was fileImage.

final _picker = ImagePicker();
File? fileImage;

In the body, we will add the column. In this column widget, we will add a Container with height and width. Inside the Container, we will add a Column widget. In this widget, we will add images and text. When the user run code then shows this screen before adding any image.

Container(
height: 350,
width: 350,
alignment: Alignment.center,
decoration: BoxDecoration(
border: Border.all(color: Colors.black12, width: 1),
borderRadius: const BorderRadius.all(Radius.circular(10)),
color: Colors.grey[300],
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
"assets/logo.png",
width: 150,
),
const SizedBox(
height: 20,
),
const Text(
"Image will be shown here",
style: TextStyle(
color: Colors.black,
fontWeight: FontWeight.w700,
fontSize: 20),
),
],
),
),

Also, create a ElevatedButton(). On this button, we will add the onPressed method. In this method, we will add _openChangeImageBottomSheet() function. This function we will describe later below. Also, add the text ‘Upload Image’.

ElevatedButton(
onPressed: () {
_openChangeImageBottomSheet();
},
child: const Text('Upload Image')),

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Output

We will add create a container with height and width, alignment was center. Add the box decoration with border color, border-radius , color and DecorationImage(). Inside DecorationImage, we will add an image: FileImage(fileImage!). When a user uploads an image using compresses and crops an image from the camera and gallery.

Container(
height: 350,
width: 300,
alignment: Alignment.center,
decoration: BoxDecoration(
border: Border.all(color: Colors.black12, width: 1),
borderRadius: const BorderRadius.all(Radius.circular(10)),
color: Colors.grey,
image: DecorationImage(
image: FileImage(fileImage!),
fit: BoxFit.cover,
)),
)

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Output

Now, we will describe _openChangeImageBottomSheet() function:

We will create a showCupertinoModalPopup(). In this popup, we will return CupertinoActionSheet(). In this sheet, we will add the actions widget. In actions widget, we will add three _buildCupertinoActionSheetAction(). Inside we will add icons, titles, and the voidCallback function. In this function, we will add Navigator.pop(context) and _getImageFrom(source: ImageSource.gallery/camera). We will define the below later.

_openChangeImageBottomSheet() {
return showCupertinoModalPopup(
context: context,
barrierDismissible: false,
builder: (context) {
return CupertinoActionSheet(
title: Text(
'Change Image',
textAlign: TextAlign.center,
style: AppTextStyles.regular(fontSize: 19),
),
actions: <Widget>[
_buildCupertinoActionSheetAction(
icon: Icons.camera_alt,
title: 'Take Photo',
voidCallback: () {
Navigator.pop(context);
_getImageFrom(source: ImageSource.camera);
},
),
_buildCupertinoActionSheetAction(
icon: Icons.image,
title: 'Gallery',
voidCallback: () {
Navigator.pop(context);
_getImageFrom(source: ImageSource.gallery);
},
),
_buildCupertinoActionSheetAction(
title: 'Cancel',
color: Colors.red,
voidCallback: () {
Navigator.pop(context);
},
),
],
);
});
}

We will define _buildCupertinoActionSheetAction() function.

In this function, we will add IconData, title, and voidCallback. We will return a CupertinoActionSheetAction(). In this sheet, we will add a Row widget. In this widget, we will add an icon, title, and onPressed.

_buildCupertinoActionSheetAction({
IconData? icon,
required String title,
required VoidCallback voidCallback,
Color? color,
}) {
return CupertinoActionSheetAction(
child: Row(
children: [
if (icon != null)
Icon(
icon,
color: color ?? const Color(0xFF2564AF),
),
Expanded(
child: Text(
title,
textAlign: TextAlign.center,
style: AppTextStyles.regular(
fontSize: 17,
color: color ?? const Color(0xFF2564AF),
),
),
),
if (icon != null)
const SizedBox(
width: 25,
),
],
),
onPressed: voidCallback,
);
}

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Output

Now, we will describe _getImageFrom({required ImageSource source}) function:

This is the main function, when the user clicks on the popup button and then pressed the camera /gallery button, then first shows pic the original size of the image and then shows after compressed image size.

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Output

When we run the application, we ought to get the console output like the underneath.

I/flutter ( 8840): Before Compress 4750.7578125 kb
I/flutter ( 8840): After Compress 1095.669921875 kb

Now, after compressing the image, then the image will be moved to the crop part. The user will crop the image and the set to the fileImage is equal to the _croppedImage. The user will crop on any ratio and also, rotate the image.

_getImageFrom({required ImageSource source}) async {
final _pickedImage = await _picker.pickImage(source: source);
if (_pickedImage != null) {
var image = File(_pickedImage.path.toString());
final _sizeInKbBefore = image.lengthSync() / 1024;
print('Before Compress $_sizeInKbBefore kb');
var _compressedImage = await AppHelper.compress(image: image);
final _sizeInKbAfter = _compressedImage.lengthSync() / 1024;
print('After Compress $_sizeInKbAfter kb');
var _croppedImage = await AppHelper.cropImage(_compressedImage);
if (_croppedImage == null) {
return;
}
setState(() {
fileImage = _croppedImage;
});
}
}

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Output

Code File:

import 'dart:io';

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_image_compress_crop/app_helper.dart';
import 'package:flutter_image_compress_crop/app_text_style.dart';
import 'package:image_picker/image_picker.dart';

class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);

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

class _HomePageState extends State<HomePage> {
final _picker = ImagePicker();
File? fileImage;

_getImageFrom({required ImageSource source}) async {
final _pickedImage = await _picker.pickImage(source: source);
if (_pickedImage != null) {
var image = File(_pickedImage.path.toString());
final _sizeInKbBefore = image.lengthSync() / 1024;
print('Before Compress $_sizeInKbBefore kb');
var _compressedImage = await AppHelper.compress(image: image);
final _sizeInKbAfter = _compressedImage.lengthSync() / 1024;
print('After Compress $_sizeInKbAfter kb');
var _croppedImage = await AppHelper.cropImage(_compressedImage);
if (_croppedImage == null) {
return;
}
setState(() {
fileImage = _croppedImage;
});
}
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Flutter Image Crop & Compress Demo "),
centerTitle: true,
automaticallyImplyLeading: false,
backgroundColor: Colors.teal,
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
if (fileImage != null)
Container(
height: 350,
width: 300,
alignment: Alignment.center,
decoration: BoxDecoration(
border: Border.all(color: Colors.black12, width: 1),
borderRadius: const BorderRadius.all(Radius.circular(10)),
color: Colors.grey,
image: DecorationImage(
image: FileImage(fileImage!),
fit: BoxFit.cover,
)),
)
else
Container(
height: 350,
width: 350,
alignment: Alignment.center,
decoration: BoxDecoration(
border: Border.all(color: Colors.black12, width: 1),
borderRadius: const BorderRadius.all(Radius.circular(10)),
color: Colors.grey[300],
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
"assets/logo.png",
width: 150,
),
const SizedBox(
height: 20,
),
const Text(
"Image will be shown here",
style: TextStyle(
color: Colors.black,
fontWeight: FontWeight.w700,
fontSize: 20),
),
],
),
),
const SizedBox(
height: 50,
),
Center(
child: ElevatedButton(
onPressed: () {
_openChangeImageBottomSheet();
},
child: const Text('Upload Image')),
),
],
),
);
}

_openChangeImageBottomSheet() {
return showCupertinoModalPopup(
context: context,
barrierDismissible: false,
builder: (context) {
return CupertinoActionSheet(
title: Text(
'Change Image',
textAlign: TextAlign.center,
style: AppTextStyles.regular(fontSize: 19),
),
actions: <Widget>[
_buildCupertinoActionSheetAction(
icon: Icons.camera_alt,
title: 'Take Photo',
voidCallback: () {
Navigator.pop(context);
_getImageFrom(source: ImageSource.camera);
},
),
_buildCupertinoActionSheetAction(
icon: Icons.image,
title: 'Gallery',
voidCallback: () {
Navigator.pop(context);
_getImageFrom(source: ImageSource.gallery);
},
),
_buildCupertinoActionSheetAction(
title: 'Cancel',
color: Colors.red,
voidCallback: () {
Navigator.pop(context);
},
),
],
);
});
}

_buildCupertinoActionSheetAction({
IconData? icon,
required String title,
required VoidCallback voidCallback,
Color? color,
}) {
return CupertinoActionSheetAction(
child: Row(
children: [
if (icon != null)
Icon(
icon,
color: color ?? const Color(0xFF2564AF),
),
Expanded(
child: Text(
title,
textAlign: TextAlign.center,
style: AppTextStyles.regular(
fontSize: 17,
color: color ?? const Color(0xFF2564AF),
),
),
),
if (icon != null)
const SizedBox(
width: 25,
),
],
),
onPressed: voidCallback,
);
}
}

Conclusion:

In the article, I have explained the basic structure of image compress & crop in a flutter; you can modify this code according to your choice. This was a small introduction to Image Compress & Crop On User Interaction from my side, and it’s working using Flutter.

I hope this blog will provide you with sufficient information on Trying up the Image Compress & Crop in your flutter projects. We will show you what an Introduction is?. Show the implementations, and how to use Image Compress & Crop from the camera and gallery. Make a demo program for working in your flutter applications. 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.


GitHub Link:

find the source code of the Flutter Image Compress Crop Demo:

GitHub – flutter-devs/flutter_image_compress_crop_demo
A new Flutter project. This project is a starting point for a Flutter application. A few resources to get you started…github.com


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 a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on FacebookGitHubTwitter, and LinkedIn for any flutter-related queries.

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.


Related: Octo Image In Flutter

Related: Exploring BlurHash Image Placeholder In Flutter

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.

GetX State Management In Flutter

0

Flutter is without a doubt the best framework for developing cross-platform applications. Application improvement with Flutter is genuinely magnificent and simple since it gives a rich arrangement of adaptable widgets. Notwithstanding, some state the management choices will not permit you to feel the genuine force of the Flutter framework since you need to burn through your development time implementing a superfluous boilerplate.

State management is an intricate topic of conversation in Flutter. Be that as it may, many state management libraries, like Provider, are accessible, which most developers suggest. At the point when we begin building any application in a flutter, we should conclude which state management we want to utilize. It would be simpler for you to pursue this choice with this blog.

In this article, we will explore the GetX State Management In Flutter. We will see how to implement a demo program. I would like to explain GetX, a powerful flutter framework, and learn how to use the get package in your flutter applications.

get | Flutter Package
GetX is an extra-light and powerful solution for Flutter. It combines high-performance state management, and intelligent…pub.dev

Table Of Contents::

What is GetX?

Principles

Three Pillars Of GetX

Why GetX?

Implementation

Code Implement

Code File

Conclusion



What is GetX?:

GetX is a quick, stable, and light state management library in a flutter. There are so many State Management libraries in flutter like MobX, BLoC, Redux, Provider, and so forth.

GetX is additionally a strong miniature framework and utilizing this, we can oversee states, make routing, and can perform dependency injection.
State management permits you information transfer inside the application. What’s more, at whatever point information is passed, the application’s state is updated, thusly rebuilding the system.

Along these lines, developers must be especially cautious about managing the state of an application since state updation may at times appear to be exorbitant for a complex application.

Demo Module ::

Demo

This demo video shows how to implement a GetX State Management in a flutter and shows how GetX State Management will work using the get package in your flutter applications. We will show a routing example using GetX. It will be shown on your device.

Principles:

There are three principles of GetX:

  • > Performance: When contrasted with other state management libraries, GetX is best since it consumes the least assets and gives better execution. It doesn’t utilize ChangeNotifier or Streams. Take a gander at the beneath RAM graph portraying different state managers.
  • > Productivity: GetX’s syntax is simple so it is useful. It saves a ton of time for the developers and speeds up the application since it doesn’t utilize additional assets. It utilizes just those assets which are right now required and after its work is done, the assets will be free naturally. If every one of the assets is stacked into the memory, it won’t be simply useful. So better to involve GetX in this.
  • > Organization: GetX code is coordinated as View, Logic, route, and dependency injection. So we needn’t bother with any additional context to navigate different screens. We can navigate to the screen without utilizing the unique circumstance so we are not dependent on the widget tree.

Three Pillars Of GetX:

  • > State Management: There are two types of state management:-

Simple State Manager: It uses the GetBuilder function.

Reactive State Manager: It uses GetX and Obx.

  • > Route Management: To make Widgets like Snackbar, Bottomsheets, dialogs, and so forth. Then, at that point, we can involve GetX in it because GetX can assemble these widgets without utilizing context.
  • > Dependency Management: GetX has a straightforward yet strong answer for dependency management utilizing controllers. To bring data from different Classes then with the assistance of GetX, we can do this in a solitary line of code. Eg: Get.put()

Why GetX?:

GetX is a very lightweight and powerful state management solution for flutter.

  • > High performance: GetX utilizes as less assets as could be expected. It doesn’t rely upon Streams or ChangeNotifier. All things being equal, it utilizes low inertness GetValue and GetStream to further develop execution.
  • > Less code: You might be tired of implementing boilerplate in the bloc pattern and wasting development energy on superfluous codes. Time is money, isn’t that so? In GetX, you won’t compose any boilerplate. You can accomplish the same thing a lot quicker, with less code in GetX. Don’t bother making classes for the state and event, since these boilerplates don’t exist in GetX.
  • > No code generation: There is a compelling reason need to utilize code generators by any means. So your significant development time won’t squander more on running code generators(build_runner) whenever you change your code.
  • > Don’t worry about context: Your application context is important. Yet, sending the context from your view to the controller can be, here and there lumbering. In GetX, you don’t have to do this. You can get to controllers inside one more controller with no unique context.
  • > No unnecessary rebuilds: Undesirable modifies are an issue of state managers based on ChangeNotifier. Whenever you roll out an improvement in your ChangeNotifier class, all widgets that rely upon that ChangeNotifier class are rebuilt. Some rebuilds might be superfluous and expensive. It might diminish the application’s performance too. You don’t need to stress over this in GetX since it doesn’t utilize the ChangeNotifier by any means.
  • > Code organization is simple: Bloc’s popularity comes from its prevalent code sorting-out capacities. It makes it more straightforward to isolate your business rationale from the show layer. GetX is a characteristic development for this as true documentation says. In GetX, you can isolate the business rationale as well as the show layer.

Implementation:

Step 1: Add the dependencies

Add dependencies to pubspec — yaml file.

dependencies:
flutter:
sdk: flutter
get: ^4.6.1

Step 2: Import

import 'package:get/get.dart';

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

How to implement code in dart file :

You need to implement it in your code respectively:

Create a new dart file called main.dart inside the lib folder.

In the main. dart file, we will return GetMaterialApp(). Also, we will add a theme for color, and a home for showing starting screen.

import 'package:flutter/material.dart';
import 'package:flutter_getx_statemanagement/splash_screen.dart';
import 'package:get/get.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
return GetMaterialApp(
title: 'Flutter GetX State Management Demo',
theme: ThemeData(
primarySwatch: Colors.red,
),
home: const Splash(),
debugShowCheckedModeBanner: false,
);
}
}

Create a new dart file called home_page_controller.dart inside the lib folder.

We will create a class called MyHomePageController inside it and extend the GetxController class. We will add the final count is equal to 0. obs. In GetX, to make a variable observable — this means that when it changes, other parts of our application depending on it will be notified. To do this we simply need to add .obs to the variable initialization. So for our above count variable, we will add .obs to 0.

To wrap things up with the MyHomePageController we will implement the increment method.

import 'package:get/get.dart';

class HomePageController extends GetxController {
final count = 0.obs;
increment() => count.value++;
}

Create a new dart file called home_page.dart inside the lib folder.

First, we will create inside the HomePage class, we will instantiate the HomePageController.

final HomePageController controller = Get.put(HomePageController());

For our count, we want the Text widget to be updated with the current count. So we will wrap the Text widget with Obx widget.

Obx(
() => Text(
'${controller.count.value}',
style: Theme.of(context).textTheme.headline4,
),
),

We will add floatingActionButton, we will call the increment method when the floatingActionButton is pressed.

floatingActionButton: FloatingActionButton(
onPressed: controller.increment,
tooltip: 'Increment',
backgroundColor: Colors.cyan,
child: const Icon(Icons.add),
),

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Increment Output

> Snackbar:

On the home page, we will also create a show snackbar button using Getx in a flutter. In this button, onPressed method we will add inside Get. snackbar(). Also, we will add snackPosition and backgroundColor. In the child method, we will add the text ‘Show Snackbar’.

ElevatedButton(
style: ElevatedButton.styleFrom(
textStyle: const TextStyle(fontSize: 18),
primary: Colors.teal,
),
onPressed: () {
Get.snackbar('GetX Snackbar', 'Yay! Awesome GetX Snackbar',
snackPosition: SnackPosition.BOTTOM,
backgroundColor: Colors.tealAccent);
},
child: const Text('Show Snackbar')),

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Snackbar Output

> Dialog:

On the home page, we will also create a show alertDialog button using Getx in a flutter. In this button, onPressed method we will add inside Get. defaultDialog(). Also, we will add the title, middle text, textConfirm, confirmTextColor, and textCancel. In the child method, we will add the text ‘Show AlertDialog’.

ElevatedButton(
style: ElevatedButton.styleFrom(
textStyle: const TextStyle(fontSize: 18),
primary: Colors.teal,
),
onPressed: () {
Get.defaultDialog(
title: 'GetX Alert',
middleText: 'Simple GetX alert',
textConfirm: 'Okay',
confirmTextColor: Colors.white,
textCancel: 'Cancel');
},
child: const Text('Show AlertDialog')),

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Dialog Output

> Navigation In GetX:

On the home page, we will create a button ‘Go to next screen’ text and icon. On this button, onPressed method. We will add Get.to(() => const SecondPage()) for navigating screen without using context.

Padding(
padding: const EdgeInsets.all(12.0),
child: ElevatedButton(
style: ElevatedButton.styleFrom(
textStyle: const TextStyle(fontSize: 20),
minimumSize: const Size.fromHeight(40),
primary: Colors.teal,
),
child: Row(
children: const [
Spacer(),
Text("Go to next screen"),
SizedBox(
width: 20,
),
Expanded(
child: Icon(
Icons.arrow_right_alt,
size: 40,
))
],
),
onPressed: () {
Get.to(() => const SecondPage());
}),
),

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Output

Create a new dart file called second_page.dart inside the lib folder.

We will create a new SecondPage class. In this class, we will add a text and an ElevatedButton and wrap into it a Column widget.

import 'package:flutter/material.dart';
import 'package:get/get.dart';

class SecondPage extends StatefulWidget {
const SecondPage({Key? key}) : super(key: key);

@override
State<SecondPage> createState() => _SecondPageState();
}

class _SecondPageState extends State<SecondPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Second Page"),
centerTitle: true,
backgroundColor: Colors.teal,
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Padding(
padding: EdgeInsets.all(12.0),
child: Text(
"The Flutter app developers at FlutterDevs have decades of industry experience under a single roof,"
" and this empowers us to serve you with excellence.",
style: TextStyle(fontSize: 17.0, fontWeight: FontWeight.w600),
),
),
SizedBox(
height: MediaQuery.of(context).size.height * 0.02,
),
Padding(
padding: const EdgeInsets.all(12.0),
child: ElevatedButton(
style: ElevatedButton.styleFrom(
textStyle: const TextStyle(fontSize: 20),
minimumSize: const Size.fromHeight(40),
primary: Colors.teal,
),
child: Row(
children: const [
Expanded(
flex: 1,
child: Icon(
Icons.arrow_back,
size: 30,
),
),
SizedBox(
width: 20,
),
Expanded(flex: 3, child: Text("Go to Home screen")),
],
),
onPressed: () {
Get.back();
}),
),
],
),
),
);
}
}

When the user presses the ‘Go to home screen’ button then, the user back to the home screen. On this onPressed method, we will add Get. back() for navigation without using context.

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Second Page

When we run the application, we ought to get the console final output like the underneath.

Launching lib/main.dart on ONEPLUS A5010 in debug mode...
Running Gradle task 'assembleDebug'...
✓ Built build/app/outputs/flutter-apk/app-debug.apk.
Installing build/app/outputs/flutter-apk/app.apk...
Debug service listening on ws://127.0.0.1:38103/2vooOVfhIIY=/ws
Syncing files to device ONEPLUS A5010...
[GETX] Instance "GetMaterialController" has been created
[GETX] Instance "GetMaterialController" has been initialized
[GETX] GOING TO ROUTE /HomePage
[GETX] Instance "HomePageController" has been created
[GETX] Instance "HomePageController" has been initialized
[GETX] OPEN DIALOG 849896188
[GETX] CLOSE DIALOG 849896188
[GETX] GOING TO ROUTE /SecondPage
[GETX] CLOSE TO ROUTE /SecondPage
[GETX] GOING TO ROUTE /SecondPage
[GETX] CLOSE TO ROUTE /SecondPage

Code File:

import 'package:flutter/material.dart';
import 'package:flutter_getx_statemanagement/view_screens/second_page.dart';
import 'package:get/get.dart';
import '../controllers/home_page_controller.dart';

class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);

@override
State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
final HomePageController controller = Get.put(HomePageController());

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Flutter GetX State Management Demo"),
centerTitle: true,
automaticallyImplyLeading: false,
backgroundColor: Colors.teal,
),
floatingActionButton: FloatingActionButton(
onPressed: controller.increment,
tooltip: 'Increment',
backgroundColor: Colors.cyan,
child: const Icon(Icons.add),
),
body: Center(
child: Column(
children: [
const SizedBox(
height: 30,
),
Image.asset(
"assets/logo.png",
width: 300,
),
const SizedBox(
height: 50,
),
const Text(
'You have pushed the button this many times:',
),
Obx(
() => Text(
'${controller.count.value}',
style: Theme.of(context).textTheme.headline4,
),
),
const SizedBox(
height: 20,
),
ElevatedButton(
style: ElevatedButton.styleFrom(
textStyle: const TextStyle(fontSize: 18),
primary: Colors.teal,
),
onPressed: () {
Get.snackbar('GetX Snackbar', 'Yay! Awesome GetX Snackbar',
snackPosition: SnackPosition.BOTTOM,
backgroundColor: Colors.tealAccent);
},
child: const Text('Show Snackbar')),
const SizedBox(
height: 10,
),
ElevatedButton(
style: ElevatedButton.styleFrom(
textStyle: const TextStyle(fontSize: 18),
primary: Colors.teal,
),
onPressed: () {
Get.defaultDialog(
title: 'GetX Alert',
middleText: 'Simple GetX alert',
textConfirm: 'Okay',
confirmTextColor: Colors.white,
textCancel: 'Cancel');
},
child: const Text('Show AlertDialog')),
Padding(
padding: const EdgeInsets.all(12.0),
child: ElevatedButton(
style: ElevatedButton.styleFrom(
textStyle: const TextStyle(fontSize: 20),
minimumSize: const Size.fromHeight(40),
primary: Colors.teal,
),
child: Row(
children: const [
Spacer(),
Text("Go to next screen"),
SizedBox(
width: 20,
),
Expanded(
child: Icon(
Icons.arrow_right_alt,
size: 40,
))
],
),
onPressed: () {
Get.to(() => const SecondPage());
}),
),
],
),
),
);
}
}

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Home Page

Conclusion:

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

I hope this blog will provide you with sufficient information on Trying up the GetX State Management in your flutter projects. We will show you what GetX is?. Show the principles, and why GetX, etc of GetX State Management. Make a demo program for working with GetX. 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.


GitHub Link:

find the source code of the Flutter GetX State Management Demo:

GitHub – flutter-devs/flutter_getx_state_management_demo
A new Flutter project. This project is a starting point for a Flutter application. A few resources to get you started…github.com
.


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 a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on FacebookGitHubTwitter, and LinkedIn for any flutter-related queries.

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.

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.


How to use GetX Dialogs in Flutter 2026

0

Dialogs are fundamental parts of mobile Apps. They help to pass cautions and significant messages as well as on to do specific activities. At the point when flutter developers make a dialog in Flutter, it utilizes context and builder to make a Dialog. However, this training isn’t appropriate for a developer to foster Dialogs utilizing contexts and builders.

In this article, we will explore the Dialog Using GetX in Flutter. We will also implement a demo program and learn how to create Dialog using the get package in your flutter applications.

get | Flutter Package
GetX is an extra-light and powerful solution for Flutter. It combines high-performance state management, intelligence…pub.dev

Table Of Contents::

Introduction

Constructor

Properties

Implementation

Code Implement

Code File

Conclusion



Introduction:

At the point when we need to show anything like the form then we can make this Dialog involving the GetX library in Flutter. We can make Dialog utilizing GetX with basic code and extremely simple to make a dialog. It doesn’t utilize context and builder to make Dialog.

GetX is additional light and strong solution for Flutter. It joins elite performance state management, intelligent dependency injection, and route management rapidly and essentially.

Demo Module ::

This demo video shows how to create a dialog in a flutter and shows how dialog will work using the get package in your flutter applications, and also using different properties. It will be shown on your device.

Constructor:

To utilize Get.defaultDialog(), you need to call the constructor underneath:

Future<T?> defaultDialog<T>({
String title = "Alert",
EdgeInsetsGeometry? titlePadding,
TextStyle? titleStyle,
Widget? content,
EdgeInsetsGeometry? contentPadding,
VoidCallback? onConfirm,
VoidCallback? onCancel,
VoidCallback? onCustom,
Color? cancelTextColor,
Color? confirmTextColor,
String? textConfirm,
String? textCancel,
String? textCustom,
Widget? confirm,
Widget? cancel,
Widget? custom,
Color? backgroundColor,
bool barrierDismissible = true,
Color? buttonColor,
String middleText = "Dialog made in 3 lines of code",
TextStyle? middleTextStyle,
double radius = 20.0,
List<Widget>? actions,
WillPopCallback? onWillPop,
GlobalKey<NavigatorState>? navigatorKey,
})

Properties:

There are some properties of Get.defaultDialog() are:

  • > title: In this property is used to the title of the Dialog. By default, the title is “Alert”.
  • > titleStyle: In this property is used to the style given to the title text using TextStyle.
  • > content: In this property is used to the content given to the Dialog and should use Widget to give content.
  • > middleText: In this property is used in the middle text given to the Dialog. If we utilize content also then content widget data will be sown.
  • > barrierDismissible: In this property is used if we want to close the Dialog by clicking outside the dialog then its value should be true else false. By default, its value is true.
  • > middleTextStyle: In this property is used to the style given to the middle text using TextStyle.
  • > radius: In this property is utilized to the radius of the Dialog provided. By default, its value is 20.
  • > backgroundColor: In this property is used as the background color of the Dialog.

Implementation:

Step 1: Add the dependencies

Add dependencies to pubspec — yaml file.

dependencies:
flutter:
sdk: flutter
get: ^4.6.1

Step 2: Import

import 'package:get/get.dart';

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

How to implement code in dart file :

You need to implement it in your code respectively:

Create a new dart file called main.dart inside the lib folder.

We have utilized GetMaterialApp rather than MaterialApp because we are building our application utilizing the GetX library. If we don’t utilize GetMaterialApp then, at that point, its functionalities won’t work.

return GetMaterialApp(
title: 'Dialog Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Splash(),
debugShowCheckedModeBanner: false,
);

We will create a Home class in the main.dart file

In the body, we will add a Center widget. In this widget, we will add a Column widget that was mainAxisAlignment was center. We will add things, first, we will add an image, and second, we will add an ElevatedButton with child and style properties. In the onPressed function, we will add Get.defaultDialog(). We will deeply describe it below.

Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset("assets/logo.png", scale: 14,),
SizedBox(height: 80,),
ElevatedButton(
child: Text('Show Dialog'),
style: ElevatedButton.styleFrom(
primary: Colors.teal,
onPrimary: Colors.white,
shadowColor: Colors.tealAccent,
textStyle: TextStyle(
fontSize: 18,
),
elevation: 5,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0)),
minimumSize: Size(120, 50),
),
onPressed: () {
Get.defaultDialog();

},
),
],
)),

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Home Screen

Now, we will deeply describe Get.defaultDialog():

Now you saw how easy it is to get a dialog with very few lines using GetX in Flutter. You can also customize it with different options given by GetX. We will add title, middle text, backgroundColor, titleStyle, middleTextStyle and radius.

Get.defaultDialog(
title: "Welcome to Flutter Dev'S",
middleText: "FlutterDevs is a protruding flutter app development company with "
"an extensive in-house team of 30+ seasoned professionals who know "
"exactly what you need to strengthen your business across various dimensions",
backgroundColor: Colors.teal,
titleStyle: TextStyle(color: Colors.white),
middleTextStyle: TextStyle(color: Colors.white),
radius: 30
);

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Final Output

Code File:

import 'package:flutter/material.dart';
import 'package:flutter_dialog_getx_demo/splash_screen.dart';
import 'package:get/get.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return GetMaterialApp(
title: 'Dialog Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Splash(),
debugShowCheckedModeBanner: false,
);
}
}

class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false,
title: Text('Dialog Using GetX In Flutter'),
centerTitle: true,
backgroundColor: Colors.cyan,
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset("assets/logo.png", scale: 14,),
SizedBox(height: 80,),
ElevatedButton(
child: Text('Show Dialog'),
style: ElevatedButton.styleFrom(
primary: Colors.teal,
onPrimary: Colors.white,
shadowColor: Colors.tealAccent,
textStyle: TextStyle(
fontSize: 18,
),
elevation: 5,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0)),
minimumSize: Size(120, 50),
),
onPressed: () {
Get.defaultDialog(
title: "Welcome to Flutter Dev'S",
middleText: "FlutterDevs is a protruding flutter app development company with "
"an extensive in-house team of 30+ seasoned professionals who know "
"exactly what you need to strengthen your business across various dimensions",
backgroundColor: Colors.teal,
titleStyle: TextStyle(color: Colors.white),
middleTextStyle: TextStyle(color: Colors.white),
radius: 30
);
},
),
],
)),
);
}
}

Conclusion:

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

I hope this blog will provide you with sufficient information on Trying up the Dialog Using GetX in your flutter projects. We will show you what the Introduction is?. Make a demo program for working Dialog Using GetX plugins. In this blog, we have examined the Dialog Using GetX of the flutter app. I hope this blog will help you in the comprehension of the Dialog in a better way. 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 a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on FacebookGitHubTwitter, and LinkedIn for any flutter-related queries.

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.

Related: Pagination using GetX in Flutter

Related: Rest API Using GetX

Related: GetX State Management In Flutter


Frequently Asked Questions

How can I create a dialog box in Flutter using the GetX state management library?

You can create a dialog box in Flutter by using Get.dialog() function from the GetX package.

What are the benefits of using GetX for creating dialogs in Flutter instead of other state management solutions?

GetX simplifies the creation and handling of dialogs, making it easier to manage complex UI states.

Can I customize the appearance of dialogs created using GetX in Flutter?

Yes, you can customize the appearance of your dialogs by passing a custom widget to the Get.dialog() function.

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.

ExpansionPanelList In Flutter

0

In this article, we will explore the ExpansionPanelList In Flutter. We will implement an expansion panel list demo program and learn how to customize its style with different properties in your flutter applications.

Table Of Contents::

Expansion Panel List

Constructor

Properties

Code Implement

Code File

Conclusion



Expansion Panel List:

It is a material widget in flutter which is like listView. It can just have Expansion panels as children. In certain cases, we may need to show a list where the children can expand/collapse to show/hide some detailed data. To show such a list flutter gives a widget called ExapansionPanelList.

In this list, every child is an ExpansionPanel widget. We can’t utilize different widgets as children for this list. We can deal with the adjustment of state( Expansion or collapse ) of a thing with the assistance of ExpansionCallback property.

Demo Module :

This demo video shows how to create an expansion panel List in a flutter. It shows how the expansion panel List will work in your flutter applications. It shows a list where the children can expand/collapse to show/hide some detailed information. It will be shown on your device.

Constructor:

To utilize ExpansionPanelList, you need to call the constructor underneath:

const ExpansionPanelList({
Key? key,
this.children = const <ExpansionPanel>[],
this.expansionCallback,
this.animationDuration = kThemeAnimationDuration,
this.expandedHeaderPadding = _kPanelHeaderExpandedDefaultPadding,
this.dividerColor,
this.elevation = 2,
})

Properties:

There are some properties of ExpansionPanelList are:

  • > children: This property is used by the children of the expansion panel List. They are laid out similarly to [ListBody].
  • > expansionCallback: This property is used to the callback that gets called whenever one of the expand/collapse buttons is pressed. The arguments passed to the callback are the index of the pressed panel and whether the panel is currently expanded or not.
  • > animationDuration: This property is used while expanding or collapsing we can observe some animation take place for a certain period. We can change that duration by using the animationDuration property of the expansion panel List. We just have to provide Duration in either microseconds, milliseconds, or minutes as value.
  • > expandedHeaderPadding: This property is used to the padding that surrounds the panel header when expanded. By default, 16px of space is added to the header vertically (above and below) during expansion.
  • > dividerColor: This property is used to define the color for the divider when [ExpansionPanel.isExpanded] is false. If `dividerColor` is null, then [DividerThemeData.color] is used. If that is null, then [ThemeData.dividerColor] is used.
  • > elevation: This property is used to define elevation for the [ExpansionPanel] while it’s expanded. This uses [kElevationToShadow] to simulate shadows, it does not use [Material]’s arbitrary elevation featureBy default, the value of elevation is 2.

How to implement code in dart file :

You need to implement it in your code respectively:

Create a new dart file called main.dart inside the lib folder.

First, we will generate dummy data. We will create a list <Map<String, dynamic>> and add variable _items equal to generating a list. In this list, we will add number, id, title, description, and isExpanded.

List<Map<String, dynamic>> _items = List.generate(
10,
(index) => {
'id': index,
'title': 'Item $index',
'description':
'This is the description of the item $index. Lorem Ipsum is simply dummy text of the printing and typesetting industry.',
'isExpanded': false
});

In the body, we will add ExpansionPanelList() widget. In this widget, we will add elevation was three, expansionCallback was added index and isExpanded in the bracket. We will add setState() method. Inside the method, we will add _items[index][‘isExpanded’] equal not isExpanded.

ExpansionPanelList(
elevation: 3,
expansionCallback: (index, isExpanded) {
setState(() {
_items[index]['isExpanded'] = !isExpanded;
});
},
animationDuration: Duration(milliseconds: 600),
children: _items
.map(
(item) => ExpansionPanel(
canTapOnHeader: true,
backgroundColor:
item['isExpanded'] == true ? Colors.cyan[100] : Colors.white,
headerBuilder: (_, isExpanded) => Container(
padding:
EdgeInsets.symmetric(vertical: 15, horizontal: 30),
child: Text(
item['title'],
style: TextStyle(fontSize: 20),
)),
body: Container(
padding: EdgeInsets.symmetric(vertical: 15, horizontal: 30),
child: Text(item['description']),
),
isExpanded: item['isExpanded'],
),
)
.toList(),
),

We will add animationDuration was 600 milliseconds. We will add children as variable _items were mapped to the ExpansionPanel() widget. In this widget, we will add canTapOnHeader was true, backgroundColorheaderBuilder return the Container() widget. In this widget, we will add padding and on its child property, we will add text. In the body, we will add Conatiner and its child property, we will add text. When we run the application, we ought to get the screen’s output like the underneath screen capture.

Final Output

Code File:

import 'package:flutter/material.dart';
import 'package:flutter_expansion_panel_list/splash_screen.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.teal,
),
home: Splash());
}
}

class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);

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

class _HomePageState extends State<HomePage> {
List<Map<String, dynamic>> _items = List.generate(
10,
(index) => {
'id': index,
'title': 'Item $index',
'description':
'This is the description of the item $index. Lorem Ipsum is simply dummy text of the printing and typesetting industry.',
'isExpanded': false
});

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false,
title: Text('Flutter Expansion Panel List Demo'),
),
body: SingleChildScrollView(
child: ExpansionPanelList(
elevation: 3,
// Controlling the expansion behavior
expansionCallback: (index, isExpanded) {
setState(() {
_items[index]['isExpanded'] = !isExpanded;
});
},
animationDuration: Duration(milliseconds: 600),
children: _items
.map(
(item) => ExpansionPanel(
canTapOnHeader: true,
backgroundColor:
item['isExpanded'] == true ? Colors.cyan[100] : Colors.white,
headerBuilder: (_, isExpanded) => Container(
padding:
EdgeInsets.symmetric(vertical: 15, horizontal: 30),
child: Text(
item['title'],
style: TextStyle(fontSize: 20),
)),
body: Container(
padding: EdgeInsets.symmetric(vertical: 15, horizontal: 30),
child: Text(item['description']),
),
isExpanded: item['isExpanded'],
),
)
.toList(),
),
),
);
}
}

Conclusion:

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

I hope this blog will provide you with sufficient information on Trying up the ExpansionPanelList in your flutter projects. We will show you what the ExpansionPanelList is?. Show constructor and properties of the ExpansionPanelListr. Make a demo program for working ExpansionPanelList, and it shows a list where the children can expand/collapse to show/hide some detailed information in your flutter application. 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 a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on FacebookGitHubTwitter, and LinkedIn for any flutter-related queries.

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.

Related: SMS Using Twilio In Flutter

Related: Using SharedPreferences in Flutter

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.


Implement ActionListener In Flutter

0

Listeners on the Action class should have their listener callbacks eliminated with Action.removeActionListener when the listener is disposed of. This widget assists with that. It gives a lifetime to the association between the listener and the Action. It additionally helps by taking care of the adding and removing of the listener at the right focuses in the widget lifecycle.

In this article, we will explore the Implement ActionListener In Flutter. We will implement an ActionListener demo program and how to use it in your flutter applications.

ActionListener class – widgets library – Dart API
A helper widget for making sure that listeners on action are removed properly. Listeners on the Action class must…api. flutter.dev

Table Of Contents::

Introduction

Constructor

Properties

Implementation

Code Implement

Code File

Conclusion



Introduction:

ActionListener is the helper widget. You can utilize it to remove listeners from the activity. If you pay attention to an Action widget in a widget hierarchy, you should utilize this widget. If you are utilizing an Action outside of a widget context, you should call removeListener yourself.

Demo Module :

This demo video shows how to implement an ActionListener widget in a flutter. It shows how the ActionListener will work in your flutter applications. It shows where the user presses the action listener button, then a message will be shown on the bottom of a screen. It will be shown on your device.

Constructor:

To utilize ActionListener, you need to call the constructor underneath:

const ActionListener({
Key? key,
required this.listener,
required this.action,
required this.child,
})

In the above Constructor, all fields marked with @required must not be empty.

Properties:

There are some properties of ActionListener are:

  • > action: This property is used to the action that the callback will be registered with.
  • > child: This property is used to the widget can only have one child. To layout multiple children, let this widget’s child be a widget such as Row, Column, or Stack, which have a children property, and then provide the children to that widget.
  • > hashCode: This property is used to the hash code for this object.
  • > key: This property is used to control how one widget replaces another widget in the tree.
  • > listener: This property is used to the ActionListenerCallback callback to register with the action.
  • > runtimeType: This property is used to the representation of the runtime type of the object.

How to implement code in dart file :

You need to implement it in your code respectively:

Create a new dart file called main.dart inside the lib folder.

First, we will create an ActionListenerDemo class on this dart file. We will create a bool variable _on is equal to false and the final MyAction class was _myAction variable.

bool _on = false;
late final MyAction _myAction;

Lets describe MyAction class are:

MyAction class was extended Action<MyIntent> and we will add three override methods. First, we will add addActionListener in the bracket we will add (ActionListenerCallback listener). When we enable that button then ‘Action Listener was added’ print on the terminal. Second, we will add removeActionListener in the bracket we will add (ActionListenerCallback listener). When we disable that button then ‘Action Listener was removed’ prints on the terminal. Third, we will add invoke in the bracket we will add (covariant MyIntent intent). They will work notifyActionListeners().

class MyAction extends Action<MyIntent> {
@override
void addActionListener(ActionListenerCallback listener) {
super.addActionListener(listener);
print('Action Listener was add');
}

@override
void removeActionListener(ActionListenerCallback listener) {
super.removeActionListener(listener);
print('Action Listener was remove');
}

@override
void invoke(covariant MyIntent intent) {
notifyActionListeners();
}
}

We will create an initState() method. In this method, we will add _myAction variable is equal to the MyAction() class.

@override
void initState() {
super.initState();
_myAction = MyAction();
}

We will create a _toggleState() method. In this method, we will add setState() function. This function will add _on bool variables equal to the not !_on.

void _toggleState() {
setState(() {
_on = !_on;
});
}

In the body, we will add the Padding widget. In this widget, we will add a Container with width and height. It’s child property, we will add OutlinedButton() widget. Inside the widget, we will add style, onPressed method, and its child property we will add text “_on? ‘Disable’: ‘Enable’ “. When _on bool variable is true then Enable button will be shown else Disable button will be shown.

Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
width: 100,
height: 38,
child: OutlinedButton(
style:OutlinedButton.styleFrom(primary: Colors.cyan, ) ,
onPressed: _toggleState,
child: Text(_on ? 'Disable' : 'Enable'),
),
),
),

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Output

We will add ActionListener() widget. We will add if (action.intentType == MyIntent) then show a showSnackBar message and text ‘Action Listener Call’/ on listener. We will add an _myAction variable on action. We will add ElevatedButton() on its child property.

if (_on)
Padding(
padding: const EdgeInsets.all(8.0),
child: ActionListener(
listener: (Action<Intent> action) {
if (action.intentType == MyIntent) {
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
backgroundColor: Colors.blueGrey,
content: Text('Action Listener Call'),
));
}
},
action: _myAction,
child: ElevatedButton(
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(Colors.cyan),
),
onPressed: () => const ActionDispatcher()
.invokeAction(_myAction, const MyIntent()),
child: const Text('Call Action Listener'),
),
),
),
if (!_on) Container(),

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Final Output

Code File:

import 'package:flutter/material.dart';
import 'package:flutter_action_listner_demo/splash_screen.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);


@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Splash(),
);
}
}

class ActionListenerDemo extends StatefulWidget {
const ActionListenerDemo({Key? key}) : super(key: key);

@override
State<ActionListenerDemo> createState() => _ActionListenerDemoState();
}

class _ActionListenerDemoState extends State<ActionListenerDemo> {
bool _on = false;
late final MyAction _myAction;

@override
void initState() {
super.initState();
_myAction = MyAction();
}

void _toggleState() {
setState(() {
_on = !_on;
});
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false,
backgroundColor: Colors.cyan,
title: Text("Flutter ActionListener Demo")
),
body: Center(
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
width: 100,
height: 38,
child: OutlinedButton(
style:OutlinedButton.styleFrom(primary: Colors.cyan, ) ,
onPressed: _toggleState,
child: Text(_on ? 'Disable' : 'Enable'),
),
),
),
if (_on)
Padding(
padding: const EdgeInsets.all(8.0),
child: ActionListener(
listener: (Action<Intent> action) {
if (action.intentType == MyIntent) {
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
backgroundColor: Colors.blueGrey,
content: Text('Action Listener Call'),
));
}
},
action: _myAction,
child: ElevatedButton(
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(Colors.cyan),
),
onPressed: () => const ActionDispatcher()
.invokeAction(_myAction, const MyIntent()),
child: const Text('Call Action Listener'),
),
),
),
if (!_on) Container(),
],
),
),
);
}
}

class MyAction extends Action<MyIntent> {
@override
void addActionListener(ActionListenerCallback listener) {
super.addActionListener(listener);
print('Action Listener was add');
}

@override
void removeActionListener(ActionListenerCallback listener) {
super.removeActionListener(listener);
print('Action Listener was remove');
}

@override
void invoke(covariant MyIntent intent) {
notifyActionListeners();
}
}

class MyIntent extends Intent {
const MyIntent();
}

Conclusion:

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

I hope this blog will provide you with sufficient information on Trying up the ActionListener in your flutter projects. We will show you what the Introduction is?. Show constructor and properties of the ActionListener. Make a demo program for working ActionListener, and it shows where the user presses the action listener button, then a message will be shown on the bottom of a screen in your flutter application. 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 a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on FacebookGitHubTwitter, and LinkedIn for any flutter-related queries.

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.

Related: SMS Using Twilio In Flutter

Related: Using SharedPreferences in Flutter

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.


Explore Polygon Clipper In Flutter

0

It can be utilized by Clipper to clip the widget into any ideal shape. In Flutter, it very well may be done effectively because of built-in clippers like ClipOval, ClipRect, ClipRRect, and ClipPath. To accomplish this polygon shape you want to characterize what is the way which you want to clip to make your UI marvelous.

In this article, we will Explore Polygon Clipper In Flutter. We will implement a polygon clipper demo program and create a different polygon shape using the polygon_clipper package in your flutter applications.

polygon_clipper | Flutter Package
A Flutter plugin to create views using regular polygon shapes (e.g. Pentagons and Hexagons).pub.dev

Table Of Contents ::

Introduction

Constructor

Attributes

Implementation

Code Implement

Code File

Conclusion



Introduction:

Polygon clippers can be utilized to make distinctively shaped cards. After completing this article you will realize how to clip a widget into polygons with sides more noteworthy than three. You will figure out how to make a pentagonal shape, hexagonal shape, octagonal shape, etc.

Demo Module :

This demo video shows how to create a polygon clipper in a flutter. It shows how the polygon clipper will work using the polygon_clipper package in your flutter applications. It shows a pentagonal, hexagonal, octagonal shape and inside a network image using Polygon clippers. It will be shown on your device.

Constructor:

To utilize ClipPolygon, you need to call the constructor underneath:

ClipPolygon(
{@required this.child,
@required this.sides,
this.rotate: 0.0,
this.borderRadius: 0.0,
this.boxShadows: const []
}
);

In the above Constructor, all fields marked with @required must not be empty.

Attributes:

There are some attributes of ClipPolygon are:

  • > sides— This attribute is used to the number of sides of the polygon. In the above example, we have given the value of sides as 5 means pentagonal shape. To make a hexagonal shape just make the value of sides 6 and also make a different shape according to sides.
  • > borderRadius — This attribute is used to smoothen out the pointy edges. You can change the value to improve the aesthetics or accordance with the general theme you follow for your app.
  • > rotate — This attribute is used so you can specify the angle of rotation in degrees. For example, we have rotated the polygon 90 and 70 degrees in the above code
  • > boxShadows This attribute is used you can also customize the box-shadow to change the perceived elevation of the card.
  • > child — This attribute is used to the widget can only have one child. To layout multiple children, let this widget’s child be a widget such as Row, Column, or Stack, which have a children property, and then provide the children to that widget.

Implementation:

Step 1: Add the dependencies

Add dependencies to pubspec — yaml file.

dependencies:
flutter:
sdk: flutter
polygon_clipper: ^1.0.2

Step 2: Import

import 'package:polygon_clipper/polygon_clipper.dart';

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

How to implement code in dart file :

You need to implement it in your code respectively:

Create a new dart file called main.dart inside the lib folder.

We will create three shapes of polygon clippers are pentagonal, hexagonal, and octagonal shapes. We will deeply discuss the below in code.

Container(
padding: EdgeInsets.all(30.0),
child: ClipPolygon(
sides: 5,
borderRadius: 5.0,
rotate: 70.0,
boxShadows: [
PolygonBoxShadow(color: Colors.black, elevation: 7.0),
PolygonBoxShadow(color: Colors.blue, elevation: 5.0)
],
child: Container(
child: Image.network(
"https://images.unsplash.com/photo-1508672019048-805c876b67e2?ixid=MnwxMjA3fDB8MHxzZWFyY2h8NHx8dHJhdmVsfGVufDB8fDB8fA%3D%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=60",
fit: BoxFit.cover,
),
),
)),

We will make a container widget. In this widget, we will add ClipPolygon() widget. Inside, we will add sides was five for pentagonal shape, borderRadius was five, rotate was 70 degrees and boxShadows. It’s child property, we will add Container and it’s child property, we will add an image network. When we run the application, we ought to get the screen’s output like the underneath screen capture.

Pentagonal Shape

Next, we will create the same method as above. In ClipPolygon(), sides were six for hexagonal shape, rotate was 90 degrees, and boxShadows color for shadow/elevation of the card.

Container(
padding: EdgeInsets.all(30.0),
child: ClipPolygon(
sides: 6,
borderRadius: 5.0,
rotate: 90.0,
boxShadows: [
PolygonBoxShadow(color: Colors.greenAccent, elevation: 4.0),
PolygonBoxShadow(color: Colors.green, elevation: 5.0)
],
child: Container(
color: Colors.black,
child: Image.network(
"https://images.unsplash.com/photo-1530789253388-582c481c54b0?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1170&q=80",
fit: BoxFit.cover,
),
),
)),

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Hexagonal Shape

Next, we will create the same method as above. In ClipPolygon(), sides were eighth for octagonal shape, rotate was 90 degrees, and boxShadows color for shadow/elevation of the card.

Container(
padding: EdgeInsets.all(30.0),
child: ClipPolygon(
sides: 8,
borderRadius: 5.0,
rotate: 90.0,
boxShadows: [
PolygonBoxShadow(color: Colors.black, elevation: 1.0),
PolygonBoxShadow(color: Colors.grey, elevation: 5.0)
],
child: Container(
color: Colors.black,
child: Image.network(
"https://images.unsplash.com/photo-1493863641943-9b68992a8d07?ixid=MnwxMjA3fDB8MHxzZWFyY2h8MXx8cGhvdG9ncmFwaGVyfGVufDB8fDB8fA%3D%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=60",
fit: BoxFit.cover,
),
),
)),

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Octagonal Shape

Code File:

import 'package:flutter/material.dart';
import 'package:flutter_polygon_clipper_demo/splash_screen.dart';
import 'package:polygon_clipper/polygon_clipper.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Splash(),
);
}
}

class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.grey[200],
appBar: AppBar(
backgroundColor: Colors.green[300],
automaticallyImplyLeading: false,
title: Text("Flutter Polygon Clipper Demo"),
),
body: SingleChildScrollView(
child: Column(
children: [
Container(
padding: EdgeInsets.all(30.0),
child: ClipPolygon(
sides: 5,
borderRadius: 5.0,
rotate: 70.0,
boxShadows: [
PolygonBoxShadow(color: Colors.black, elevation: 7.0),
PolygonBoxShadow(color: Colors.blue, elevation: 5.0)
],
child: Container(
child: Image.network(
"https://images.unsplash.com/photo-1508672019048-805c876b67e2?ixid=MnwxMjA3fDB8MHxzZWFyY2h8NHx8dHJhdmVsfGVufDB8fDB8fA%3D%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=60",
fit: BoxFit.cover,
),
),
)),
Container(
padding: EdgeInsets.all(30.0),
child: ClipPolygon(
sides: 6,
borderRadius: 5.0,
rotate: 90.0,
boxShadows: [
PolygonBoxShadow(color: Colors.greenAccent, elevation: 4.0),
PolygonBoxShadow(color: Colors.green, elevation: 5.0)
],
child: Container(
color: Colors.black,
child: Image.network(
"https://images.unsplash.com/photo-1530789253388-582c481c54b0?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1170&q=80",
fit: BoxFit.cover,
),
),
)),
Container(
padding: EdgeInsets.all(30.0),
child: ClipPolygon(
sides: 8,
borderRadius: 5.0,
rotate: 90.0,
boxShadows: [
PolygonBoxShadow(color: Colors.black, elevation: 1.0),
PolygonBoxShadow(color: Colors.grey, elevation: 5.0)
],
child: Container(
color: Colors.black,
child: Image.network(
"https://images.unsplash.com/photo-1493863641943-9b68992a8d07?ixid=MnwxMjA3fDB8MHxzZWFyY2h8MXx8cGhvdG9ncmFwaGVyfGVufDB8fDB8fA%3D%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=60",
fit: BoxFit.cover,
),
),
)),
],
),
));
}
}

Conclusion:

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

I hope this blog will provide you with sufficient information on Trying up the Polygon Clipper in your flutter projects. We will show you what the Introduction is?. Show constructor and attributes of the Polygon Clipper. Make a demo program for working Polygon Clipper, and it shows a pentagonal, hexagonal, octagonal shape and inside a network image using Polygon clippers in your flutter application. 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 a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on FacebookGitHubTwitter, and LinkedIn for any flutter-related queries.

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.

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.


Explore Spinning Animation In Flutter

0

Animation is an intricate procedure in any mobile application. Despite its intricacy, Animation improves the client experience to another level and gives a rich user interaction. Because of its extravagance, animation turns into a basic piece of present-day mobile applications. Flutter structure perceives the significance of Animation and gives a straightforward and natural system to develop a wide range of animations.

In this blog, we will be Explore Spinning Animation In Flutter. We will implement a demo program and make a spinning animation without using any plugin in your flutter applications.

Table Of Contents::

Introduction

Code Implement

Code File

Conclusion



Introduction:

The below demo video shows how to make a spinning animation in a flutter. It shows how the spinning animation will work without using any plugin in your flutter applications. When the code is successfully run, we will show four rectangle boxes that will rotate clockwise that is a spinning animation, and the user will stop/play the animation when pressing the floating action button. It will be shown on your device.

Demo Module :


How to implement code in dart file :

You need to implement it in your code respectively:

Create a new dart file called main.dart inside the lib folder.

First, we will create an AnimationController and add a _controller variable is equal to the AnimationController() method. In this method, we will add the duration for five seconds and vsync was this. Also, adding reverse animation was false.

late final AnimationController _controller = AnimationController(
duration: const Duration(seconds: 5),
vsync: this,
)..repeat(reverse: false);

We will create an animation with the value of type “double” and an _animation variable is equal to the CurvedAnimation() method. In the method, we will add a parent as _controller and the curve was linear.

late final Animation<double> _animation = CurvedAnimation(
parent: _controller,
curve: Curves.linear,
);

We will add dispose() method. In this method, we will add _controller.dispose().

@override
void dispose() {
_controller.dispose();
super.dispose();
}

In the body, we will add RotationTransition() widget. In this widget, we will add turns was _animation variable. It’s child property, we will add padding, and it’s child property we will add four Containers with height, width, colors, and box-shape was a rectangle.

RotationTransition(
turns: _animation,
child: Padding(
padding: EdgeInsets.all(10.0),
child: Container(
child: Wrap(
children: [
Container(
width: 140,
height: 120,
decoration: BoxDecoration(
color: Colors.amber, shape: BoxShape.rectangle),
),
Container(
width: 140,
height: 120,
decoration: BoxDecoration(
color: Colors.green, shape: BoxShape.rectangle),
),
Container(
width: 140,
height: 120,
decoration: BoxDecoration(
color: Colors.indigo, shape: BoxShape.rectangle),
),
Container(
width: 140,
height: 120,
decoration: BoxDecoration(
color: Colors.red, shape: BoxShape.rectangle),
),
],
),
),
),
),

We will create a FloatingActionButton(). In this button, we will add a stop icon and onPressed method. In this method, we will add if _controller isAnimating then stop the animation and else start the animation.

floatingActionButton: FloatingActionButton(
child: Icon(Icons.stop),
onPressed: () {
if (_controller.isAnimating) {
_controller.stop(); // Stop the animation
} else {
_controller.repeat(); // Start the animation
}
},
),

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Output

Code File:

import 'package:flutter/material.dart';
import 'package:flutter_spinning_animation_dem/splash_screen.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blueGrey,
),
home: Splash());
}
}

class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
@override
_HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> with TickerProviderStateMixin {
late final AnimationController _controller = AnimationController(
duration: const Duration(seconds: 5),
vsync: this,
)..repeat(reverse: false);

late final Animation<double> _animation = CurvedAnimation(
parent: _controller,
curve: Curves.linear,
);

@override
void dispose() {
_controller.dispose();
super.dispose();
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false,
title: Text('Flutter Spinning Animation Demo'),
),
body: Center(
child: RotationTransition(
turns: _animation,
child: Padding(
padding: EdgeInsets.all(10.0),
child: Container(
child: Wrap(
children: [
Container(
width: 140,
height: 120,
decoration: BoxDecoration(
color: Colors.amber, shape: BoxShape.rectangle),
),
Container(
width: 140,
height: 120,
decoration: BoxDecoration(
color: Colors.green, shape: BoxShape.rectangle),
),
Container(
width: 140,
height: 120,
decoration: BoxDecoration(
color: Colors.indigo, shape: BoxShape.rectangle),
),
Container(
width: 140,
height: 120,
decoration: BoxDecoration(
color: Colors.red, shape: BoxShape.rectangle),
),
],
),
),
),
),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.stop),
onPressed: () {
if (_controller.isAnimating) {
_controller.stop(); // Stop the animation
} else {
_controller.repeat(); // Start the animation
}
},
),
);
}
}

Conclusion:

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

I hope this blog will provide you with sufficient information on Trying up the Spinning Animation in your flutter projects. We will show you what the Introduction is?. Make a demo program for working on Spinning Animation without using any third-party plugins. In this blog, we have examined the Spinning Animation of the flutter app. I hope this blog will help you in the comprehension of Spinning Animation in a better way. 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 a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on FacebookGitHubTwitter, and LinkedIn for any flutter-related queries.

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.

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.


Password Strength Checker In Flutter

0

Flutter just intrigued me with the pleasant UI stuff you could do effectively, and obviously, it permits you to create for both platforms simultaneously. The focal reason for existing is to construct the application out of widgets. It portrays how your application view should look with their present setup and state. When you modify the code, the widget rebuilt its depiction by computing the contrast between the past and current widget to decide the negligible changes for rendering in the UI of the application.

In this blog, we will explore the Password Strength Checker In Flutter. We will implement a demo program and create a Password Strength Checker without using any third-party plugins in your flutter applications.

Table Of Contents ::

Introduction

Code Implement

Code File

Conclusion



Introduction:

The below demo video shows how to create a password strength checker in a flutter. It shows how the password strength checker will work without using any third-party plugins in your flutter applications. When the user enters the password on the text field, then they will show your password was strong, weak, great, and not acceptable, etc. Also, the linear progress bar was shown with different colors. It will be shown on your device.

Demo Module :


How to implement code in dart file :

You need to implement it in your code respectively:

Create a new dart file called main.dart inside the lib folder.

First, we will create a late String _password variable, the double _strength variable is equal to zero, and the String _displayText variable is equal to the text ‘Please enter a password.’

late String _password;
double _strength = 0;
String _displayText = 'Please enter a password'

Now, we will add RegExp for number and letter

RegExp numReg = RegExp(r".*[0-9].*");
RegExp letterReg = RegExp(r".*[A-Za-z].*");

In the body, we will add the TextField() method. In this method, we will add onChanged navigate to _checkPassword(value). We will deeply describe it below. Also, we will add obscureText was true, hintText was ‘Password’.

TextField(
onChanged: (value) => _checkPassword(value),
obscureText: true,
decoration: const InputDecoration(
border: OutlineInputBorder(), hintText: 'Password',
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(12.0)),
borderSide: BorderSide(color: Colors.teal),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(12.0)),
borderSide: BorderSide(color: Colors.teal),
),),
),

In the body, we will add the LinearProgressIndicator widget. In this widget, we will add a value that was _strength variable. It will change colors according to _strength variable conditions.

LinearProgressIndicator(
value: _strength,
backgroundColor: Colors.grey[300],
color: _strength <= 1 / 4
? Colors.red
: _strength == 2 / 4
? Colors.yellow
: _strength == 3 / 4
? Colors.blue
: Colors.green,
minHeight: 15,
),

Now, we will add text was _displayText variable and add ElevatedButton() widget. In this widget, we will add the onPressed method. The button will be enabled in this method if the password strength is medium or beyond and add text ‘Continue’.

Text(
_displayText,
style: const TextStyle(fontSize: 18),
),
const SizedBox(
height: 50,
),
ElevatedButton(
onPressed: _strength < 1 / 2 ? null : () {},
child: const Text('Continue'))

Now, we will deeply describe _checkPassword(value):

We will add _password variable was equal to value. trim().

_password = value.trim();

If the password was empty and add it inside the setState() method. In this method, _strength was equal to zero and _displayText was ‘Please enter your password.’

if (_password.isEmpty) {
setState(() {
_strength = 0;
_displayText = 'Please enter you password';
});
}

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Password Empty

If the password was 6 characters less than in length, then it was weak, and add it inside the setState() method. In this method, _strength was equal to 1/4 and _displayText was ‘Your password is too short’.’

else if (_password.length < 6) {
setState(() {
_strength = 1 / 4;
_displayText = 'Your password is too short';
});
}

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Password Short

If the password was 6 characters to less than 8 characters in length, then it was acceptable but not strong, and add it inside the setState() method. In this method, _strength was equal to 2/4 and _displayText was ‘Your password is acceptable but not strong.’

else if (_password.length < 8) {
setState(() {
_strength = 2 / 4;
_displayText = 'Your password is acceptable but not strong';
});
}

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Password is Acceptable but not Strong

If the password was greater than equal to 8 characters in length, and but doesn’t contain both letters and digit characters, then it was strong, and add it inside the setState() method. In this method, _strength was equal to 3/4 and _displayText was ‘Your password is strong.’

if (!letterReg.hasMatch(_password) || !numReg.hasMatch(_password)) {
setState(() {
// Password length >= 8
// But doesn't contain both letter and digit characters
_strength = 3 / 4;
_displayText = 'Your password is strong';
});
}

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Password Strong

If the password was greater than equal to 8 characters in length, and Password contains both letters and digit characters, then it was great, and add it inside the setState() method. In this method, _strength was equal to 1 and _displayText was ‘Your password is great.’

else {
// Password length >= 8
// Password contains both letter and digit characters
setState(() {
_strength = 1;
_displayText = 'Your password is great';
});
}

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Password Great

Code File:

import 'package:flutter/material.dart';
import 'package:flutter_password_strength/splash_screen.dart';

void main() {
runApp(const MyApp());
}

class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
// Hide the debug banner
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.teal,
),
home: Splash(),
);
}
}

class HomeScreen extends StatefulWidget {
const HomeScreen({Key? key}) : super(key: key);

@override
State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
late String _password;
double _strength = 0;

RegExp numReg = RegExp(r".*[0-9].*");
RegExp letterReg = RegExp(r".*[A-Za-z].*");

String _displayText = 'Please enter a password';

void _checkPassword(String value) {
_password = value.trim();

if (_password.isEmpty) {
setState(() {
_strength = 0;
_displayText = 'Please enter you password';
});
} else if (_password.length < 6) {
setState(() {
_strength = 1 / 4;
_displayText = 'Your password is too short';
});
} else if (_password.length < 8) {
setState(() {
_strength = 2 / 4;
_displayText = 'Your password is acceptable but not strong';
});
} else {
if (!letterReg.hasMatch(_password) || !numReg.hasMatch(_password)) {
setState(() {
// Password length >= 8
// But doesn't contain both letter and digit characters
_strength = 3 / 4;
_displayText = 'Your password is strong';
});
} else {
// Password length >= 8
// Password contains both letter and digit characters
setState(() {
_strength = 1;
_displayText = 'Your password is great';
});
}
}
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false,
title: const Text('Flutter Password Strength Checker Demo'),
),
body: Padding(
padding: const EdgeInsets.all(30),
child: Column(
children: [
TextField(
onChanged: (value) => _checkPassword(value),
obscureText: true,
decoration: const InputDecoration(
border: OutlineInputBorder(), hintText: 'Password',
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(12.0)),
borderSide: BorderSide(color: Colors.teal),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(12.0)),
borderSide: BorderSide(color: Colors.teal),
),),
),
const SizedBox(
height: 30,
),
// The strength indicator bar
LinearProgressIndicator(
value: _strength,
backgroundColor: Colors.grey[300],
color: _strength <= 1 / 4
? Colors.red
: _strength == 2 / 4
? Colors.yellow
: _strength == 3 / 4
? Colors.blue
: Colors.green,
minHeight: 15,
),
const SizedBox(
height: 20,
),

// The message about the strength of the entered password
Text(
_displayText,
style: const TextStyle(fontSize: 18),
),
const SizedBox(
height: 50,
),
// This button will be enabled if the password strength is medium or beyond
ElevatedButton(
onPressed: _strength < 1 / 2 ? null : () {},
child: const Text('Continue'))
],
),
));
}
}

Conclusion:

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

I hope this blog will provide you with sufficient information on Trying up the Password Strength Checker in your flutter projects. We will show you what the Introduction is?. Make a demo program for working Password Strength Checker without using any third-party plugins. In this blog, we have examined the Password Strength Checker of the flutter app. I hope this blog will help you in the comprehension of the Password Strength Checker in a better way. 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 a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on FacebookGitHubTwitter, and LinkedIn for any flutter-related queries.

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.

Related: Verify Email and Reset Password in Flutter

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.


Draggable GridView In Flutter

0

Draggable GridView is a regular mobile application connection. As the user presses now and again called touch and holds on a widget, another widget appears under the user’s finger, and the user draggable the widget to the last region and conveyances it. On multitouch devices, different draggable can happen at the same time because that there can be various pointers in touch with the devices immediately.

In this article, we will explore the Draggable GridView In Flutter. We will implement a draggable grid view demo program and create a draggable of the GridViewItems using the flutter_draggable_gridview package in your flutter applications.

Table Of Contents::

Draggable GridView

Constructor

Properties

Implementation

Code Implement

Code File

Conclusion



Draggable GridView:

Draggable GridView expands the convenience of the GridView widget in Flutter and offers you the chance of making a reorder of the GridViewItems clear by Draggable. It is too easy to even consider executing and superb to use.

Demo Module :

This demo video shows how to create a draggable grid view in a flutter. It shows how the draggable grid view will work using the flutter_draggable_gridview package in your flutter applications. It shows draggable interaction where the user long/touch presses on a choice of item and then drags it to the picture using the draggable technique. Something like a grid view with draggable can change the position both horizontally and vertically. It will be shown on your device.

Constructor:

To utilize DraggableGridViewBuilder, you need to call the constructor underneath:

const DraggableGridViewBuilder({
Key? key,
required this.gridDelegate,
required this.listOfWidgets,
required this.dragCompletion,
this.isOnlyLongPress = true,
this.dragFeedback,
this.dragChildWhenDragging,
this.dragPlaceHolder,
this.scrollDirection = Axis.vertical,
this.reverse = false,
this.controller,
this.primary,
this.physics,
this.shrinkWrap = false,
this.padding,
this.addAutomaticKeepAlives = true,
this.addRepaintBoundaries = true,
this.addSemanticIndexes = true,
this.cacheExtent,
this.semanticChildCount,
this.dragStartBehavior = DragStartBehavior.start,
this.keyboardDismissBehavior = ScrollViewKeyboardDismissBehavior.manual,
this.restorationId,
this.clipBehavior = Clip.hardEdge,
})

In the above Constructor, all fields marked with @required must not be empty.

Properties:

There are some properties of DraggableGridViewBuilder are:

  • > listOfWidgets: This property is used to [listOfWidgets] will show the widgets in Gridview.builder.
  • > isOnlyLongPress: This property is used to accept ‘ true’ and ‘false’.
  • > dragFeedback: This property is used to you can set this to display the widget when the widget is being dragged.
  • > dragChildWhenDragging: This property is used to you can set this to display the widget at dragged widget original place when the widget is being dragged.
  • > dragPlaceHolder: This property is used to you can set this to display the widget at the drag target when the widget is being dragged.
  • > dragCompletion: This property is used to you have to set this callback to get the updated list.

Implementation:

Step 1: Add the dependencies

Add dependencies to pubspec — yaml file.

dependencies:
flutter:
sdk: flutter
flutter_draggable_gridview:

Step 2: Import

import 'package:flutter_draggable_gridview/flutter_draggable_gridview.dart';

Step 3: Add the assets

Add assets to pubspec — yaml file.

assets:
- assets/

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

How to implement code in dart file :

You need to implement it in your code respectively:

Create a new dart file called main.dart inside the lib folder.

We will create a Stateful widget and the respective State class has to use with DragFeedback, DragPlaceHolder, DragCompletion.

class MyHomePageState extends State<MyHomePage>
with DragFeedback, DragPlaceHolder, DragCompletion {
}

We will create a list of strings of an image that is equal to a List. generate().

static List<String> listOfImages =
List.generate(12, (index) => 'assets/${index + 1}.jpeg');

Now, we will create a listOf Widgets that are equal to the List. generate(). In bracket, inside we will add listOfImages.length (index), then return a Container widget. In this widget, we will add padding and its child property, we will add an Image. asset(). In bracket, we will add listOfImages[index] and Boxfit is cover.

List<Widget> listOfWidgets = List.generate(
listOfImages.length,
(index) => Container(
padding: EdgeInsets.only(
left: 4.0,
right: 4.0,
top: 8.0,
),
child: Image.asset(
listOfImages[index],
fit: BoxFit.cover,
),
),
);

In the body, we will add DraggableGridViewBuilder() widget. In this widget, we will add gridDelegate was SliverGridDelegateWithFixedCrossAxisCount(). Also add crossAxisCount was 2 and childAspectRatio. We will add listOfWidgets, dragCompletion, isOnlyLongPress, dragFeedback and dragPlaceHolder.

DraggableGridViewBuilder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: MediaQuery.of(context).size.width /
(MediaQuery.of(context).size.height / 3),
),
listOfWidgets: listOfWidgets,
dragCompletion: this,
isOnlyLongPress: false,
dragFeedback: this,
dragPlaceHolder: this,
),

Now, widget feedback is used to can set this to display the widget when the widget is being dragged. We will return the container, it’s child property we will add items. child with width and height.

@override
Widget feedback(List<Widget> list, int index) {
var item = list[index] as Container;
return Container(
child: item.child,
width: 200,
height: 150,
);
}

Now, PlaceHolderWidget will use to show at drag target, when the widget is being dragged. We will return PlaceHolderWidget, it’s child property we will add a Container with white color.

@override
PlaceHolderWidget placeHolder(List<Widget> list, int index) {
return PlaceHolderWidget(
child: Container(
color: Colors.white,
),
);
}

This method, onDragAccept is used to you have to set this callback to get the updated list.

@override
void onDragAccept(List<Widget> list) {

}

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Final Output

Code File:

import 'package:flutter/material.dart';
import 'package:flutter_draggable_gridview/flutter_draggable_gridview.dart';
import 'package:flutter_draggable_gridview_dem/splash_screen.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.green,
),
home: Splash()
);
}
}

class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);

final String title;

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

class MyHomePageState extends State<MyHomePage>
with DragFeedback, DragPlaceHolder, DragCompletion {
static List<String> listOfImages =
List.generate(12, (index) => 'assets/${index + 1}.jpeg');
List<Widget> listOfWidgets = List.generate(
listOfImages.length,
(index) => Container(
padding: EdgeInsets.only(
left: 4.0,
right: 4.0,
top: 8.0,
),
child: Image.asset(
listOfImages[index],
fit: BoxFit.cover,
),
),
);

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.cyan[200],
automaticallyImplyLeading: false,
title: Text(
widget.title,
),
),
body: DraggableGridViewBuilder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: MediaQuery.of(context).size.width /
(MediaQuery.of(context).size.height / 3),
),
listOfWidgets: listOfWidgets,
dragCompletion: this,
isOnlyLongPress: false,
dragFeedback: this,
dragPlaceHolder: this,
),
);
}

@override
Widget feedback(List<Widget> list, int index) {
var item = list[index] as Container;
return Container(
child: item.child,
width: 200,
height: 150,
);
}

@override
PlaceHolderWidget placeHolder(List<Widget> list, int index) {
return PlaceHolderWidget(
child: Container(
color: Colors.white,
),
);
}

@override
void onDragAccept(List<Widget> list) {
}
}

Conclusion:

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

I hope this blog will provide you with sufficient information on Trying up the Draggable GridView in your flutter projects. We will show you what the Draggable GridView is?. Show constructor and properties of the Draggable GridView. Make a demo program for working Draggable GridView, and it shows draggable interaction where the user long/touch presses on a choice of item and then drags it to the picture using the draggable technique. Something like a grid view with draggable can change the position both horizontally and vertically in your flutter application. 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 a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on FacebookGitHubTwitter, and LinkedIn for any flutter-related queries.

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.

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.


Implement Tooltip In Flutter

0

A tooltip shows a useful message when users hover, tap, or focus on a component. In Flutter, you can utilize a built-in widget named Tooltip to make tooltips effortlessly. It widget turns out to be extremely valuable when the UI of the application is too thick to even think about showing all the data at once on the screen, in a way it essentially makes the application more open.

In this blog, we will explore the Implement Tooltip In Flutter. We will see how to implement a demo program and we will see how to use Tooltip in your flutter applications.

Tooltip class – material library – Dart API
A material design tooltip. Tooltips provide text labels that help explain the function of a button or other user…api. flutter.dev

Table Of Contents::

Tooltip

Constructor

Properties

Code Implement

Code File

Conclusion



Tooltip:

A tooltip is a material design class in Flutter that gives text marks to clarify the functionality of a button or UI action. All in all, it is utilized to show extra data when the user moves or focuses over a specific widget. It expands the availability of our application. Assuming we wrap the widget with it, it is exceptionally valuable when the user long presses the widget because, all things considered, it shows up as a floating label.

There are two different ways to execute the Tooltip in a widget, the first is by utilizing the actual widget and the alternate way is restricted to certain widgets like IconButton, FloatingActionButton, and so forth which give tooltip as a property that thusly takes in a string as a parameter.

Demo Module ::

The above demo video shows how to use Tooltip in a flutter. It shows how Tooltip will work in your flutter applications. It shows when the user tap log pressed on the image, then shows a popup message. It will be shown on your device.

Constructor:

To utilize Tooltip, you need to call the constructor underneath:

const Tooltip({
Key? key,
required this.message,
this.height,
this.padding,
this.margin,
this.verticalOffset,
this.preferBelow,
this.excludeFromSemantics,
this.decoration,
this.textStyle,
this.waitDuration,
this.showDuration,
this.child,
})

In the above Constructor, all fields marked with @required must not be empty.

Properties:

There are some properties of Tooltip are:

  • > child: This property is utilized to decide the widget for which the tooltip must be shown.
  • > decoration: This property with the assistance of decoration property background color, border (Shape), of the tooltip can be controlled.
  • > excludeFormSemantics: This property is used to take in boolean as a parameter, and by default it is false. It controls whether the tooltip’s message should be added to the semantic tree or not.
  • > height: This property is used to determine the height of the tooltip. It takes in double value as a parameter.
  • > margin: This property is used to determine the space around the tooltip. It takes EdgeInsetsGeometry as the parameter.
  • > message: This property is used to take a string value as the parameter to display the text in the tooltip.
  • > padding: This property is used to also take EdgeInsetsGeometry as the parameter to determine the space between the border and the main content of the tooltip.
  • > preferBelow: This property is used to control whether to display the tooltip on the widget or below that by taking a boolean as the parameter. By default, it is set to true.
  • > showDuration: This property is used to determine the time in seconds for which the tooltip should be displayed.
  • > textStyle: This property is used to take care of the styling of the message in the tooltip such as font size or color.
  • > verticalOffset: This property is utilized to control the vertical distance between the tooltip and the widget.
  • > waitDuration: This property is utilized to control the time after which the tooltip will be made apparent once the user floats over the widget of presses it for over one second.

How to implement code in dart file :

You need to implement it in your code respectively:

Create a new dart file called main.dart inside the lib folder.

In the body, we will add a Center widget. In this widget, we will add the Tooltip() widget. Inside the widget, we will add a message that means it takes a string value as the parameter to display the text in the tooltip and it is a required property so must not be empty. Next, we will add paddingmargindecoration with color and border-radius.

Center(
child: Tooltip(
message: 'FlutterDevs is a protruding flutter app development company with an extensive '
'in-house team of 30+ seasoned professionals who know exactly what you need '
'to strengthen your business across various dimensions.',
padding: const EdgeInsets.all(30),
margin: const EdgeInsets.only(top: 30, left:30,right: 30),
decoration: BoxDecoration(
color: Colors.blueAccent.withOpacity(0.6),
borderRadius: BorderRadius.circular(22)),
textStyle: const TextStyle(
fontSize: 15,
fontStyle: FontStyle.italic,
color: Colors.white),
child: SizedBox(
width: 320,
height: 150,
child: Image.asset(
'assets/logo.png',
fit: BoxFit.cover,
),
)))

We will add a textStyle means it takes care of the styling of the message in the tooltip such as font size or color. In child property, we will add the SizedBox widget. In this widget, we will add width, height, and its child property, we will add an image. When we run the application, we ought to get the screen’s output like the underneath screen capture.

Final Output

Code File:

import 'package:flutter/material.dart';
import 'package:flutter_tooltips_demo/splash_screen.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: Splash(),
);
}
}

class MyHomePage extends StatefulWidget {


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

class _MyHomePageState extends State<MyHomePage> {

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.blueAccent.withOpacity(0.6),
automaticallyImplyLeading: false,
title: Text('Flutter Tooltip Demo'),
),
body: Center(
child: Tooltip(
message: 'FlutterDevs is a protruding flutter app development company with an extensive '
'in-house team of 30+ seasoned professionals who know exactly what you need '
'to strengthen your business across various dimensions.',
padding: const EdgeInsets.all(30),
margin: const EdgeInsets.only(top: 30, left:30,right: 30),
decoration: BoxDecoration(
color: Colors.blueAccent.withOpacity(0.6),
borderRadius: BorderRadius.circular(22)),
textStyle: const TextStyle(
fontSize: 15,
fontStyle: FontStyle.italic,
color: Colors.white),
child: SizedBox(
width: 320,
height: 150,
child: Image.asset(
'assets/logo.png',
fit: BoxFit.cover,
),
))),
);
}
}

Conclusion:

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

I hope this blog will provide you with sufficient information on Trying up the Tooltip in your flutter projects. We will show you what the Tooltip is?. Show constructor and properties of the Tooltip. Make a demo program for working Tooltip. It shows when the user long-press the widget, then shows a popup message in your flutter application. 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 a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on FacebookGitHubTwitter, and LinkedIn for any flutter-related queries.

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.

Related: SMS Using Twilio In Flutter

Related: Using SharedPreferences in Flutter

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.