Je suis en train de créer une barre d'étoiles pour avis des utilisateurs, l'image est du magasin de jeu pour illustrer ce que je suis en train de réaliser:Comment créer correctement une barre d'étoiles?
J'ai été en mesure de réaliser ce qui suit, qui est fonctionnel comme vous pouvez le voir, mais quand je regarde mon code, je sens qu'il doit y avoir une façon plus intelligente de le faire, et la partie vraiment ennuyeuse est que la zone d'impact IconButton
est décalée un peu, donc quand vous touchez l'étoile réelle ne s'enregistre pas en tant qu'événement tactile (ie: vous devez viser plus haut que l'endroit où le bouton est positionné pour que votre touche soit enregistrée, ce qui crée un mauvais UX) vous pouvez vérifier ce que je veux dire en gardant un oeil sur le splash effec t lorsque je clique sur l'une des étoiles:
var _myColorOne = Colors.grey;
var _myColorTwo = Colors.grey;
var _myColorThree = Colors.grey;
var _myColorFour = Colors.grey;
var _myColorFive = Colors.grey;
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("My Rating"),
),
body: new Center(
child: new Container(
height: 10.0,
width: 500.0,
child: new Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new IconButton(icon: new Icon(Icons.star),
onPressed:()=>setState((){
_myColorOne=Colors.orange;
_myColorTwo=null;
_myColorThree=null;
_myColorFour=null;
_myColorFive=null;
}),color: _myColorOne,),
new IconButton(icon: new Icon(Icons.star),
onPressed:()=>setState((){
_myColorOne=Colors.orange;
_myColorTwo=Colors.orange;
_myColorThree=Colors.grey;
_myColorFour=Colors.grey;
_myColorFive=Colors.grey;
}),color: _myColorTwo,),
new IconButton(icon: new Icon(Icons.star), onPressed:()=>setState((){
_myColorOne=Colors.orange;
_myColorTwo=Colors.orange;
_myColorThree=Colors.orange;
_myColorFour=Colors.grey;
_myColorFive=Colors.grey;
}),color: _myColorThree,),
new IconButton(icon: new Icon(Icons.star), onPressed:()=>setState((){
_myColorOne=Colors.orange;
_myColorTwo=Colors.orange;
_myColorThree=Colors.orange;
_myColorFour=Colors.orange;
_myColorFive=Colors.grey;
}),color: _myColorFour,),
new IconButton(icon: new Icon(Icons.star), onPressed:()=>setState((){
_myColorOne=Colors.orange;
_myColorTwo=Colors.orange;
_myColorThree=Colors.orange;
_myColorFour=Colors.orange;
_myColorFive=Colors.orange;
}),color: _myColorFive,),
],
),
),
),
);
}
Alors quelle est la meilleure approche ici?
Je ne suis pas sûr de ce que je devrais définir 'onRatingChanged:' à, afin d'activer la note en cliquant? – aziza
La plupart du temps, un '(rating) => setState (() => this.rating = rating)) 'devrait suffire – Darky
Pouvez-vous clarifier cela s'il vous plaît? n'est pas 'onRatingChanged' devrait être réglé à quelque chose comme ça' onRatingChanged: (RatingChangeCallback) => .... ' – aziza