【发布时间】:2021-10-20 14:12:16
【问题描述】:
您好,我正在尝试将一些图标正确对齐在一条直线上,但由于某种原因,其中一个图标略低于另一个图标,我无法弄清楚为什么您可以看到下面的图片以获取更多关于我的意思是不正确的对齐。还有收藏按钮和主窗口小部件的代码。
心形按钮代码:
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
class FavoriteButton extends StatefulWidget {
FavoriteButton({
double iconSize,
Color iconColor,
Color iconDisabledColor,
bool isFavorite,
Color defaultFavoritedValue,
@required Function valueChanged,
Key key,
}) : _iconSize = iconSize ?? 60.0,
_iconColor = iconColor ?? Colors.pink,
_iconDisabledColor = iconDisabledColor ?? Colors.blue,
_isFavorite = isFavorite ?? false,
_valueChanged = valueChanged,
super(key: key);
final double _iconSize;
final Color _iconColor;
final bool _isFavorite;
final Function _valueChanged;
final Color _iconDisabledColor;
@override
_FavoriteButtonState createState() => _FavoriteButtonState();
}
class _FavoriteButtonState extends State<FavoriteButton>
with TickerProviderStateMixin {
AnimationController _controller;
Animation<Color> _colorAnimation;
CurvedAnimation _curve;
final int _animationTime = 125;
bool _isFavorite = false;
bool _isAnimationCompleted = false;
@override
void initState() {
super.initState();
_isFavorite = widget._isFavorite;
_controller = AnimationController(
vsync: this,
duration: Duration(milliseconds: _animationTime),
);
_curve = CurvedAnimation(curve: Curves.slowMiddle, parent: _controller);
Animation<Color> _selectedColorAnimation = ColorTween(
begin: widget._iconColor,
end: widget._iconDisabledColor,
).animate(_curve);
Animation<Color> _deSelectedColorAnimation = ColorTween(
begin: widget._iconDisabledColor,
end: widget._iconColor,
).animate(_curve);
_colorAnimation = (_isFavorite == true)
? _selectedColorAnimation
: _deSelectedColorAnimation;
_controller.addStatusListener((status) {
if (status == AnimationStatus.completed) {
_isAnimationCompleted = true;
_isFavorite = !_isFavorite;
widget._valueChanged(_isFavorite);
} else if (status == AnimationStatus.dismissed) {
_isAnimationCompleted = false;
_isFavorite = !_isFavorite;
widget._valueChanged(_isFavorite);
}
});
}
@override
void dispose() {
super.dispose();
_controller.dispose();
}
@override
Widget build(BuildContext context) {
return AnimatedBuilder(
animation: _controller,
builder: (BuildContext context, _) {
return InkResponse(
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
onTap: () {
setState(() {
if (_isAnimationCompleted == true) {
_controller.reverse();
} else {
_controller.forward();
}
});
},
child: Icon(
Icons.favorite,
color: _colorAnimation.value,
size: 35,
),
);
},
);
}
}
主小部件
Align(
alignment: Alignment.topLeft,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Column(
children: [
FavoriteButton(
iconDisabledColor: Theme.of(context).indicatorColor,
isFavorite: widget.snapshot,
),
Text("00" + widget.widget.item["likes"].toString(),
style: TextStyle(fontFamily: "SemiBold", fontSize: 16))
],
),
if (widget.widget._no_loop == false) ...[
Padding(padding: EdgeInsets.only(left: 15)),
Column(
children: [
Align(
alignment: Alignment.topLeft,
child: IconButton(
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
hoverColor: Colors.transparent,
icon: Icon(
Icons.message,
color: Theme.of(context).indicatorColor,
size: 32,
),
color: Colors.transparent,
),
),
Text("000",
style: TextStyle(fontFamily: "SemiBold", fontSize: 16))
],
),
]
],
),
);
【问题讨论】:
标签: flutter user-interface alignment