Kolor trzepotania nie zmienia się przy zmianie indeksu
Dec 01 2020
Chcę zmienić kolor na kranie pojemnika. Więc po prostu pętla pokazuje kontener i zmienia kolor, gdy indeks jest taki sam. Ale problem polega na tym, że indeks się zmienia, ale kolor nie. Sprawdziłem, czy wartość wydruku currentIndex się zmienia, ale nie wiem, dlaczego kolor się nie zmienia Używam widgetu stanowego
Kod
List categories = [
{'CatID': 0, 'CatName': 'All'},
{'CatID': 1, 'CatName': 'Computer Hardware'},
{'CatID': 2, 'CatName': 'Computer Software'},
{'CatID': 3, 'CatName': 'Internet'},
{'CatID': 4, 'CatName': 'Windows Installation'},
];
List<Widget> CatWidget = List<Widget>(); // Here we defined a list of widget!
class ShopScreen extends StatefulWidget {
@override
_ShopScreenState createState() => _ShopScreenState();
}
class _ShopScreenState extends State<ShopScreen> {
int currentindex = 0;
@override
Widget build(BuildContext context) {
double statusBarHeight = MediaQuery.of(context).padding.top;
double Height = MediaQuery.of(context).size.height;
double Width = MediaQuery.of(context).size.width;
for (int i = 0; i < categories.length; i++) {
CatWidget.add(
GestureDetector(
onTap: () {
setState(() {
// set current index!
currentindex = i;
print(currentindex);
});
},
child: Container(
child: Padding(
padding: const EdgeInsets.only(left: 10),
child: Container(
height: Height * 0.04,
decoration: BoxDecoration(
color: currentindex == i
? Color(0xff04385f)
: Colors.white, // Here we checked!,
border: Border.all(color: Colors.grey[300]),
borderRadius: BorderRadius.all(Radius.circular(10))),
child: Center(
child: Text(
categories[i]['CatName'],
style: TextStyle(
fontSize: 10,
color: currentindex == i ? Colors.white : Colors.grey,
fontFamily: 'UbuntuRegular'),
)),
),
),
),
),
);
}
Odpowiedzi
3 UmaizKhan Dec 01 2020 at 09:13
Zmień swój widżet listy w ten sposób
final CatWidget = <Widget>[];
Sprawdziłem kod, czy działa dobrze, po prostu zdefiniuj widżet w ten sposób i definiuję tuż nad pętlą for w budowaniu widgetu.
Ostateczny kod wygląda następująco
class ShopScreen extends StatefulWidget {
@override
_ShopScreenState createState() => _ShopScreenState();
}
class _ShopScreenState extends State<ShopScreen> {
int currentindex = 0;
@override
Widget build(BuildContext context) {
double statusBarHeight = MediaQuery.of(context).padding.top;
double Height = MediaQuery.of(context).size.height;
double Width = MediaQuery.of(context).size.width;
final CatWidget = <Widget>[]; // Here we defined a list of widget!
for (int i = 0; i < categories.length; i++) {
CatWidget.add(
GestureDetector(
onTap: () {
setState(() {
// set current index!
currentindex = i;
print(currentindex);
});
},
child: Container(
child: Padding(
padding: const EdgeInsets.only(left: 10),
child: Container(
height: Height * 0.04,
decoration: BoxDecoration(
color: currentindex == i
? Color(0xff04385f)
: Colors.white, // Here we checked!,
border: Border.all(color: Colors.grey[300]),
borderRadius: BorderRadius.all(Radius.circular(10))),
child: Center(
child: Text(
categories[i]['CatName'],
style: TextStyle(
fontSize: 10,
color: currentindex == i ? Colors.white : Colors.grey,
fontFamily: 'UbuntuRegular'),
)),
),
),
),
),
);
}