Google search engine
Home Blog Page 16

Explore AnimatedDefaultTextStyle In Flutter

0

Adding an Animation to a Flutter Mobile Application is a significant piece of an App Development Process. Consider the possibility that we need to enliven the text in a Flutter Mobile Application.

Animations expect a colossal part in updating your application’s general client experience from the visual examination, movement, and up to the custom animations, you can truly envision!. Like a few distinct things facilitated into an application, animations should be useful instead of essentially an ordinary elaborate organization.

In this post, we will Explore AnimatedDefaultTextStyle In Flutter. We will also implement a demo program of animated default text style, and show text animations as well as images also in your flutter applications.

AnimatedDefaultTextStyle class – widgets library – Dart API
Animated version of DefaultTextStyle which automatically transitions the default text style (the text style to apply to…api. flutter.dev

Table Of Contents::

Introduction

Constructor

Parameters

Code Implement

Code File

Conclusion



Introduction:

Quickening text in Flutter is utilized. It is an Animated Adaptation of the DefaultTextStyle widget. AnimatedDefaultTextStyle widget automatically transitions the default text style over a given duration at whatever point the given style changes.

Demo Module ::

The above demo video shows how to implement an AnimatedDefaultTextStyle in flutter and shows how AnimatedDefaultTextStyle will work in your flutter applications. We will show a user when clicking on the button and then, show a text and image size will be animated and the size was increased/decrease. It will be shown on your device.

Construction:

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

const AnimatedDefaultTextStyle({
Key? key,
required this.child,
required this.style,
this.textAlign,
this.softWrap = true,
this.overflow = TextOverflow.clip,
this.maxLines,
this.textWidthBasis = TextWidthBasis.parent,
this.textHeightBehavior,
Curve curve = Curves.linear,
required Duration duration,
VoidCallback? onEnd,
})

All fields marked with @required must not be empty in the above Constructor.

Properties:

There are some parameters of AnimatedDefaultTextStyle are:

  • > 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 with that widget.
  • > curve — This property is used to the curve to apply when animating the parameters of this container.
  • > style — This property is used for the target text style. The text style must not be null. When this property is changed, the style will be animated over [duration] time
  • > duration — This property is used for the duration over which to animate the parameters of this container. It represents a difference from one point in time to another.
  • > onEnd() — This property is used to call every time an animation completes. This can be useful to trigger additional actions e.g. another animation at the end of the current animation.
  • > overflow — This property is used to how visual overflow should be handled. This property takes effect immediately when changed, it is not animated.

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 some variables like a bool _first is equal to true, double _fontSize is equal to 40, Color _color is equal to cyan color, and double _height is equal to 100.

bool _first = true;
double _fontSize = 40;
Color _color = Colors.cyan;
double _height = 100;

In the body, we will add a SizeBox widget with height. Inside the widget, we will add AnimatedDefaultTextStyle() widget. In this widget, we will add curve was bounceOut, add duration was milliseconds. Also, we will add style property. In this property, we will add the fontSize variable and color variable. In the child, we will add the Column widget. In this widget, we will add images and text “Flutter Dev”.

SizedBox(
height: 210,
child: AnimatedDefaultTextStyle(
curve: Curves.bounceOut,
duration: const Duration(milliseconds: 350),
style: TextStyle(
fontSize: _fontSize,
color: _color,
fontWeight: FontWeight.bold,
),
child: Column(
children: [
Image.asset(
'assets/logo.png',
height: _height,
width: 280,
),
const SizedBox(
height: 10,
),
const Text("Flutter Dev's"),
],
),
),
),

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

Output

Now, we will create an ElevatedButton(). In this button, we will add the onPressed method. In this method, we will add setState() function. In this function, we will add the _fontSize variable is equal to the _first variable then size is 60 else 40, add the _color variable is equal to the _first variable then color is blue else brown. In the child, we will add the text “Click Here!!”.

SizedBox(
height: 50,
width: 150,
child: ElevatedButton(
style: ElevatedButton.styleFrom(
primary: Colors.cyan,
textStyle: const TextStyle(
fontSize: 18, fontWeight: FontWeight.bold)),
onPressed: () {
setState(() {
_fontSize = _first ? 60 : 40;
_color = _first ? Colors.blue : Colors.brown;
_first = !_first;
_height = _first ? 100 : 130;
});
},
child: const Text(
"Click Here!!",
),
),
)

When the user presses the button then, the text will be animated, and change the size and color also, and the image size also changes. It will be shown on your screen devices.

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_animated_default_text_style/splash_screen.dart';

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

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
bool _first = true;
double _fontSize = 40;
Color _color = Colors.cyan;
double _height = 100;

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Flutter AnimatedDefaultTextStyle Demo"),
centerTitle: true,
automaticallyImplyLeading: false,
backgroundColor: Colors.cyan,
),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
SizedBox(
height: 210,
child: AnimatedDefaultTextStyle(
curve: Curves.bounceOut,
duration: const Duration(milliseconds: 350),
style: TextStyle(
fontSize: _fontSize,
color: _color,
fontWeight: FontWeight.bold,
),
child: Column(
children: [
Image.asset(
'assets/logo.png',
height: _height,
width: 280,
),
const SizedBox(
height: 10,
),
const Text("Flutter Dev's"),
],
),
),
),
const SizedBox(
height: 20,
),
SizedBox(
height: 50,
width: 150,
child: ElevatedButton(
style: ElevatedButton.styleFrom(
primary: Colors.cyan,
textStyle: const TextStyle(
fontSize: 18, fontWeight: FontWeight.bold)),
onPressed: () {
setState(() {
_fontSize = _first ? 60 : 40;
_color = _first ? Colors.blue : Colors.brown;
_first = !_first;
_height = _first ? 100 : 130;
});
},
child: const Text(
"Click Here!!",
),
),
)
],
),
),
);
}
}

Conclusion:

In the article, I have explained the AnimatedDefaultTextStyle basic structure in a flutter; you can modify this code according to your choice. This was a small introduction to AnimatedDefaultTextStyle 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 AnimatedDefaultTextStyle in your flutter projectsWe will show you what the Introduction is?. Some AnimatedDefaultTextStyle properties, make a demo program for working AnimatedDefaultTextStyle. It shows text will be animated, and change the size and color also, and the image size also changes 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.


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.


Drop Shadow Effect In Flutter

0

Some of the time you want to apply a shadow effect on your application. How should you have such an effect if you’re using Flutter?. A plugin called DropShadow is proper hence. DropShadow is a plugin that applies a picture as well as a widget moreover.

In this blog, we will explore Drop Shadow Effect In Flutter. We will see how to implement a demo program of the drop shadow and how to use the Drop Shadow effect for any widget using the drop_shadow package in your flutter applications.

drop_shadow | Flutter Package
It’s a drop shadow effect not only for images but also for any widget in Flutter.pub.dev

Table Of Contents::

Introduction

Constructor

Parameters

Implementation

Code Implement

Code File

Conclusion



Introduction:

Drop Shadow effect for any image as well as any widget also. The below demo screenshot shows how to use a drop shadow in a flutter. It shows how the drop shadow will work using the drop_shadow package in your flutter applications. It shows a shadow effect on the networking image, assets image, container widget, and text widget. It will be shown on your device.

Demo Module :

Constructor:

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

const DropShadow({
Key? key,
required this.child,
this.blurRadius = 10.0,
this.borderRadius = 0.0,
this.offset = const Offset(0.0, 8.0),
this.opacity = 1.0,
this.spread = 1.0,
})

All fields marked with @required must not be empty in the above Constructor.

Parameters:

There are some parameters of DropShadow are:

  • > child — This parameter 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 with that widget.
  • > blurRadius — This parameter is used to the blur size of the shadow (default: 10.0).
  • > borderRadius —This parameter is used to the BorderRadius to the image and the shadow (default: 0.0).
  • > offset — This parameter is used to the position of the shadow (default: Offset(0.0, 8.0)).
  • > opacity — This parameter is used to the given opacity to the shadow (default: 1.0).
  • > spread — This parameter is used for the size of the shadow (default: 1.0).

Implementation:

Step 1: Add the dependencies

Add dependencies to pubspec — yaml file.

dependencies:
flutter:
sdk: flutter
drop_shadow: ^0.0.1+4

Step 2: Add the assets

Add assets to pubspec — yaml file.

assets:
- assets/

Step 3: Import

import 'package:drop_shadow/drop_shadow.dart';

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.

In the main.dart file, we will create a HomePage() class. In this class, we will make some DropShadow demo. First, we will create a network image and wrap it in the DropShadow() widget. Inside the widget, we add default blurRadius, add Offset(3, 3), and the size of the shadow.

DropShadow(
blurRadius: 10,
offset: const Offset(3, 3),
spread: 1,
child: Image.network(
'https://images.unsplash.com/photo-1651794327243-d976672943c2?crop=entropy&cs=tinysrgb&fm='
'jpg&ixlib=rb-1.2.1&q=80&raw_url=true&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto='
'format&fit=crop&w=1974',
width: 280,
),
),

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

Network Image Output (Drop Shadow Effect)

Next, we will add the DropShadow() widget. In this widget, we will add an assets image from the assets folder with height and width. Drop Shadow gives a shadow effect on this image.

DropShadow(
child: Image.asset('assets/logo.png',height: 140,
width: 280,),
),

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

Assets Image Output (Drop Shadow Effect)

Now, we will create a Container widget. In this widget, we will add the height and width of the container. Also, add border-radius and gradient colors in the BoxDecoration. The whole widget is wrapped into its DropShadow() widget.

DropShadow(
child: Container(
height: 145,
width: 280,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
gradient: const LinearGradient(
colors: [Color(0xFFEC3DEC), Color(0xFF73C5ED)],
),
),
),
),

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

Container Widget Output (Drop Shadow Effect)

Last but not least, we will a text “Flutter Devs” and wrap it to it DropShadow() widget. They give a shadow effect on a text also.

const DropShadow(
child: Text(
"Flutter Dev's",
style: TextStyle(fontSize: 40, fontWeight:FontWeight.bold,color: Colors.cyan),
),
),

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

Text Output (Drop Shadow Effect)

Code File:

import 'package:drop_shadow/drop_shadow.dart';
import 'package:flutter/material.dart';
import 'package:flutter_drop_shadow_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 const MaterialApp(
home: Splash(),
debugShowCheckedModeBanner: false,
);
}
}

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

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Flutter Drop Shadow Effect Demo"),
centerTitle: true,
automaticallyImplyLeading: false,
backgroundColor: Colors.teal,
),
body: Center(
child: SingleChildScrollView(
child: Column(
children: [
DropShadow(
blurRadius: 10,
offset: const Offset(3, 3),
spread: 1,
child: Image.network(
'https://images.unsplash.com/photo-1651794327243-d976672943c2?crop=entropy&cs=tinysrgb&fm='
'jpg&ixlib=rb-1.2.1&q=80&raw_url=true&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto='
'format&fit=crop&w=1974',
width: 280,
),
),
DropShadow(
child: Image.asset('assets/logo.png',height: 140,
width: 280,),
),
DropShadow(
child: Container(
height: 145,
width: 280,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
gradient: const LinearGradient(
colors: [Color(0xFFEC3DEC), Color(0xFF73C5ED)],
),
),
),
),
const DropShadow(
child: Text(
"Flutter Dev's",
style: TextStyle(fontSize: 40, fontWeight:FontWeight.bold,color: Colors.cyan),
),
),
],
),
),
),
);
}
}

Conclusion:

In the article, I have explained the Drop Shadow Effect’s basic structure in a flutter; you can modify this code according to your choice. This was a small introduction to Drop Shadow Effect 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 Drop Shadow Effect in your flutter projectsWe will show you what the Introduction is?. Some drop shadow effect parameters, make a demo program for working Drop Shadow Effect. The Drop Shadow effect for any widget or any image using the drop_shadow package 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.


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.


Flutter 3.0— What’s New In Flutter

0

Last year in Google I/O, the Flutter group declared Flutter 2.2. From that point forward, there have been a couple of huge upgrades and stable releases to Flutter. It shows how incredible Flutter is performing and the way responsive its group is to resolve basic issues, update Flutter, and take it to a higher level.

In this article, we will explore the Flutter 3.0 — What’s New In Flutter. Flutter 3.0 is live and prepared for creation on all desktop stages! We are invigorated and can hardly stand by to share what’s new in Flutter, its support for macOS and Linux, the remarkable performance upgrades for web and mobile, and adding support for Apple Silicon.



Introduction:

Flutter is essentially intended to be portable and ready to make delightful applications. Flutter developer tooling centers around making our development process quick and productive.

It has just been three months since Flutter declared its support for Windows, and we are right here, practically amidst May, with the most recent Flutter update. This all-new version is stable for macOS and Linux and supports Apple Silicon. The version update from Flutter 2 to Flutter 3 scaffolds the excursion from a mobile-centric to a multi-platform framework.https://www.youtube.com/embed/YRuQj7mlH2I?feature=oembed

Flutter is currently an undisputed and most well-known cross multi-stage UI tool stash for making natively compiled applications. The best thing about Flutter is that it is something other than a Google product, and everybody can taste its cut of achievement. Anybody can release the force of this open-source stage either through contributing code, building packages supporting the core system, composing material and instructional tutorials, and numerous alternate ways.

Flutter 2 Vs Flutter 3:

The Flutter 3 delivery supports macOS for Universal Binaries so that Flutter applications can work natively on Apple Silicon chips and Intel. Google has teamed up with Ubuntu’s Canonical for the Linux delivery to convey a profoundly incorporated cream of the cream choice for application development.

We should dive into what’s new in Flutter 3.0 to find every one of the significant elements of Flutter’s steady release.

macOS & Linux are finally stable!:

Windows, Web, Android, and iOS have been stable for some time, lastly, we can invite macOS and Linux to the rundown of stable support. Flutter 3 is one of the main achievements in the journey of Flutter up to now since Flutter 3.0 supports all the six platforms on the stable channel formally.

Menu Cascading and Support for the MacOS System Menu Bar:

The new Flutter 3 highlights contain new contributions for platform-specific integration, intuitive models for compilation to build support, give accessibility, and internationalization.

The purpose of the update is to offer adaptability to use the operating system and share ideal UI and rationale according to prerequisites. The Flutter’s most recent highlights take special care of platform support past rendering pixels.

Cascading menus demo

Flutter 3 presently supports the Apple Silicon Mac. Look at the new macOS install page to utilize the Apple Silicon download button.

Material 3:

Indeed, one of the top features of what’s happening in the Flutter 3.0 conversation is the change to Material Design 3, a Google in-house design language. The Flutter group has offered a versatile cross-stage design framework to change your Flutter application into a lovely intuitive product.

Material 3 (otherwise called Material You) is the up-and-coming age of Material Design. The massive changes incorporate a variety of framework enhancements, typography upgrades, and updates for many components.

The Material 3 widgets in Flutter were presented with highlights including

  • > Adaptive colors
  • > New buttons
  • > New app menu
  • > Variable font support

How you really want to involve Material 3 in Flutter 3.0 is to empower it by means of a boundary to ThemeData

return MaterialApp(   
theme: ThemeData(useMaterial3: true),
// ... );

Flutter Firebase:

The application distributers require a complete arrangement of tools to help you in operating, assembling, and releasing your Flutter applications. These incorporate administrations, for example, data storage, validation, authentication, device testing, and cloud functions. Flutter hosts different third-party-together mixes like Firebase, AWS Amplify, Sentry, and AppWrite. Firebase is Google’s back-end stage for building mobile and web applications.

The team at Flutter has declared the Flutter Firebase integration empowering a completely upheld core part of the Firebase offering. As indicated by the report from Slashdata, 62% of Flutter developers use Firebase for their Flutter applications.

• > Firebase Crashlytics:

You can now track real-time fatal mistakes utilizing the Flutter Crashlytics plugin, with a similar arrangement of elements through Firebase’s popular real-time crash reporting administration. The elements incorporate basic alarming measurements like “crash-free users” that help you in staying aware of the steadiness of your application.

It is currently simple to triage, focus on and fix issues utilizing the Crashlytics pipeline, which has been moved up to upgrade the bunching of Flutter crashes.

Flutter’s Games Toolkit:

The Flutter group has focussed on casual gamers this time to deliver a simple to-utilize easygoing games tool stash. It offers a starter pack of formats and acknowledges for advertisements as well as cloud services.

Note: The developers at Flutter have made a pleasant pinball game controlled by Firebase and Flutter’s web support which shows the flexibility of the new Flutter 3 update. You can develop games on Flutter through this Games doc page.

Mobile Updates:

Android and iOS were the main stages all along, and in Flutter 3, they have gotten a couple of significant upgrades.

  • > Foldable support for phones: What’s going on in Flutter 3? Indeed, the all-new Flutter discharge integrates foldable cell phones. New widgets and highlights permit you to build dynamic and engaging encounters for the eye on foldable devices. This element is planned as a team with Microsoft.
  • > Variable refresh rate support for IOS: The new Flutter version upholds variable refresh rates and ProMotion shows on iOS devices, including iPad Pro and iPhone 13 Pro. The delivering ability is currently at refresh rates up to 120 Hz, which was restricted to 60 Hz previously. The user can have a smoother looking-over experience while observing quick animations.

Flutter Web Updates:

Flutter web has not gotten many redesigns in this version. Notwithstanding, there are a couple of huge upgrades, particularly for performance.

  • > Image decoding: The most recent Flutter 3 version contains new APIs to non concurrently unravel pictures off the fundamental string. This is done through the underlying picture codecs of the program. You would be glad to realize that this element speeds up decoding the image 2x, guaranteeing that the fundamental string is rarely impeded and clearing the junk built-up in the previously.
  • > Web app lifecycles: The new web application lifecycle API for Flutter applications gives you the advantage of controlling the cycle for bootstrapping your application. This allows you to run the Flutter in headless mode on the web. This applies to many use-cases, including the accompanying oftentimes mentioned situations:

A splash screen.

A loading indicator.

A plain HTML interactive landing page is displayed before the Flutter app.

You can now leverage the desktop support for your app.

Flutter DevTools:

Flutter DevTools is an incredible expansion to Flutter that assists with troubleshooting any Flutter application as useful as could really be expected. There are a couple of updates in Flutter DevTools 2.12.2

  • > Enhance Tracing under the performance tab
  • > Improvement on the Network tab
  • > Dedicated plugin for Provider to keep track of change notifier

Flutter 3.0 Performance Improvements:

The developer’s group at Flutter has taken the Flutter performance improvement to a higher level by benchmarking to assess the streamlining benefits. Above all, the mistiness movement execution has been improved for straightforward case situations.

For example, when an Opacity widget comprises a solitary rendering primitive, the saveLayer technique is overlooked and is typically summoned by Opacity.

The Flutter 3 delivery presents a component that predicts and appraises the delivering picture intricacy given the drawing operations cost that it contains. This is utilized as a way to deal with diminished memory utilization without a relapse in Flutter application execution.

More Exciting Features:

Here are a few additional reports on the Flutter ecosystem carefully chosen solely for you!

> Theme Extensions:

You can now add anything to the ThemeData of the material library utilizing Theme extensions. Rather than expanding ThemeData and executing copyWith, lerp, and different strategies once more, you can specify ThemeData.extensions.

Additionally, as a package developer, you can give ThemeExtensions.

> Ads:

Flutter 3 supports the distributer’s prerequisites for making customized promotions and dealing with Apple’s App Tracking Transparency (ATTT) necessities. Google gives a User Messaging Platform (UMP) SDK that substitutes the past open-source Consent SDK.

Introducing Dart 2.17:

Dart 2.17 stable was declared alongside Flutter 3.0 with some hotly anticipated highlights that developers have been waiting for. Dart is the mystery ingredient behind Flutter, and any upgrades in Dart would assist with working on Flutter’s development. We should investigate the new highlights.

  • > Enhanced Enumerations:

A gigantic update has landed enum to super-charge them. We use influence extensions to broaden the usefulness of enums including characterizing techniques. Beginning from Dart 2.17, we never again need to utilize our more older model to work with the enum.

enum Bikes {
suzuki Hayabusa('Model X', 200);
bmw R('1250 GS', 120);
ducati Panigale V4('1103 cc', 220);

final String name;
final int price;

const Cars(this.name, this.price);

String get nameAndPrice => '$name:$price';

String greeting(String yourName) {
return 'My name is $yourName and I have a $name that costs $price!';
}

@override
String toString() {
return 'The name is $name and price is $price';
}
}

void main() {
print(Cars.suzuki Hayabusa.greeting('User'));
print(Cars.bmw R);
print(Cars.ducati Panigale V4.name);
}
  • > Super constructors:

This is maybe one of my top choices that will shorthand our coding, in which you might pass constructor arguments to the superclass.

We should explore what the new syntax resembles. We used to have the old syntax like beneath:

class User {

User(this.name);

final String name;

}

// Old way: before Dart 2.17

class Test extends User {

Test(String name, this.age) : super(name);

final int age;

}
  • > The new syntax is straightforward:
class User {

User(this.name);

final String name;

}

// New way: Dart 2.17 and above

class Test extends User {

Employee(super.name, this.age);

final int age;

}
  • > Name args anywhere:

Beforehand, we needed to add name arguments in the last position of the constructor. From Dart 2.17, we never again need to do that. You can put your named arguments anyplace in the constructor.

class User {

User(this.name);

final String name;

}

class Test extends User {

Test(super.name, {required this.age});

final int age;

void employee() => print('$name is $age year-old and is employee');

}

void main() {

Test(age: 26, 'User').employee();

}

Conclusion:

I have attempted to sum up and provide you with the best features of Flutter 3.0. In any case, I suggest watching the keynote and enjoying the incredible introductions and energizing interviews.

You can peruse Introducing Flutter 3 and Dart 2.17: Productivity and integration blogs for more data. It is irrefutable that the community merits all commendations for accomplishing this great work to assist Flutter with achieving the situation with glory and advancement to keep up with its type of aiding organizations of every kind across the world.

We want to believe that you have had an all-encompassing encounter perusing our blog post on What’s New In Flutter 3.0. The eventual fate of Flutter appears to be splendid and promising for building superb encounters in the application ecosystem.

❤ ❤ 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.


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.


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.


Dialog Using GetX in Flutter

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.


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.


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.


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.


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.