rank_stars.dart 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import 'package:flutter/material.dart';
  2. import 'package:twong/utils/index.dart';
  3. class RankStars extends StatefulWidget {
  4. final int max;
  5. final Color color;
  6. final Widget header;
  7. final int value;
  8. final Function(int) onChange;
  9. RankStars(this.max, {this.color = Colors.black, this.onChange,
  10. this.header, this.value = -1});
  11. @override
  12. State<StatefulWidget> createState() {
  13. return _RankStarsState();
  14. }
  15. }
  16. class _RankStarsState extends State<RankStars> {
  17. int current = 0;
  18. @override
  19. void initState() {
  20. current = widget.value;
  21. super.initState();
  22. }
  23. @override
  24. Widget build(BuildContext context) {
  25. List<Widget> widgets = List<Widget>();
  26. if(widget.header != null) {
  27. widgets.add(widget.header);
  28. }
  29. for(var i = 0; i < widget.max; i ++) {
  30. widgets.add(InkWell(
  31. onTap: () => _onTap(i),
  32. child: Container(
  33. margin: EdgeInsets.only(left: 6.px),
  34. child: i > current ? Icon(Icons.star_border, color: widget.color)
  35. : Icon(Icons.star, color: widget.color),
  36. ),
  37. ));
  38. }
  39. return Row(children: widgets);
  40. }
  41. void _onTap(int idx) {
  42. setState(() {
  43. current = idx;
  44. });
  45. widget.onChange?.call(current);
  46. }
  47. }