Refactoring

This commit is contained in:
Ming Ming 2021-08-24 01:28:25 +08:00
parent e4a80a5c49
commit 5c60c80b9e
2 changed files with 60 additions and 17 deletions

View 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;
}

View file

@ -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);
}
}