mirror of
https://gitlab.com/nkming2/nc-photos.git
synced 2025-02-24 18:38:48 +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/use_case/remove.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/image_viewer.dart';
|
||||
import 'package:nc_photos/widget/video_viewer.dart';
|
||||
|
@ -80,16 +81,7 @@ class Viewer extends StatefulWidget {
|
|||
final Album? album;
|
||||
}
|
||||
|
||||
class _ViewerState extends State<Viewer> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
final brightness = Pref.inst().getViewerScreenBrightness();
|
||||
if (brightness != null) {
|
||||
ScreenBrightness.setScreenBrightness(brightness / 100.0);
|
||||
}
|
||||
}
|
||||
|
||||
class _ViewerState extends State<Viewer> with DisposableManagerMixin<Viewer> {
|
||||
@override
|
||||
build(BuildContext context) {
|
||||
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) {
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
|
@ -628,6 +613,11 @@ class _ViewerState extends State<Viewer> {
|
|||
bool _canOpenDetailPane() => !_isZoomed;
|
||||
bool _canZoom() => !_isDetailPaneActive;
|
||||
|
||||
final disposables = [
|
||||
_ViewerBrightnessController(),
|
||||
_ViewerSystemUiResetter(),
|
||||
];
|
||||
|
||||
var _isShowAppBar = true;
|
||||
|
||||
var _isShowDetailPane = false;
|
||||
|
@ -652,3 +642,30 @@ class _PageState {
|
|||
double? itemHeight;
|
||||
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