2017-10-10 24 views
1

Faire une rangée d'étoiles est trivial, mais je ne suis pas sûr de la manière correcte d'en faire un nombre aléatoire.Comment faire un nombre aléatoire d'étoiles? (rating)

En d'autres termes, disons que j'ai un maximum de 5 étoiles pour un classement, comment faire, juste une ou deux étoiles? Je pourrais avoir une instruction switch, et retourner le widget de ligne approprié avec une ou deux étoiles, mais cela semble être une façon laide de le faire. Y a-t-il une bonne façon Flutter/Dart pour faire ce genre de chose?

(ma question est non seulement au sujet de ce bien sûr, je veux trouver la méthode de flottement correcte de faire ce genre de chose)

+0

Je ne sais pas comment cela pertinent à votre question, mais j'ai posé une question similaire ici, peut-être vous aider à: https: // stackoverflow.com/questions/46637566/how-to-create-rating-star-bar-properly/46645766#46645766 – aziza

+0

Va le chercher ..... – SirPaulMuaddib

Répondre

1

En répondant à cette question: How to create rating star bar properly?

En même temps, je a donné un exemple d'un widget d'évaluation des étoiles qui peut fonctionner avec n'importe quel nombre d'étoiles (5 par défaut).

typedef void RatingChangeCallback(double rating); 

class StarRating extends StatelessWidget { 
    final int starCount; 
    final double rating; 
    final RatingChangeCallback onRatingChanged; 
    final Color color; 

    StarRating({this.starCount = 5, this.rating = .0, this.onRatingChanged, this.color}); 

    Widget buildStar(BuildContext context, int index) { 
    Icon icon; 
    if (index >= rating) { 
     icon = new Icon(
     Icons.star_border, 
     color: Theme.of(context).buttonColor, 
    ); 
    } 
    else if (index > rating - 1 && index < rating) { 
     icon = new Icon(
     Icons.star_half, 
     color: color ?? Theme.of(context).primaryColor, 
    ); 
    } else { 
     icon = new Icon(
     Icons.star, 
     color: color ?? Theme.of(context).primaryColor, 
    ); 
    } 
    return new InkResponse(
     onTap: onRatingChanged == null ? null :() => onRatingChanged(index + 1.0), 
     child: icon, 
    ); 
    } 

    @override 
    Widget build(BuildContext context) { 
    return new Row(children: new List.generate(starCount, (index) => buildStar(context, index))); 
    } 
} 

Vous pouvez alors l'utiliser à l'aide

class Test extends StatefulWidget { 
    @override 
    _TestState createState() => new _TestState(); 
    } 

    class _TestState extends State<Test> { 
    double rating = 3.5; 

    @override 
    Widget build(BuildContext context) { 
     return new StarRating(
     rating: rating, 
     onRatingChanged: (rating) => setState(() => this.rating = rating), 
     starCount: 2 
    ); 
    } 
    }