Today tutorial, I am going to show you how to create Liquid Swipe Animation in Flutter. liquid Swipe animation is amazing and its Created for iOS Platform and for React Native Platform. this animation Or Liquid Swipe Animation is Inspired by Cuberto.
For this animation, we are will Need liquid_swipe
Package. Liquid Swipe is the Unveils a New Page like Liquid Animation Just like the Above animation.
š±Ā What weāre going to Build
How to Create Liquid Swipe Animation in Flutter
Letās Start the Tutorial
If you Donāt know how to Create a Flutter app, check out Getting started with FlutterĀ official tutorial.
š» Installation
First, you will need to add package name liquid_swipe into Pubspec.yaml
In theĀ dependencies:
Ā section of yourĀ pubspec.yaml
, add the following lines as :
liquid_swipe: ^1.3.1
Now run Flutter package getĀ in your terminal which weāll install liquid_swipe package.
import āpackage:liquid_swipe/Constants/Helpers.dartā;
import āpackage:liquid_swipe/liquid_swipe.dartā;
liquid_swipe.dart for LiquidSwipe() method and Helpers.dartĀ for WaveType animation so you can either selectĀ circularReveal
Or liquidRevel
Animation.
Before We Start Coding, You Need to Download Assets For this App.
For that Create a Separate Folder and give a name ā assetsā to it & add Assets you can Download Assets File From Here
and Add this Below line into Pubspec.yaml file
assets:
- assets/img/
fonts:
- family: Product Sans
fonts:
- asset: assets/font/Product_Sans_Bold.ttf
- asset: assets/font/Product_Sans_Regular.ttf
We need to Create a Simple main.dart
file to contain our MyApp
widget just like Below Snippet
import 'package:flutter/material.dart';
import 'package:liquid_swipe/Constants/Helpers.dart';
import 'package:liquid_swipe/liquid_swipe.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: LiquidSwipe(),
),
);
}
}
Okay, In the LiquidSwipe() method we need to Add _ pages, enbaleloop, fullTransitionValue, enableSlideIcon, waveType, positionSlideIcon. _
LiquidSwipe(
pages: pages,
enableLoop: true,
fullTransitionValue: 300,
enableSlideIcon: true,
waveType: WaveType.liquidReveal,
positionSlideIcon: 0.5,
),
After that Create three Container for 3 PagesĀ where we will Create Container widget For Each Separate pages.
Before we Start Creating Pages we Need to create Textstyle For Text Widget Just Like Below Code Snippet in a MyApp
widget.
static const TextStyle goldcoinGreyStyle = TextStyle(
color: Colors.grey,
fontSize: 20.0,
fontWeight: FontWeight.bold,
fontFamily: "Product Sans");
static const TextStyle goldCoinWhiteStyle = TextStyle(
color: Colors.white,
fontSize: 20.0,
fontWeight: FontWeight.bold,
fontFamily: "Product Sans");
static const TextStyle greyStyle =
TextStyle(fontSize: 40.0, color: Colors.grey, fontFamily: "Product Sans");
static const TextStyle whiteStyle =
TextStyle(fontSize: 40.0, color: Colors.white, fontFamily: "Product Sans");
static const TextStyle boldStyle = TextStyle(
fontSize: 50.0,
color: Colors.black,
fontFamily: "Product Sans",
fontWeight: FontWeight.bold,
);
static const TextStyle descriptionGreyStyle = TextStyle(
color: Colors.grey,
fontSize: 20.0,
fontFamily: "Product Sans",
);
static const TextStyle descriptionWhiteStyle = TextStyle(
color: Colors.white,
fontSize: 20.0,
fontFamily: "Product Sans",
);
So this will be a Six TextStyle is Required for the creating a Pages text style.
final pages = [
Container(),
Container(),
Container(),
];
#FirstScreen
Container(
color: Colors.white,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(
"GoldCoin",
style: goldcoinGreyStyle,
),
Text(
"Skip",
style: goldcoinGreyStyle,
),
],
),
),
Image.asset("assets/img/firstImage.png"),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 30.0),
child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
"Online",
style: greyStyle,
),
Text(
"Gambling",
style: boldStyle,
),
SizedBox(
height: 20.0,
),
Text(
"Temporibus autem aut\n"
"officiis debitis aut rerum\n"
"necessitatibus",
style: descriptionGreyStyle,
),
],
),
)
],
),
),
#SecondScreen
Container(
color: Color(0xFF55006c),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(
"GoldCoin",
style: goldCoinWhiteStyle,
),
Text(
"Skip",
style: goldCoinWhiteStyle,
),
],
),
),
Image.asset("assets/img/secondImage.png"),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 30.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
"Online",
style: whiteStyle,
),
Text(
"Gaming",
style: boldStyle,
),
SizedBox(
height: 20.0,
),
Text(
"Excepteur sint occaecat cupidatat\n"
"non proident, sunt in\n"
"culpa qui officia",
style: descriptionWhiteStyle,
),
],
),
)
],
),
),
#ThirdScreen
Container(
color: Colors.orange,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(
"GoldCoin",
style: goldCoinWhiteStyle,
),
Text(
"Skip",
style: goldCoinWhiteStyle,
),
],
),
),
Image.asset("assets/img/firstImage.png"),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 30.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
"Online",
style: whiteStyle,
),
Text(
"Gambling",
style: boldStyle,
),
SizedBox(
height: 20.0,
),
Text(
"Temporibus autem aut\n"
"officiis debitis aut rerum\n"
"necessitatibus",
style: descriptionWhiteStyle,
),
],
),
)
],
),
),
#Okay So this Our Final Code
import 'package:flutter/material.dart';
import 'package:liquid_swipe/Constants/Helpers.dart';
import 'package:liquid_swipe/liquid_swipe.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
static const TextStyle goldcoinGreyStyle = TextStyle(
color: Colors.grey,
fontSize: 20.0,
fontWeight: FontWeight.bold,
fontFamily: "Product Sans");
static const TextStyle goldCoinWhiteStyle = TextStyle(
color: Colors.white,
fontSize: 20.0,
fontWeight: FontWeight.bold,
fontFamily: "Product Sans");
static const TextStyle greyStyle =
TextStyle(fontSize: 40.0, color: Colors.grey, fontFamily: "Product Sans");
static const TextStyle whiteStyle =
TextStyle(fontSize: 40.0, color: Colors.white, fontFamily: "Product Sans");
static const TextStyle boldStyle = TextStyle(
fontSize: 50.0,
color: Colors.black,
fontFamily: "Product Sans",
fontWeight: FontWeight.bold,
);
static const TextStyle descriptionGreyStyle = TextStyle(
color: Colors.grey,
fontSize: 20.0,
fontFamily: "Product Sans",
);
static const TextStyle descriptionWhiteStyle = TextStyle(
color: Colors.white,
fontSize: 20.0,
fontFamily: "Product Sans",
);
final pages = [
Container(
color: Colors.white,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(
"GoldCoin",
style: goldcoinGreyStyle,
),
Text(
"Skip",
style: goldcoinGreyStyle,
),
],
),
),
Image.asset("assets/img/firstImage.png"),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 30.0),
child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
"Online",
style: greyStyle,
),
Text(
"Gambling",
style: boldStyle,
),
SizedBox(
height: 20.0,
),
Text(
"Temporibus autem aut\n"
"officiis debitis aut rerum\n"
"necessitatibus",
style: descriptionGreyStyle,
),
],
),
)
],
),
),
Container(
color: Color(0xFF55006c),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(
"GoldCoin",
style: goldCoinWhiteStyle,
),
Text(
"Skip",
style: goldCoinWhiteStyle,
),
],
),
),
Image.asset("assets/img/secondImage.png"),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 30.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
"Online",
style: whiteStyle,
),
Text(
"Gaming",
style: boldStyle,
),
SizedBox(
height: 20.0,
),
Text(
"Excepteur sint occaecat cupidatat\n"
"non proident, sunt in\n"
"culpa qui officia",
style: descriptionWhiteStyle,
),
],
),
)
],
),
),
Container(
color: Colors.orange,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(
"GoldCoin",
style: goldCoinWhiteStyle,
),
Text(
"Skip",
style: goldCoinWhiteStyle,
),
],
),
),
Image.asset("assets/img/firstImage.png"),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 30.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
"Online",
style: whiteStyle,
),
Text(
"Gambling",
style: boldStyle,
),
SizedBox(
height: 20.0,
),
Text(
"Temporibus autem aut\n"
"officiis debitis aut rerum\n"
"necessitatibus",
style: descriptionWhiteStyle,
),
],
),
)
],
),
),
];
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: LiquidSwipe(
pages: pages,
enableLoop: true,
fullTransitionValue: 300,
enableSlideIcon: true,
waveType: WaveType.liquidReveal,
positionSlideIcon: 0.5,
),
),
);
}
}
You can see the full source code of the projectĀ here .
Enjoyed the Tutorial? Please leave a LIKE š to show your support and appreciation
š¬ If you have a question about anything in the Tutorial, Please leave me a comment and Iāll do my best to answer it.
Top comments (1)
Helpful article, thanks for this! Cool!
If you are interested in this, you can also look at my article about Flutter templates. I made it easier for you and compared the free and paid Flutter templates. I'm sure you'll find something useful there, too. - dev.to/pablonax/free-vs-paid-flutt...