collection/albums/countries/tags: fixed tile size on settings change
This commit is contained in:
parent
b704d72c9d
commit
a2ddae372b
7 changed files with 40 additions and 20 deletions
|
@ -189,9 +189,7 @@ class Settings extends ChangeNotifier {
|
||||||
|
|
||||||
double getTileExtent(String routeName) => _prefs!.getDouble(tileExtentPrefixKey + routeName) ?? 0;
|
double getTileExtent(String routeName) => _prefs!.getDouble(tileExtentPrefixKey + routeName) ?? 0;
|
||||||
|
|
||||||
// do not notify, as tile extents are only used internally by `TileExtentController`
|
void setTileExtent(String routeName, double newValue) => setAndNotify(tileExtentPrefixKey + routeName, newValue);
|
||||||
// and should not trigger rebuilding by change notification
|
|
||||||
void setTileExtent(String routeName, double newValue) => setAndNotify(tileExtentPrefixKey + routeName, newValue, notify: false);
|
|
||||||
|
|
||||||
// collection
|
// collection
|
||||||
|
|
||||||
|
@ -362,7 +360,7 @@ class Settings extends ChangeNotifier {
|
||||||
return _prefs!.getStringList(key)?.map((s) => values.firstWhereOrNull((v) => v.toString() == s)).where((v) => v != null).cast<T>().toList() ?? defaultValue;
|
return _prefs!.getStringList(key)?.map((s) => values.firstWhereOrNull((v) => v.toString() == s)).where((v) => v != null).cast<T>().toList() ?? defaultValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setAndNotify(String key, dynamic newValue, {bool notify = true}) {
|
void setAndNotify(String key, dynamic newValue) {
|
||||||
var oldValue = _prefs!.get(key);
|
var oldValue = _prefs!.get(key);
|
||||||
if (newValue == null) {
|
if (newValue == null) {
|
||||||
_prefs!.remove(key);
|
_prefs!.remove(key);
|
||||||
|
@ -382,7 +380,7 @@ class Settings extends ChangeNotifier {
|
||||||
oldValue = _prefs!.getBool(key);
|
oldValue = _prefs!.getBool(key);
|
||||||
_prefs!.setBool(key, newValue);
|
_prefs!.setBool(key, newValue);
|
||||||
}
|
}
|
||||||
if (oldValue != newValue && notify) {
|
if (oldValue != newValue) {
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,7 +65,7 @@ class CollectionLens with ChangeNotifier, CollectionActivityMixin {
|
||||||
..forEach((sub) => sub.cancel())
|
..forEach((sub) => sub.cancel())
|
||||||
..clear();
|
..clear();
|
||||||
favourites.removeListener(_onFavouritesChanged);
|
favourites.removeListener(_onFavouritesChanged);
|
||||||
settings.addListener(_onSettingsChanged);
|
settings.removeListener(_onSettingsChanged);
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,12 @@ class CollectionGrid extends StatefulWidget {
|
||||||
class _CollectionGridState extends State<CollectionGrid> {
|
class _CollectionGridState extends State<CollectionGrid> {
|
||||||
TileExtentController? _tileExtentController;
|
TileExtentController? _tileExtentController;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_tileExtentController?.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
_tileExtentController ??= TileExtentController(
|
_tileExtentController ??= TileExtentController(
|
||||||
|
|
|
@ -10,6 +10,7 @@ class TileExtentController {
|
||||||
final double spacing, extentMin, extentMax;
|
final double spacing, extentMin, extentMax;
|
||||||
final ValueNotifier<double> extentNotifier = ValueNotifier(0);
|
final ValueNotifier<double> extentNotifier = ValueNotifier(0);
|
||||||
|
|
||||||
|
late double userPreferredExtent;
|
||||||
Size _viewportSize = Size.zero;
|
Size _viewportSize = Size.zero;
|
||||||
|
|
||||||
Size get viewportSize => _viewportSize;
|
Size get viewportSize => _viewportSize;
|
||||||
|
@ -21,7 +22,20 @@ class TileExtentController {
|
||||||
required this.extentMin,
|
required this.extentMin,
|
||||||
this.extentMax = 300,
|
this.extentMax = 300,
|
||||||
required this.spacing,
|
required this.spacing,
|
||||||
});
|
}) {
|
||||||
|
userPreferredExtent = settings.getTileExtent(settingsRouteKey);
|
||||||
|
settings.addListener(_onSettingsChanged);
|
||||||
|
}
|
||||||
|
|
||||||
|
void dispose() {
|
||||||
|
settings.removeListener(_onSettingsChanged);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _onSettingsChanged() {
|
||||||
|
if (userPreferredExtent != settings.getTileExtent(settingsRouteKey)) {
|
||||||
|
_update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void setViewportSize(Size viewportSize) {
|
void setViewportSize(Size viewportSize) {
|
||||||
// sanitize screen size (useful when reloading while screen is off, reporting a 0,0 size)
|
// sanitize screen size (useful when reloading while screen is off, reporting a 0,0 size)
|
||||||
|
@ -35,22 +49,18 @@ class TileExtentController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
double setUserPreferredExtent(double userPreferredExtent) => _update(userPreferredExtent: userPreferredExtent);
|
double setUserPreferredExtent(double extent) => _update(userPreferredExtent: extent.roundToDouble());
|
||||||
|
|
||||||
double _update({double userPreferredExtent = 0}) {
|
double _update({double? userPreferredExtent}) {
|
||||||
final oldUserPreferredExtent = settings.getTileExtent(settingsRouteKey);
|
final preferredExtent = userPreferredExtent ?? settings.getTileExtent(settingsRouteKey);
|
||||||
final currentExtent = extentNotifier.value;
|
final targetExtent = preferredExtent > 0 ? preferredExtent : extentNotifier.value;
|
||||||
final targetExtent = userPreferredExtent > 0
|
|
||||||
? userPreferredExtent
|
|
||||||
: oldUserPreferredExtent > 0
|
|
||||||
? oldUserPreferredExtent
|
|
||||||
: currentExtent;
|
|
||||||
|
|
||||||
final columnCount = _effectiveColumnCountForExtent(targetExtent);
|
final columnCount = _effectiveColumnCountForExtent(targetExtent);
|
||||||
final newExtent = _extentForColumnCount(columnCount);
|
final newExtent = _extentForColumnCount(columnCount);
|
||||||
|
|
||||||
if (userPreferredExtent > 0 || oldUserPreferredExtent == 0) {
|
if (this.userPreferredExtent != preferredExtent) {
|
||||||
settings.setTileExtent(settingsRouteKey, newExtent);
|
this.userPreferredExtent = preferredExtent;
|
||||||
|
settings.setTileExtent(settingsRouteKey, preferredExtent);
|
||||||
}
|
}
|
||||||
if (extentNotifier.value != newExtent) {
|
if (extentNotifier.value != newExtent) {
|
||||||
extentNotifier.value = newExtent;
|
extentNotifier.value = newExtent;
|
||||||
|
|
|
@ -133,6 +133,12 @@ class FilterGrid<T extends CollectionFilter> extends StatefulWidget {
|
||||||
class _FilterGridState<T extends CollectionFilter> extends State<FilterGrid<T>> {
|
class _FilterGridState<T extends CollectionFilter> extends State<FilterGrid<T>> {
|
||||||
TileExtentController? _tileExtentController;
|
TileExtentController? _tileExtentController;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_tileExtentController?.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
_tileExtentController ??= TileExtentController(
|
_tileExtentController ??= TileExtentController(
|
||||||
|
|
|
@ -37,12 +37,12 @@ class _SearchPageState extends State<SearchPage> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
super.dispose();
|
|
||||||
widget.delegate.queryTextController.removeListener(_onQueryChanged);
|
widget.delegate.queryTextController.removeListener(_onQueryChanged);
|
||||||
widget.animation.removeStatusListener(_onAnimationStatusChanged);
|
widget.animation.removeStatusListener(_onAnimationStatusChanged);
|
||||||
widget.delegate.currentBodyNotifier.removeListener(_onSearchBodyChanged);
|
widget.delegate.currentBodyNotifier.removeListener(_onSearchBodyChanged);
|
||||||
widget.delegate.focusNode = null;
|
widget.delegate.focusNode = null;
|
||||||
_focusNode.dispose();
|
_focusNode.dispose();
|
||||||
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onAnimationStatusChanged(AnimationStatus status) {
|
void _onAnimationStatusChanged(AnimationStatus status) {
|
||||||
|
|
|
@ -53,8 +53,8 @@ class _EntryGoogleMapState extends State<EntryGoogleMap> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
super.dispose();
|
|
||||||
_controller?.dispose();
|
_controller?.dispose();
|
||||||
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
Loading…
Reference in a new issue