我想为容器的边框设置动画效果,并在颤动中产生发光效果,你有什么主意吗?
答案 0 :(得分:2)
下面的代码将对边框的宽度进行动画处理
class Test extends StatefulWidget {
@override
_TestState createState() => _TestState();
}
class _TestState extends State<Test> with TickerProviderStateMixin {
AnimationController _resizableController;
AnimatedBuilder getContainer() {
return new AnimatedBuilder(
animation: _resizableController,
builder: (context, child) {
return Container(
padding: EdgeInsets.all(24),
child: Text("SAMPLE"),
decoration: BoxDecoration(
shape: BoxShape.rectangle,
borderRadius: BorderRadius.all(Radius.circular(12)),
border: Border.all(
color: Colors.blue, width: _resizableController.value * 10),
),
);
});
}
@override
void initState() {
_resizableController = new AnimationController(
vsync: this,
duration: new Duration(
milliseconds: 1000,
),
);
_resizableController.addStatusListener((animationStatus) {
switch (animationStatus) {
case AnimationStatus.completed:
_resizableController.reverse();
break;
case AnimationStatus.dismissed:
_resizableController.forward();
break;
case AnimationStatus.forward:
break;
case AnimationStatus.reverse:
break;
}
});
_resizableController.forward();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
title: Text("Test"),
centerTitle: true,
),
body: Center(child: getContainer()));
}
}
答案 1 :(得分:1)
感谢Lakhwinder Singh,我编写了这段代码,它确实产生了我要求的发光效果:
import 'package:flutter/material.dart';
void main() {
runApp(new Test());
}
class Test extends StatefulWidget {
@override
_TestState createState() => _TestState();
}
class _TestState extends State<Test> with TickerProviderStateMixin {
AnimationController _resizableController;
static Color colorVariation(int note){
if(note <= 1){
return Colors.blue[50];
}else if(note>1 && note<=2){
return Colors.blue[100];
}else if(note>2 && note<=3){
return Colors.blue[200];
}else if(note>3 && note<=4){
return Colors.blue[300];
}else if(note>4 && note<=5){
return Colors.blue[400];
}else if(note>5 && note<=6){
return Colors.blue;
}else if(note>6 && note<=7){
return Colors.blue[600];
}else if(note>7 && note<=8){
return Colors.blue[700];
}else if(note>8 && note<=9){
return Colors.blue[800];
}else if(note>9 && note<=10){
return Colors.blue[900];
}
}
AnimatedBuilder getContainer() {
return new AnimatedBuilder(
animation: _resizableController,
builder: (context, child) {
return Container(
//color: colorVariation((_resizableController.value *100).round()),
padding: EdgeInsets.all(24),
child: Text("SAMPLE"),
decoration: BoxDecoration(
shape: BoxShape.rectangle,
borderRadius: BorderRadius.all(Radius.circular(12)),
border: Border.all(
color: colorVariation((_resizableController.value *10).round()), width:10),
),
);
});
}
@override
void initState() {
_resizableController = new AnimationController(
vsync: this,
duration: new Duration(
milliseconds: 500,
),
);
_resizableController.addStatusListener((animationStatus) {
switch (animationStatus) {
case AnimationStatus.completed:
_resizableController.reverse();
break;
case AnimationStatus.dismissed:
_resizableController.forward();
break;
case AnimationStatus.forward:
break;
case AnimationStatus.reverse:
break;
}
});
_resizableController.forward();
super.initState();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home:Scaffold(
backgroundColor: Colors.white,
body: Center(child: getContainer())));
}
}