我正在寻找一种可以从列表中添加和删除的项目。
我要寻找的是带有+图标和-图标,并在两个图标之间进行动画处理,以提供干净流畅的外观。
我有以下代码
Container(
padding: EdgeInsets.fromLTRB(0, 0, 20, 0),
child: AnimatedIcon(
icon: AnimatedIcons.home_menu,
progress: _animationController,
color: Colors.white,
))
使用
void _handleOnPressed() {
setState(() {
isPlaying = !isPlaying;
isPlaying
? _animationController.forward()
: _animationController.reverse();
});
}
这对于抖动中内置的动画图标来说很好。
我希望使用+和-图标,但外观相同。
有没有办法做到这一点?
答案 0 :(得分:2)
您好运,我的朋友! Flutter已经为您覆盖了AnimatedIcon()
AnimatedIcon Class in the docs
Animated Icon Widget of the week Video
现在可以使用Flare对图标进行动画处理。 Jeff Delaney为此做了一个很好的教程。
https://fireship.io/lessons/animated-navigation-flutter-flare/
答案 1 :(得分:2)
class _CreatePackageViewState extends State<CreatePackageView>
with SingleTickerProviderStateMixin {
bool expanded = true;
AnimationController controller;
@override
void initState() {
super.initState();
controller = AnimationController(
vsync: this,
duration: Duration(milliseconds: 400),
reverseDuration: Duration(milliseconds: 400),
);
}
IconButton(
icon: AnimatedIcon(
icon: AnimatedIcons.menu_close,
progress: controller,
semanticLabel: 'Show menu',
),
onPressed: () {
setState(() {
expanded ? controller.forward() : controller.reverse();
expanded = !expanded;
});
}),
}
答案 2 :(得分:0)
您需要自定义动画3件事情
下面简单实例
import 'package:flutter/material.dart';
class AnimationsPractice extends StatefulWidget {
@override
_AnimationsPracticeState createState() => _AnimationsPracticeState();
}
class _AnimationsPracticeState extends State<AnimationsPractice> with SingleTickerProviderStateMixin {
AnimationController controller;
Animation animation;
@override
void initState() {
super.initState();
controller = AnimationController(
duration: Duration(milliseconds: 500),
vsync: this);
animation = ColorTween(begin: Colors.purple, end: Colors.red[700]).animate(controller);
controller.forward();
animation.addStatusListener((status) {
if(status == AnimationStatus.completed){
controller.reverse(from: 1.0);
print(animation.value);
}
else if(status == AnimationStatus.dismissed){
controller.forward();
}
});
controller.addListener(() {
setState(() {
});
print(controller.value);
});
}
@override
void dispose() {
super.dispose();
controller.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.yellow,
appBar: AppBar(
title: Text('Heart Beat'),
),
body: Center(
child: Icon(
Icons.favorite,
size: animation.value * 100,
),
),
);
}
}