|
|
|
import 'package:flutter/cupertino.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
|
|
|
class RectIndicator extends StatelessWidget {
|
|
|
|
final int position;
|
|
|
|
final int count;
|
|
|
|
final Color color;
|
|
|
|
final Color activeColor;
|
|
|
|
final double width;
|
|
|
|
final double activeWidth;
|
|
|
|
final double height;
|
|
|
|
final double radius;
|
|
|
|
|
|
|
|
RectIndicator({
|
|
|
|
Key? key,
|
|
|
|
this.width: 50.0,
|
|
|
|
this.activeWidth: 50.0,
|
|
|
|
this.height: 4,
|
|
|
|
required this.position,
|
|
|
|
required this.count,
|
|
|
|
this.color: Colors.white,
|
|
|
|
required this.radius,
|
|
|
|
this.activeColor: const Color(0xFF3E4750),
|
|
|
|
}) : assert(count != null && position != null),
|
|
|
|
super(key: key);
|
|
|
|
|
|
|
|
_indicator(bool isActive) {
|
|
|
|
return AnimatedContainer(
|
|
|
|
margin: EdgeInsets.symmetric(horizontal: 3.0),
|
|
|
|
//指示器间距
|
|
|
|
height: height,
|
|
|
|
width: isActive ? activeWidth : width,
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
color: isActive ? color : activeColor,
|
|
|
|
boxShadow: [
|
|
|
|
BoxShadow(
|
|
|
|
color: Colors.black12,
|
|
|
|
offset: Offset(0.0, 2.0),
|
|
|
|
blurRadius: 0.0)
|
|
|
|
],
|
|
|
|
borderRadius: BorderRadius.circular(radius)),
|
|
|
|
duration: Duration(milliseconds: 150),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
_buildPageIndicators() {
|
|
|
|
List<Widget> indicatorList = [];
|
|
|
|
for (int i = 0; i < count; i++) {
|
|
|
|
indicatorList.add(i == position ? _indicator(true) : _indicator(false));
|
|
|
|
}
|
|
|
|
return indicatorList;
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
return Row(
|
|
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
|
|
children: _buildPageIndicators(),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|