2017-10-10 29 views
1

做一排星星作爲評級是微不足道的,但我不確定什麼是正確的撲動方式做隨機數字?如何做隨機數的星星? (評級)

換句話說,我說最多5顆星的評分,我該怎麼辦,只有一兩顆星?我可以有一個switch語句,並返回一個或兩個星號的適當的行小部件,但這似乎是一個醜陋的方式來做到這一點。

是否有適當的顫振/飛鏢的方式來做這種事情?

(我的問題不只是這個過程中,我想找到做這種事情的正確撲方法)

+0

我不知道怎麼這個有關你的問題,但我在這裏問過類似的問題,也許它會幫助你: https://開頭stackoverflow.com/questions/46637566/how-to-create-rating-star-bar-properly/46645766#46645766 – aziza

+0

將看看它..... – SirPaulMuaddib

回答

1

通過回答這個問題:How to create rating star bar properly?

與此同時,我給出了一個可以與任意數量的明星(默認情況下爲5)一起使用的星級評估小部件的例子。

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))); 
    } 
} 

然後,您可以使用它使用

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 
    ); 
    } 
    }