settings: added info map zoom

This commit is contained in:
Thibault Deckers 2019-08-16 19:53:17 +09:00
parent dce5a30dca
commit b021c4d893
5 changed files with 86 additions and 4 deletions

View file

@ -2,12 +2,14 @@ import 'package:aves/model/image_collection.dart';
import 'package:aves/model/image_entry.dart'; import 'package:aves/model/image_entry.dart';
import 'package:aves/model/image_file_service.dart'; import 'package:aves/model/image_file_service.dart';
import 'package:aves/model/metadata_db.dart'; import 'package:aves/model/metadata_db.dart';
import 'package:aves/model/settings.dart';
import 'package:aves/widgets/album/all_collection_page.dart'; import 'package:aves/widgets/album/all_collection_page.dart';
import 'package:aves/widgets/common/fake_app_bar.dart'; import 'package:aves/widgets/common/fake_app_bar.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
void main() { void main() async {
await settings.init();
runApp(AvesApp()); runApp(AvesApp());
} }

72
lib/model/settings.dart Normal file
View file

@ -0,0 +1,72 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
final Settings settings = Settings._private();
typedef void SettingsCallback(String key, dynamic oldValue, dynamic newValue);
class Settings {
static SharedPreferences prefs;
ObserverList<SettingsCallback> _listeners = ObserverList<SettingsCallback>();
Settings._private();
// preferences
static const infoMapZoomKey = 'info_map_zoom';
init() async {
prefs = await SharedPreferences.getInstance();
}
void addListener(SettingsCallback listener) => _listeners.add(listener);
void removeListener(SettingsCallback listener) => _listeners.remove(listener);
void notifyListeners(String key, dynamic oldValue, dynamic newValue) {
debugPrint('$runtimeType notifyListeners key=$key, old=$oldValue, new=$newValue');
if (_listeners != null) {
final List<SettingsCallback> localListeners = _listeners.toList();
for (SettingsCallback listener in localListeners) {
try {
if (_listeners.contains(listener)) {
listener(key, oldValue, newValue);
}
} catch (exception, stack) {
debugPrint('$runtimeType failed to notify listeners with exception=$exception\n$stack');
}
}
}
}
double get infoMapZoom => prefs.getDouble(infoMapZoomKey) ?? 12;
set infoMapZoom(double newValue) => setAndNotify(infoMapZoomKey, newValue);
// convenience methods
bool getBoolOrDefault(String key, bool defaultValue) => prefs.getKeys().contains(key) ? prefs.getBool(key) : defaultValue;
setAndNotify(String key, dynamic newValue) {
var oldValue = prefs.get(key);
if (newValue == null) {
prefs.remove(key);
} else if (newValue is String) {
oldValue = prefs.getString(key);
prefs.setString(key, newValue);
} else if (newValue is int) {
oldValue = prefs.getInt(key);
prefs.setInt(key, newValue);
} else if (newValue is double) {
oldValue = prefs.getDouble(key);
prefs.setDouble(key, newValue);
} else if (newValue is bool) {
oldValue = prefs.getBool(key);
prefs.setBool(key, newValue);
}
if (oldValue != newValue) {
notifyListeners(key, oldValue, newValue);
}
}
}

View file

@ -1,4 +1,5 @@
import 'package:aves/model/image_entry.dart'; import 'package:aves/model/image_entry.dart';
import 'package:aves/model/settings.dart';
import 'package:aves/utils/android_app_service.dart'; import 'package:aves/utils/android_app_service.dart';
import 'package:aves/widgets/fullscreen/info/info_page.dart'; import 'package:aves/widgets/fullscreen/info/info_page.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -24,8 +25,7 @@ class LocationSection extends AnimatedWidget {
entry.latLng.item2, entry.latLng.item2,
), ),
geoUri: entry.geoUri, geoUri: entry.geoUri,
// TODO TLAD read preferences/zoom initialZoom: settings.infoMapZoom,
initialZoom: 12,
), ),
if (entry.isLocated) if (entry.isLocated)
Padding( Padding(
@ -113,7 +113,7 @@ class ImageMapState extends State<ImageMap> with AutomaticKeepAliveClientMixin {
} }
zoomBy(double amount) { zoomBy(double amount) {
// TODO TLAD update preferences/zoom settings.infoMapZoom += amount;
controller.animateCamera(CameraUpdate.zoomBy(amount)); controller.animateCamera(CameraUpdate.zoomBy(amount));
} }

View file

@ -144,6 +144,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.0.5" version: "0.0.5"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
url: "https://pub.dartlang.org"
source: hosted
version: "0.5.3+4"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter

View file

@ -29,6 +29,7 @@ dependencies:
path: path:
photo_view: photo_view:
screen: screen:
shared_preferences:
sqflite: sqflite:
transparent_image: transparent_image:
tuple: tuple: