📅  最后修改于: 2023-12-03 14:58:47.091000             🧑  作者: Mango
在 Flutter 中,我们可以使用 AppBar 组件来创建一个带有标题的顶部工具栏。默认情况下,AppBar 的标题文本放置在居中位置,但有时我们想要增加一些动态效果来吸引用户的注意力。本文将介绍如何给 AppBar 中心的文本增加颤动效果。
我们想要实现的效果是让 AppBar 中心的文本以一定频率颤动。当用户看到颤动的文本时,会更容易注意到应用程序的标题。
我们将使用 Flutter 的动画功能和 Transform 组件来实现颤动效果。
import 'package:flutter/material.dart';
import 'dart:math';
class ShakingAppBarTitle extends StatefulWidget {
@override
_ShakingAppBarTitleState createState() => _ShakingAppBarTitleState();
}
class _ShakingAppBarTitleState extends State<ShakingAppBarTitle>
with SingleTickerProviderStateMixin {
AnimationController _animationController;
Animation<double> _animation;
bool _isShaking = false;
final double _shakeRange = 5.0;
final int _shakeDuration = 500;
final int _shakeFrequency = 1000;
}
@override
void initState() {
super.initState();
_animationController = AnimationController(
vsync: this,
duration: Duration(milliseconds: _shakeDuration),
)..addListener(() {
setState(() {}); // 更新视图
});
_animation = Tween(begin: -1.0, end: 1.0).animate(
CurvedAnimation(
parent: _animationController,
curve: Curves.easeInOut,
),
)..addStatusListener((AnimationStatus status) {
if (status == AnimationStatus.completed) {
// 动画完成后开始下一次颤动
_animationController.repeat(
period: Duration(milliseconds: _shakeFrequency),
reverse: true,
);
}
});
}
@override
void dispose() {
_animationController.dispose();
super.dispose();
}
void _startShaking() {
if (!_isShaking) {
_animationController.forward();
_isShaking = true;
}
}
appBar: AppBar(
title: AppBarTitle(),
),
...
class AppBarTitle extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Transform.translate(
offset: Offset(
_animation.value * _shakeRange,
0.0,
),
child: Text('颤动 AppBar 中心文本'),
);
}
}
_startShaking
方法即可。例如,可以在 initState 或按钮点击事件中调用该方法。offset
属性来控制位移效果。setState((){})
方法。以上就是如何给 AppBar 中心文本增加颤动效果的方法。你可以根据自己的需要进行调整和优化,让应用程序的标题更加吸引人。