Warna flutter tidak mempengaruhi perubahan indeks
Dec 01 2020
Saya ingin mengubah warna pada keran wadah. Jadi saya hanya untuk loop untuk menunjukkan wadah dan mengubah warna ketika indeks sama. Tetapi masalahnya adalah indeks berubah tetapi warnanya tidak. Saya telah memeriksa dengan nilai cetak currentIndex berubah tetapi tidak tahu mengapa warnanya tidak berubah Saya menggunakan widget stateful
Kode
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'),
)),
),
),
),
),
);
}
Jawaban
3 UmaizKhan Dec 01 2020 at 09:13
Ubah Widget Daftar Anda seperti ini
final CatWidget = <Widget>[];
Saya telah memeriksa kode yang berfungsi dengan baik, cukup tentukan Widget seperti ini dan saya tentukan tepat di atas for loop di Widget Build.
Kode terakhir terlihat seperti ini
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'),
)),
),
),
),
),
);
}
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'