Skip to content

Instantly share code, notes, and snippets.

@mortada-jafar
Last active June 21, 2019 05:59
Show Gist options
  • Save mortada-jafar/777d6f444da628540bbf2ffd59e4bb35 to your computer and use it in GitHub Desktop.
Save mortada-jafar/777d6f444da628540bbf2ffd59e4bb35 to your computer and use it in GitHub Desktop.
import 'package:flutter/material.dart';
class StarDisplayWidget extends StatelessWidget {
final int value;
final Widget filledStar;
final Widget unfilledStar;
final double size;
final Color color;
final int marginFactor;
const StarDisplayWidget({
Key key,
this.value = 0,
this.filledStar,
this.unfilledStar,
this.color = Colors.orange,
this.size = 20,
this.marginFactor = 5,
}) : assert(value != null),
super(key: key);
@override
Widget build(BuildContext context) {
return Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.end,
children: List.generate(5, (index) {
return Container(
width: size - size / marginFactor,
height: size,
child: Icon(
index < value
? filledStar ?? Icons.star
: unfilledStar ?? Icons.star_border,
color: color,
size: size,
),
);
}),
);
}
}
class StarRating extends StatelessWidget {
final void Function(int index) onChanged;
final int value;
final IconData filledStar;
final IconData unfilledStar;
final double size;
final Color color;
final int marginFactor;
const StarRating({
Key key,
@required this.onChanged,
this.value = 0,
this.filledStar,
this.unfilledStar,
this.color = Colors.orange,
this.size = 20,
this.marginFactor = 5,
}) : assert(value != null),
super(key: key);
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: List.generate(5, (index) {
return RawMaterialButton(
child: Icon(
index < value
? filledStar ?? Icons.star
: unfilledStar ?? Icons.star_border,
color: color,
size: size,
),
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
shape: CircleBorder(),
constraints: BoxConstraints.expand(
width: size - size / marginFactor, height: size),
padding: EdgeInsets.zero,
highlightColor: Colors.transparent,
splashColor: Colors.transparent,
onPressed: onChanged != null
? () {
onChanged(value == index + 1 ? index : index + 1);
}
: null,
);
}),
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment