Fix DialogPicker bouncing when the first selected item is near the end

This commit is contained in:
Vadim 2023-11-14 12:17:01 +01:00
parent a526853ed5
commit 9fcca48f57

View file

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:lightmeter/generated/l10n.dart'; import 'package:lightmeter/generated/l10n.dart';
import 'package:lightmeter/res/dimens.dart'; import 'package:lightmeter/res/dimens.dart';
@ -34,18 +35,20 @@ class _DialogFilterState<T> extends State<DialogFilter<T>> {
bool get _hasAnySelected => checkboxValues.contains(true); bool get _hasAnySelected => checkboxValues.contains(true);
bool get _hasAnyUnselected => checkboxValues.contains(false); bool get _hasAnyUnselected => checkboxValues.contains(false);
late final ScrollController _scrollController; final ScrollController _scrollController = ScrollController();
@override @override
void initState() { void initState() {
super.initState(); super.initState();
SchedulerBinding.instance.addPostFrameCallback((_) {
int i = 0; int i = 0;
for (; i < checkboxValues.length; i++) { for (; i < checkboxValues.length; i++) {
if (checkboxValues[i]) { if (checkboxValues[i]) {
break; break;
} }
} }
_scrollController = ScrollController(initialScrollOffset: Dimens.grid56 * i); _scrollController.jumpTo((Dimens.grid56 * i).clamp(0, _scrollController.position.maxScrollExtent));
});
} }
@override @override