mirror of
https://gitlab.com/nkming2/nc-photos.git
synced 2025-02-25 02:48:54 +01:00
Refactoring
This commit is contained in:
parent
e4a80a5c49
commit
5c60c80b9e
2 changed files with 60 additions and 17 deletions
26
lib/widget/disposable.dart
Normal file
26
lib/widget/disposable.dart
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
import 'package:flutter/widgets.dart';
|
||||||
|
|
||||||
|
abstract class Disposable {
|
||||||
|
void init(State state);
|
||||||
|
void dispose(State state);
|
||||||
|
}
|
||||||
|
|
||||||
|
mixin DisposableManagerMixin<T extends StatefulWidget> on State<T> {
|
||||||
|
@override
|
||||||
|
initState() {
|
||||||
|
super.initState();
|
||||||
|
for (final d in disposables) {
|
||||||
|
d.init(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
dispose() {
|
||||||
|
for (final d in disposables) {
|
||||||
|
d.dispose(this);
|
||||||
|
}
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Disposable> get disposables;
|
||||||
|
}
|
|
@ -24,6 +24,7 @@ import 'package:nc_photos/snack_bar_manager.dart';
|
||||||
import 'package:nc_photos/theme.dart';
|
import 'package:nc_photos/theme.dart';
|
||||||
import 'package:nc_photos/use_case/remove.dart';
|
import 'package:nc_photos/use_case/remove.dart';
|
||||||
import 'package:nc_photos/widget/animated_visibility.dart';
|
import 'package:nc_photos/widget/animated_visibility.dart';
|
||||||
|
import 'package:nc_photos/widget/disposable.dart';
|
||||||
import 'package:nc_photos/widget/horizontal_page_viewer.dart';
|
import 'package:nc_photos/widget/horizontal_page_viewer.dart';
|
||||||
import 'package:nc_photos/widget/image_viewer.dart';
|
import 'package:nc_photos/widget/image_viewer.dart';
|
||||||
import 'package:nc_photos/widget/video_viewer.dart';
|
import 'package:nc_photos/widget/video_viewer.dart';
|
||||||
|
@ -80,16 +81,7 @@ class Viewer extends StatefulWidget {
|
||||||
final Album? album;
|
final Album? album;
|
||||||
}
|
}
|
||||||
|
|
||||||
class _ViewerState extends State<Viewer> {
|
class _ViewerState extends State<Viewer> with DisposableManagerMixin<Viewer> {
|
||||||
@override
|
|
||||||
void initState() {
|
|
||||||
super.initState();
|
|
||||||
final brightness = Pref.inst().getViewerScreenBrightness();
|
|
||||||
if (brightness != null) {
|
|
||||||
ScreenBrightness.setScreenBrightness(brightness / 100.0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
build(BuildContext context) {
|
build(BuildContext context) {
|
||||||
return AppTheme(
|
return AppTheme(
|
||||||
|
@ -101,13 +93,6 @@ class _ViewerState extends State<Viewer> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
dispose() {
|
|
||||||
ScreenBrightness.resetScreenBrightness();
|
|
||||||
super.dispose();
|
|
||||||
SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);
|
|
||||||
}
|
|
||||||
|
|
||||||
Widget _buildContent(BuildContext context) {
|
Widget _buildContent(BuildContext context) {
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
|
@ -628,6 +613,11 @@ class _ViewerState extends State<Viewer> {
|
||||||
bool _canOpenDetailPane() => !_isZoomed;
|
bool _canOpenDetailPane() => !_isZoomed;
|
||||||
bool _canZoom() => !_isDetailPaneActive;
|
bool _canZoom() => !_isDetailPaneActive;
|
||||||
|
|
||||||
|
final disposables = [
|
||||||
|
_ViewerBrightnessController(),
|
||||||
|
_ViewerSystemUiResetter(),
|
||||||
|
];
|
||||||
|
|
||||||
var _isShowAppBar = true;
|
var _isShowAppBar = true;
|
||||||
|
|
||||||
var _isShowDetailPane = false;
|
var _isShowDetailPane = false;
|
||||||
|
@ -652,3 +642,30 @@ class _PageState {
|
||||||
double? itemHeight;
|
double? itemHeight;
|
||||||
bool hasLoaded = false;
|
bool hasLoaded = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Control the screen brightness according to the settings
|
||||||
|
class _ViewerBrightnessController implements Disposable {
|
||||||
|
@override
|
||||||
|
init(State state) {
|
||||||
|
final brightness = Pref.inst().getViewerScreenBrightness();
|
||||||
|
if (brightness != null) {
|
||||||
|
ScreenBrightness.setScreenBrightness(brightness / 100.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
dispose(State state) {
|
||||||
|
ScreenBrightness.resetScreenBrightness();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Make sure the system UI overlay is reset on dispose
|
||||||
|
class _ViewerSystemUiResetter implements Disposable {
|
||||||
|
@override
|
||||||
|
init(State state) {}
|
||||||
|
|
||||||
|
@override
|
||||||
|
dispose(State state) {
|
||||||
|
SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue