我对颤动和特别颤动的动画还很陌生。我正在创建一个自定义滑块,该滑块接受URL列表并从该URL创建NetworkImages。我也有一些根据显示的图像而变化的点指示器。如何为图像过渡和点过渡设置动画?
到目前为止,这是我的代码:
import 'package:flutter/material.dart';
class CustomSlider extends StatefulWidget {
final List<String> imageList;
CustomSlider({this.imageList});
@override
_CustomSliderState createState() => _CustomSliderState();
}
class _CustomSliderState extends State<CustomSlider> {
int photoIndex = 0;
void _previousImage() {
setState(() {
photoIndex = photoIndex > 0 ? photoIndex - 1 : 0;
});
}
void _nextImage() {
setState(() {
photoIndex = photoIndex < widget.imageList.length - 1
? photoIndex + 1
: photoIndex;
});
}
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Center(
child: Stack(
children: <Widget>[
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25.0),
image: DecorationImage(
image: NetworkImage(widget.imageList[photoIndex]),
fit: BoxFit.cover)),
height: 400.0,
width: 300.0,
),
Positioned(
top: 375.0,
left: 25.0,
right: 25.0,
child: SelectedPhoto(numberOfDots: widget.imageList.length, photoIndex: photoIndex),
)
],
),
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton(
child: Text('Next'),
onPressed: _nextImage,
elevation: 5.0,
color: Colors.green,
),
SizedBox(width: 10.0),
RaisedButton(
child: Text('Prev'),
onPressed: _previousImage,
elevation: 5.0,
color: Colors.blue,
)
],
)
],
);
}
}
class SelectedPhoto extends StatelessWidget {
final int numberOfDots;
final int photoIndex;
SelectedPhoto({this.numberOfDots, this.photoIndex});
Widget _inactivePhoto() {
return new Container(
child: new Padding(
padding: const EdgeInsets.only(left: 3.0, right: 3.0),
child: Container(
height: 8.0,
width: 8.0,
decoration: BoxDecoration(
color: Colors.grey,
borderRadius: BorderRadius.circular(4.0)
),
),
)
);
}
Widget _activePhoto() {
return Container(
child: Padding(
padding: EdgeInsets.only(left: 3.0, right: 3.0),
child: Container(
height: 10.0,
width: 10.0,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(5.0),
boxShadow: [
BoxShadow(
color: Colors.grey,
spreadRadius: 0.0,
blurRadius: 2.0
)
]
),
),
),
);
}
List<Widget> _buildDots() {
List<Widget> dots = [];
for(int i = 0; i< numberOfDots; ++i) {
dots.add(
i == photoIndex ? _activePhoto(): _inactivePhoto()
);
}
return dots;
}
@override
Widget build(BuildContext context) {
return new Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: _buildDots(),
),
);
}
}
我希望图像过渡淡入淡出,并使点过渡像这样:
https://cdn.dribbble.com/users/563824/screenshots/2658319/untitled-28.gif
有什么想法吗?