persist twoPageMode
This commit is contained in:
@@ -7,7 +7,9 @@ import 'api.dart';
|
|||||||
import 'sheet.dart';
|
import 'sheet.dart';
|
||||||
|
|
||||||
class MyHomePage extends StatefulWidget {
|
class MyHomePage extends StatefulWidget {
|
||||||
const MyHomePage({super.key});
|
final Config config;
|
||||||
|
|
||||||
|
const MyHomePage({super.key, required this.config});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<MyHomePage> createState() => _MyHomePageState();
|
State<MyHomePage> createState() => _MyHomePageState();
|
||||||
@@ -73,8 +75,11 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
MaterialPageRoute(
|
||||||
builder: (context) =>
|
builder: (context) => SheetViewerPage(
|
||||||
SheetViewerPage(sheet: sheet, apiClient: apiClient!),
|
sheet: sheet,
|
||||||
|
apiClient: apiClient!,
|
||||||
|
config: widget.config,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import 'package:jwt_decoder/jwt_decoder.dart';
|
|||||||
import 'package:sheetless/api.dart';
|
import 'package:sheetless/api.dart';
|
||||||
import 'package:sheetless/home_page.dart';
|
import 'package:sheetless/home_page.dart';
|
||||||
import 'package:sheetless/storage_helper.dart';
|
import 'package:sheetless/storage_helper.dart';
|
||||||
import 'package:sheetless/utility.dart';
|
|
||||||
|
|
||||||
class LoginPage extends StatefulWidget {
|
class LoginPage extends StatefulWidget {
|
||||||
const LoginPage({super.key});
|
const LoginPage({super.key});
|
||||||
@@ -77,10 +76,11 @@ class _LoginPageState extends State<LoginPage> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _navigateToMainPage() {
|
Future<void> _navigateToMainPage() async {
|
||||||
Navigator.of(
|
final config = await _storageHelper.readConfig();
|
||||||
context,
|
Navigator.of(context).pushReplacement(
|
||||||
).pushReplacement(MaterialPageRoute(builder: (_) => MyHomePage()));
|
MaterialPageRoute(builder: (_) => MyHomePage(config: config)),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -6,15 +6,18 @@ import 'package:logging/logging.dart';
|
|||||||
import 'package:pdfrx/pdfrx.dart';
|
import 'package:pdfrx/pdfrx.dart';
|
||||||
import 'package:sheetless/api.dart';
|
import 'package:sheetless/api.dart';
|
||||||
import 'package:sheetless/sheet.dart';
|
import 'package:sheetless/sheet.dart';
|
||||||
|
import 'package:sheetless/storage_helper.dart';
|
||||||
|
|
||||||
class SheetViewerPage extends StatefulWidget {
|
class SheetViewerPage extends StatefulWidget {
|
||||||
final Sheet sheet;
|
final Sheet sheet;
|
||||||
final ApiClient apiClient;
|
final ApiClient apiClient;
|
||||||
|
final Config config;
|
||||||
|
|
||||||
const SheetViewerPage({
|
const SheetViewerPage({
|
||||||
super.key,
|
super.key,
|
||||||
required this.sheet,
|
required this.sheet,
|
||||||
required this.apiClient,
|
required this.apiClient,
|
||||||
|
required this.config,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -23,12 +26,12 @@ class SheetViewerPage extends StatefulWidget {
|
|||||||
|
|
||||||
class _SheetViewerPageState extends State<SheetViewerPage> {
|
class _SheetViewerPageState extends State<SheetViewerPage> {
|
||||||
final log = Logger("SheetViewerPage");
|
final log = Logger("SheetViewerPage");
|
||||||
|
final StorageHelper storageHelper = StorageHelper();
|
||||||
|
|
||||||
int page = 1;
|
int page = 1;
|
||||||
int numPages = 1;
|
int numPages = 1;
|
||||||
bool isFullscreen = false;
|
|
||||||
late Future<bool> documentLoaded;
|
late Future<bool> documentLoaded;
|
||||||
PdfDocument? document;
|
PdfDocument? document;
|
||||||
bool twoPageMode = true;
|
|
||||||
bool paintMode = false;
|
bool paintMode = false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -63,8 +66,10 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void toggleFullscreen() {
|
void toggleFullscreen() {
|
||||||
isFullscreen = !isFullscreen;
|
widget.config.fullscreen = !widget.config.fullscreen;
|
||||||
if (isFullscreen) {
|
storageHelper.writeConfig(widget.config);
|
||||||
|
|
||||||
|
if (widget.config.fullscreen) {
|
||||||
log.info("enter fullscreen");
|
log.info("enter fullscreen");
|
||||||
// enter fullscreen
|
// enter fullscreen
|
||||||
SystemChrome.setEnabledSystemUIMode(
|
SystemChrome.setEnabledSystemUIMode(
|
||||||
@@ -90,7 +95,7 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
|
|||||||
IconButton(
|
IconButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
setState(() {
|
setState(() {
|
||||||
if (twoPageMode) {
|
if (widget.config.twoPageMode) {
|
||||||
// TODO: notification that paint mode only in single page mode
|
// TODO: notification that paint mode only in single page mode
|
||||||
} else {
|
} else {
|
||||||
paintMode = !paintMode;
|
paintMode = !paintMode;
|
||||||
@@ -102,14 +107,17 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
|
|||||||
IconButton(
|
IconButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
setState(() {
|
setState(() {
|
||||||
twoPageMode = !twoPageMode;
|
widget.config.twoPageMode = !widget.config.twoPageMode;
|
||||||
if (twoPageMode) {
|
storageHelper.writeConfig(widget.config);
|
||||||
|
if (widget.config.twoPageMode) {
|
||||||
paintMode = false;
|
paintMode = false;
|
||||||
// TODO: notification that paint mode was deactivated since only possible in single page mode
|
// TODO: notification that paint mode was deactivated since only possible in single page mode
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
icon: Icon(twoPageMode ? Icons.filter_1 : Icons.filter_2),
|
icon: Icon(
|
||||||
|
widget.config.twoPageMode ? Icons.filter_1 : Icons.filter_2,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -164,7 +172,7 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
|
|||||||
document: document,
|
document: document,
|
||||||
pageNumber: page,
|
pageNumber: page,
|
||||||
maximumDpi: 300,
|
maximumDpi: 300,
|
||||||
alignment: twoPageMode
|
alignment: widget.config.twoPageMode
|
||||||
? Alignment.centerRight
|
? Alignment.centerRight
|
||||||
: Alignment.center,
|
: Alignment.center,
|
||||||
),
|
),
|
||||||
@@ -179,7 +187,7 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
Visibility(
|
Visibility(
|
||||||
visible: twoPageMode == true,
|
visible: widget.config.twoPageMode == true,
|
||||||
child: Expanded(
|
child: Expanded(
|
||||||
child: Stack(
|
child: Stack(
|
||||||
children: [
|
children: [
|
||||||
|
|||||||
@@ -3,8 +3,21 @@ import 'package:hive/hive.dart';
|
|||||||
|
|
||||||
enum SecureStorageKey { url, jwt, email, password }
|
enum SecureStorageKey { url, jwt, email, password }
|
||||||
|
|
||||||
|
enum ConfigKey { twoPageMode }
|
||||||
|
|
||||||
|
class Config {
|
||||||
|
Config({required this.twoPageMode, required this.fullscreen});
|
||||||
|
|
||||||
|
static const String keyTwoPageMode = "twoPageMode";
|
||||||
|
static const String keyFullscreen = "fullscreen";
|
||||||
|
|
||||||
|
bool twoPageMode;
|
||||||
|
bool fullscreen;
|
||||||
|
}
|
||||||
|
|
||||||
class StorageHelper {
|
class StorageHelper {
|
||||||
final sheetAccessTimesBox = "sheetAccessTimes";
|
final sheetAccessTimesBox = "sheetAccessTimes";
|
||||||
|
final configBox = "config";
|
||||||
|
|
||||||
late FlutterSecureStorage secureStorage;
|
late FlutterSecureStorage secureStorage;
|
||||||
|
|
||||||
@@ -22,6 +35,20 @@ class StorageHelper {
|
|||||||
return secureStorage.write(key: key.name, value: value);
|
return secureStorage.write(key: key.name, value: value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<Config> readConfig() async {
|
||||||
|
final box = await Hive.openBox(configBox);
|
||||||
|
return Config(
|
||||||
|
twoPageMode: box.get(Config.keyTwoPageMode) ?? false,
|
||||||
|
fullscreen: box.get(Config.keyFullscreen) ?? false,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> writeConfig(Config config) async {
|
||||||
|
final box = await Hive.openBox(configBox);
|
||||||
|
box.put(Config.keyTwoPageMode, config.twoPageMode);
|
||||||
|
box.put(Config.keyFullscreen, config.fullscreen);
|
||||||
|
}
|
||||||
|
|
||||||
Future<Map<String, DateTime>> readSheetAccessTimes() async {
|
Future<Map<String, DateTime>> readSheetAccessTimes() async {
|
||||||
final box = await Hive.openBox(sheetAccessTimesBox);
|
final box = await Hive.openBox(sheetAccessTimesBox);
|
||||||
return box.toMap().map(
|
return box.toMap().map(
|
||||||
|
|||||||
Reference in New Issue
Block a user