【发布时间】:2019-10-13 13:26:08
【问题描述】:
我正在构建一个垂直滚动的日历,并且我已经将我的日子实现为多个 SliverLists,这样我就可以专注于某一天,同时仍然有过去和未来的日子。
问题是,当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),
),
),
],
);
}
}
【问题讨论】:
标签: flutter dart flutter-sliver