Вы уже на правильном пути, но похоже, что вы управляете состоянием всех элементов списка в одном и том же StatefulWidget .
Вместо этого вы просто нужно разделить их так, чтобы каждый из ваших пользовательских ListTile имел его состояние. Загрузка данных может происходить в родительском компоненте вашей самостоятельной сборки ListTile
.
Я предоставлю вам небольшой пример приложения. Следующий пример не использует Firebase, но для применения этих изменений в вашем приложении не должно возникнуть никаких проблем.
Вам просто нужно выполнить выборку данных внутри родительского компонента и передать параметр score
вашего пример для MyListTile
- так же, как заголовок в примере ниже.
Это сам по себе runnablbe, вы можете просто скопировать его в пустой проект Flutter:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
MyListTile(title: 'First'),
MyListTile(title: 'Second'),
MyListTile(title: 'Third'),
],
),
),
);
}
}
class MyListTile extends StatefulWidget {
final String title;
MyListTile({this.title});
@override
_MyListTileState createState() => _MyListTileState();
}
class _MyListTileState extends State<MyListTile> {
int status = 0;
get tileColor {
switch(status) {
case 0: {
return Colors.white;
}
case 1: {
return Colors.green;
}
default: {
return Colors.red;
}
}
}
@override
Widget build(BuildContext context) {
return Container(
color: tileColor,
child: ListTile(
title: Text(widget.title),
subtitle: Text('Status: $status'),
onTap: () => setState(() {
status++;
}),
),
);
}
}