1621573456
This is an introduction to rive(formerly flare) animations for your flutter application. Why should you use rive?
First, the Adobe After Effects animation files can be loaded and converted by rive studio which also means that the Lottie files site files can also be loaded and converted into riv format by the-rive studio web app. The gist is that it allows you to reduce the number of animation controllers you have write-by-hand.
First, before we get to flutter code on how to use the rive plugin let’s cover some basics about rive. You need the animation-name for your animation controller to use. That name can be found in the web player preview of any animation within the rive web app at:
https://rive.app/preview/?filename=224-424-luke-vs-darth
That is the animation by Bobbeh which I am using in this flutter demo; as you notice the right panel shows the animation-name as Animation 1(the artboard) which will get used in our animation controller.
To install the rive plugin in your pubspec under dependencies:
rive: ^0.7.9
#rive #flutter #ios #android
1620992479
In this digital world, online businesses aspire to catch the attention of users in a modern and smarter way. To achieve it, they need to traverse through new approaches. Here comes to spotlight is the user-generated content or UGC.
What is user-generated content?
“ It is the content by users for users.”
Generally, the UGC is the unbiased content created and published by the brand users, social media followers, fans, and influencers that highlight their experiences with the products or services. User-generated content has superseded other marketing trends and fallen into the advertising feeds of brands. Today, more than 86 percent of companies use user-generated content as part of their marketing strategy.
In this article, we have explained the ten best ideas to create wonderful user-generated content for your brand. Let’s start without any further ado.
Generally, social media platforms help the brand to generate content for your users. Any user content that promotes your brand on the social media platform is the user-generated content for your business. When users create and share content on social media, they get 28% higher engagement than a standard company post.
Furthermore, you can embed your social media feed on your website also. you can use the Social Stream Designer WordPress plugin that will integrate various social media feeds from different social media platforms like Facebook, Twitter, Instagram, and many more. With this plugin, you can create a responsive wall on your WordPress website or blog in a few minutes. In addition to this, the plugin also provides more than 40 customization options to make your social stream feeds more attractive.
In general, surveys can be used to figure out attitudes, reactions, to evaluate customer satisfaction, estimate their opinions about different problems. Another benefit of customer surveys is that collecting outcomes can be quick. Within a few minutes, you can design and load a customer feedback survey and send it to your customers for their response. From the customer survey data, you can find your strengths, weaknesses, and get the right way to improve them to gain more customers.
Additionally, it is the best way to convert your brand leads to valuable customers. The key to running a successful contest is to make sure that the reward is fair enough to motivate your participation. If the product is relevant to your participant, then chances are they were looking for it in the first place, and giving it to them for free just made you move forward ahead of your competitors. They will most likely purchase more if your product or service satisfies them.
Furthermore, running contests also improve the customer-brand relationship and allows more people to participate in it. It will drive a real result for your online business. If your WordPress website has Google Analytics, then track contest page visits, referral traffic, other website traffic, and many more.
The business reviews help your consumers to make a buying decision without any hurdle. While you may decide to remove all the negative reviews about your business, those are still valuable user-generated content that provides honest opinions from real users. Customer feedback can help you with what needs to be improved with your products or services. This thing is not only beneficial to the next customer but your business as a whole.
Reviews are powerful as the platform they are built upon. That is the reason it is important to gather reviews from third-party review websites like Google review, Facebook review, and many more, or direct reviews on a website. It is the most vital form of feedback that can help brands grow globally and motivate audience interactions.
However, you can also invite your customers to share their unique or successful testimonials. It is a great way to display your products while inspiring others to purchase from your website.
Moreover, Instagram videos create around 3x more comments rather than Instagram photo posts. Instagram videos generally include short videos posted by real customers on Instagram with the tag of a particular brand. Brands can repost the stories as user-generated content to engage more audiences and create valid promotions on social media.
Similarly, imagine you are browsing a YouTube channel, and you look at a brand being supported by some authentic customers through a small video. So, it will catch your attention. With the videos, they can tell you about the branded products, especially the unboxing videos displaying all the inside products and how well it works for them. That type of video is enough to create a sense of desire in the consumers.
#how to get more user generated content #importance of user generated content #user generated content #user generated content advantages #user generated content best practices #user generated content pros and cons
1580992154
With the help of this course, you can learn to create and animate characters who express with body language in After Effects. Our personal purpose is to help anyone interested in Animation to start practicing with little projects, simple Characters, and most of all, explore the expressiveness of their Body Language and Character Acting. Many people seldom to start learning 2D animation because they are convinced that you need to know how to draw. While drawing skills can help you to improve, that is not the essential skill to do animation. For animation you need to understand the most basic principles in animation, like timing, anticipation, pose to pose. This course is divided into 3 parts theory, rigging and animation which will help you learn how to design characters, character animation and body language expressions. Enroll now and Learn to create 2D Animation in After Effects.
#2d animation #character animation #character rigging #learn animation #animation courses
1680268784
Flutter Animate
A performant library that makes it simple to add almost any kind of animated effect in Flutter.
All via a simple, unified API without fussing with AnimationController and StatefulWidget.
Above: The included example app.
Extension methods for num
, to make specifying durations easier. For example: 2.seconds
, 0.1.minutes
, or 300.ms
.
A loop
extension method for AnimatedController
which is identical to repeat
, but adds a count
parameter to specifiy how many times to play.
Basics
To apply effects, wrap the target widget in Animate
, and specify a list of effects:
Animate(
effects: [FadeEffect(), ScaleEffect()],
child: Text("Hello World!"),
)
It also adds an .animate()
extension method to all widgets, which wraps the widget in Animate()
. Each effect also adds a chainable extension method to Animate
to enable a shorthand syntax:
Text("Hello World!").animate().fade().scale()
NOTE: The shortform style is used in this README, but all functionality is available in either format.
Effects have optional delay
, duration
, and curve
parameters. Effects run in parallel, but you can use a delay
to run them sequentially:
Text("Hello").animate()
.fade(duration: 500.ms)
.scale(delay: 500.ms) // runs after fade.
Note that effects are "active" for the duration of the full animation, so for example, two fade effects on the same target can have unexpected results (SwapEffect
detailed below, can help address this).
If not specified (or null), these values are inherited from the previous effect, or from Animate.defaultDuration
and Animate.defaultCurve
if it is the first effect:
Text("Hello World!").animate()
.fadeIn() // uses `Animate.defaultDuration`
.scale() // inherits duration from fadeIn
.move(delay: 300.ms, duration: 600.ms) // runs after the above w/new duration
.blurXY() // inherits the delay & duration from move
Animate
has its own delay
parameter, which defines a delay before the animation begins playing. Unlike the delay on an Effect
, it is only applied once if the animation repeats.
Text("Hello").animate(
delay: 1000.ms, // this delay only happens once at the very start
onPlay: (controller) => controller.repeat(), // loop
).fadeIn(delay: 500.ms) // this delay happens at the start of each loop
Most effects include begin
and end
parameters, which specify the start/end values. These are usually "smart" in the sense that if only one is specified then the other will default to a "neutral" value (ie. no visual effect). If both are unspecified the effect should use visually pleasing defaults.
// an opacity of 1 is "neutral"
Text("Hello").animate().fade() // begin=0, end=1
Text("Hello").animate().fade(begin: 0.5) // end=1
Text("Hello").animate().fade(end: 0.5) // begin=1
Many effects have additional parameters that influence their behavior. These should also use pleasant defaults if unspecified.
Text('Hello').animate().tint(color: Colors.purple)
ThenEffect
is a special convenience "effect" that makes it easier to sequence effects. It does this by establishing a new baseline time equal to the previous effect's end time and its own optional delay
. All subsequent effect delays are relative to this new baseline.
In the following example, the slide would run 200ms after the fade ended.
Text("Hello").animate()
.fadeIn(duration: 600.ms)
.then(delay: 200.ms) // baseline=800ms
.slide()
The AnimateList
class offers similar functionality for lists of widgets, with the option to offset each child's animation by a specified interval
:
Column(children: AnimateList(
interval: 400.ms,
effects: [FadeEffect(duration: 300.ms)],
children: [Text("Hello"), Text("World"), Text("Goodbye")],
))
// or shorthand:
Column(
children: [Text("Hello"), Text("World"), Text("Goodbye")]
.animate(interval: 400.ms).fade(duration: 300.ms),
)
Because Effect
instances are immutable, they can be reused. This makes it easy to create a global collection of effects that are used throughout your app and updated in one place. This is also useful for design systems.
MyGlobalEffects.transitionIn = <Effect>[
FadeEffect(duration: 100.ms, curve: Curves.easeOut),
ScaleEffect(begin: 0.8, curve: Curves.easeIn)
]
// then:
Text('Hello').animate(effects: MyGlobalEffects.transitionIn)
Custom effects & builders
It is easy to write new resuable effects by extending Effect
, but you can also easily create one-off custom effects by using CustomEffect
, ToggleEffect
, and SwapEffect
.
CustomEffect
lets you build custom animated effects. Simply specify a builder
function that accepts a context
, value
, and child
. The child is the target of the animation (which may already have been wrapped in other effects).
For example, this would add a background behind the text and fade it from red to blue:
Text("Hello World").animate().custom(
duration: 300.ms,
builder: (context, value, child) => Container(
color: Color.lerp(Colors.red, Colors.blue, value),
padding: EdgeInsets.all(8),
child: child, // child is the Text widget being animated
)
)
By default it provides a value
from 0-1
(though some curves can generate values outside this range), based on the current time, duration, and curve. You can also specify begin
and end
values as demonstrated in the example below.
Animate
can be created without a child, so you use CustomEffect
as a simplified builder. For example, this would build text counting down from 10, and fading out:
Animate().custom(
duration: 10.seconds,
begin: 10,
end: 0,
builder: (_, value, __) => Text(value.round()),
).fadeOut()
ToggleEffect
also provides builder functionality, but instead of a double
, it provides a boolean value equal to true
before the end of the effect and false
after (ie. after its duration).
Animate().toggle(
duration: 2.seconds,
builder: (_, value, __) => Text(value ? "Before" : "After"),
)
This can also be used to activate "Animated" widgets, like AnimatedContainer
, by toggling their values with a minimal delay:
Animate().toggle(
duration: 1.ms,
builder: (_, value, __) => AnimatedContainer(
duration: 1.seconds,
color: value ? Colors.red : Colors.green,
),
)
SwapEffect
lets you swap out the whole target widget at a specified time:
Text("Before").animate()
.swap(duration: 900.ms, builder: (_, __) => Text("After"))
This can also be useful for creating sequential effects, by swapping the target widget back in, effectively wiping all previous effects:
text.animate().fadeOut(300.ms) // fade out & then...
// swap in original widget & fade back in via a new Animate:
.swap(builder: (_, child) => child.animate().fadeIn())
Events & callbacks
Animate
includes the following callbacks:
onInit
: the internal AnimationController
has been initializedonPlay
: the animation has started playing after any Animate.delay
onComplete
: the animation has finishedThese callbacks return the AnimationController
, which can be used to manipulate the animation (ex. repeat, reverse, etc).
Text("Horrible Pulsing Text")
.animate(onPlay: (controller) => controller.repeat(reverse: true))
.fadeOut(curve: Curves.easeInOut)
For more nuanced callbacks, use CallbackEffect
or ListenEffect
.
CallbackEffect
lets you add a callback to an arbitrary postion in your animations. For example, adding a callback halfway through a fade:
Text("Hello").animate().fadeIn(duration: 600.ms)
.callback(duration: 300.ms, callback: (_) => print('halfway'))
As with other effects, it will inherit the delay and duration of prior effects:
Text("Hello").animate().scale(delay: 200.ms, duration: 400.ms)
.callback(callback: (_) => print('scale is done'))
ListenEffect
lets you register a callback to receive the animation value (as a double
) for a given delay, duration, curve, begin, and end.
Text("Hello").animate().fadeIn(curve: Curves.easeOutExpo)
.listen(callback: (value) => print('current opacity: $value'))
The above example works, because the listen effect inherits duration and curve from the fade, and both use begin=0, end=1
by default.
Adapters and Controllers
By default, all animations are driven by an internal AnimationController
, and update based on elapsed time. For more control, you can specify your own external controller
, or use an adapter
. You can also set autoPlay=false
if you want to start the animation manually.
Adapters synchronize the AnimationController
to an external source. For example, the ScrollAdapter
updates an animation based on a ScrollController
so you can run complex animations based on scroll interactions.
You still define animations using durations, but the external source must provide a 0-1
value.
Flutter Animate ships with a collection of useful adapters. Check them out for more information.
Reacting to State Changes
Animate
can react to state changes similar to "Animated" widgets (ex. AnimatedOpacity
). Simply set up your animation normally, but set a target
value. When the value of target
changes, it will automatically animate to the new target position (where 0
is the beginning and 1
is the end).
For example, combined with logic that toggles _over
via setState
, this will fade and scale the button on roll over:
MyButton().animate(target: _over ? 1 : 0)
.fade(end: 0.8).scaleXY(end: 1.1)
Testing Animations
When testing animations, you can set Animate.restartOnHotReload=true
which will cause all animations to automatically restart every time you hot reload your app.
Installation
Grab it from pub.dev.
Run this command:
With Flutter:
$ flutter pub add flutter_animate
This will add a line like this to your package's pubspec.yaml (and run an implicit flutter pub get
):
dependencies:
flutter_animate: ^4.1.1+1
Alternatively, your editor might support flutter pub get
. Check the docs for your editor to learn more.
Now in your Dart code, you can use:
import 'package:flutter_animate/flutter_animate.dart';
import 'package:example/examples/everything_view.dart';
import 'package:flutter/material.dart';
import 'examples/adapter_view.dart';
import 'examples/info_view.dart';
import 'examples/playground_view.dart';
import 'examples/visual_view.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(
title: 'Flutter Animate Demo',
debugShowCheckedModeBanner: false,
home: FlutterAnimateExample(),
);
}
}
// this is a very quick and dirty example.
class FlutterAnimateExample extends StatefulWidget {
const FlutterAnimateExample({Key? key}) : super(key: key);
static final List<TabInfo> tabs = [
TabInfo(Icons.info_outline, (_) => InfoView(key: UniqueKey()), 'Info',
'Simple example of Widget & List animations.'),
TabInfo(Icons.palette_outlined, (_) => VisualView(key: UniqueKey()),
'Visual', 'Visual effects like saturation, tint, & blur.'),
TabInfo(Icons.format_list_bulleted, (_) => const AdapterView(), 'Adapters',
'Animations driven by scrolling & user input.'),
TabInfo(Icons.grid_on_outlined, (_) => const EverythingView(),
'Kitchen Sink', 'Grid view of effects with default settings.'),
TabInfo(Icons.science_outlined, (_) => TestView(key: UniqueKey()),
'Sandbox', 'A blank canvas for experimenting.'),
];
@override
State<FlutterAnimateExample> createState() => _FlutterAnimateExampleState();
}
class _FlutterAnimateExampleState extends State<FlutterAnimateExample> {
int _viewIndex = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: const Color(0xFF404349),
bottomNavigationBar: BottomNavigationBar(
currentIndex: _viewIndex,
selectedFontSize: 12,
unselectedFontSize: 12,
selectedItemColor: const Color(0xFF80DDFF),
unselectedItemColor: const Color(0x998898A0),
showSelectedLabels: false,
showUnselectedLabels: false,
type: BottomNavigationBarType.fixed,
backgroundColor: const Color(0xFF2A2B2F),
elevation: 0,
onTap: (index) => setState(() => _viewIndex = index),
items: [
for (final tab in FlutterAnimateExample.tabs)
BottomNavigationBarItem(
icon: Icon(tab.icon),
label: tab.label,
)
],
),
body: DefaultTextStyle(
style: const TextStyle(
color: Color(0xFFCCCDCF),
fontSize: 14,
height: 1.5,
),
child: SafeArea(
bottom: false,
child: FlutterAnimateExample.tabs[_viewIndex].builder(context),
),
),
);
}
}
class TabInfo {
const TabInfo(this.icon, this.builder, this.label, this.description);
final IconData icon;
final WidgetBuilder builder;
final String label;
final String description;
}
Download Details:
Author: gskinner.com
Source Code: https://github.com/gskinner/flutter_animate
1625663340
In this video tutorial, we are going to build a simple animation using flutter. In this animation, two circle containers overlap each other, the animation will separate these circles and make it look like a single container is cloning itself.
Source code: https://github.com/Flutter-Zone/Cloning-Animation
Let’s start our animation app. :)
#flutter #animations in flutte #cloning animation #animations
1624291080
In Python, plotting graphs is straightforward — you can use powerful libraries like Matplotlib. But when you are running simulations, basic plots may not always be enough. You may want to show an animation that helps you understand how the state changes over time.
Luckily, it’s just as easy to create animations as it is to create plots with Matplotlib.
In this guide, you are going to learn:
Matplotlib is a commonly used visualization library in Python. You can plot interactive graphs, histograms, bar charts, and so on.
#coding #python #python animations with matplotlib #animations with matplotlib #matplotlib #python animations