Как обновить состояние, когда пользователь что-то делает?
В моем коде пользователь может добавить
DataRows
к
DataTable
. Все DataRows сохраняются в списке. Этот список я использую в другом классе, где показываю данные списка. Проблема в том, что когда пользователь добавляет строку, пользовательский интерфейс не обновляется, поэтому пользователь не видит новую добавленную строку DataRow. Как я могу обновить пользовательский интерфейс после того, как пользователь добавит новый DataRow?
class ExerciseTable extends StatefulWidget {
ExerciseTable({Key key, this.title}) : super(key: key);
final String title;
@override
_ExerciseTableState createState() => _ExerciseTableState();
}
class _ExerciseTableState extends State<ExerciseTable> {
ExerciseDataSource _rowsDataSource;
@override
void initState() {
_rowsDataSource = ExerciseDataSource(list: _rowList);
super.initState();
}
List<DataRow> _rowList = [
DataRow(cells: <DataCell>[
DataCell(Datum(key: GlobalKey())),
DataCell(ExerciseWidget(key: GlobalKey())),
DataCell(ExerciseWidget(key: GlobalKey())),
DataCell(ExerciseWidget(key: GlobalKey())),
DataCell(ExerciseWidget(key: GlobalKey())),
DataCell(ExerciseWidget(key: GlobalKey())),
DataCell(ExerciseWidget(key: GlobalKey())),
DataCell(Notes(key: GlobalKey())),
]),
];
class ExerciseDataSource extends DataTableSource {
ExerciseDataSource({Key key, this.list});
final List<DataRow> list;
int _selectedCount = 0;
@override
int get rowCount => list.length;
@override
bool get isRowCountApproximate => false;
@override
int get selectedRowCount => _selectedCount;
@override
DataRow getRow(int index) {
return DataRow.byIndex(
index: index,
cells: <DataCell>[
DataCell(Datum(key: GlobalKey())),
DataCell(ExerciseWidget(key: GlobalKey())),
DataCell(ExerciseWidget(key: GlobalKey())),
DataCell(ExerciseWidget(key: GlobalKey())),
DataCell(ExerciseWidget(key: GlobalKey())),
DataCell(ExerciseWidget(key: GlobalKey())),
DataCell(ExerciseWidget(key: GlobalKey())),
DataCell(Notes(key: GlobalKey())),
]);
}
}
2 ответа
ЧТОБЫ обновлять пользовательский интерфейс, когда пользователь делает что-то, что вам следует использовать
setState
метод
для получения дополнительной информации проверьте setState
Во-первых, ваш пользователь должен инициировать событие. Например, у вас есть
GestureDetector
виджет .
Таким образом, вы можете, когда пользователь инициирует событие, позвонить
setState
: