Я строю календарь с вертикальной прокруткой, и я реализовал свои дни как несколько SliverList
с, чтобы я мог начать с определенного дня, сосредоточенного, при этом все еще есть дни в прошлом и будущем.
Проблема в том, что когда focusDate
изменяется посредством изменения состояния в родительском элементе, список корректно обновляет даты, но сохраняет свою позицию прокрутки.Например, если я прокручиваюсь до верхней части списка, то измените focusDate
обновление дней, но я все еще наверху списка.
Я ищу, чтобы полностью заменитьсписок (не только дни), когда меняется focusDate
.Это происходит, когда дата выбирается из выбора даты.Таким образом, в любом случае необходимо будет получать новые данные, а новый CustomScrollView
можно создать и сфокусировать на правильном дне.
import 'package:flutter/material.dart';
import 'day.dart';
class DaysManager extends StatelessWidget {
List<Day> days;
DaysManager({DateTime focusDate}) {
final DateTime startDate = focusDate.subtract(Duration(days: 30));
days = List.generate(61, (int index) {
return Day(
date: startDate.add(Duration(days: index)),
);
});
}
@override
Widget build(BuildContext context) {
return _buildScrollView();
}
CustomScrollView _buildScrollView() {
final focusKey = ValueKey('focus');
return CustomScrollView(
center: focusKey,
slivers: <Widget>[
SliverList(
delegate: SliverChildListDelegate(
days.sublist(0, 31).reversed.toList(),
),
),
SliverList(
key: focusKey,
delegate: SliverChildListDelegate(
days.sublist(31, 32),
),
),
SliverList(
delegate: SliverChildListDelegate(
days.sublist(32),
),
),
],
);
}
}