mirror of
https://gitlab.com/nkming2/nc-photos.git
synced 2025-03-24 16:04:43 +01:00
Stop showing errors if page is invisible
This commit is contained in:
parent
c89d999b73
commit
4532fb45bf
4 changed files with 66 additions and 10 deletions
|
@ -28,6 +28,7 @@ import 'package:nc_photos/widget/archive_viewer.dart';
|
||||||
import 'package:nc_photos/widget/dynamic_album_viewer.dart';
|
import 'package:nc_photos/widget/dynamic_album_viewer.dart';
|
||||||
import 'package:nc_photos/widget/home_app_bar.dart';
|
import 'package:nc_photos/widget/home_app_bar.dart';
|
||||||
import 'package:nc_photos/widget/new_album_dialog.dart';
|
import 'package:nc_photos/widget/new_album_dialog.dart';
|
||||||
|
import 'package:nc_photos/widget/page_visibility_mixin.dart';
|
||||||
import 'package:tuple/tuple.dart';
|
import 'package:tuple/tuple.dart';
|
||||||
|
|
||||||
class HomeAlbums extends StatefulWidget {
|
class HomeAlbums extends StatefulWidget {
|
||||||
|
@ -42,7 +43,8 @@ class HomeAlbums extends StatefulWidget {
|
||||||
final Account account;
|
final Account account;
|
||||||
}
|
}
|
||||||
|
|
||||||
class _HomeAlbumsState extends State<HomeAlbums> {
|
class _HomeAlbumsState extends State<HomeAlbums>
|
||||||
|
with RouteAware, PageVisibilityMixin<HomeAlbums> {
|
||||||
@override
|
@override
|
||||||
initState() {
|
initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
@ -307,10 +309,12 @@ class _HomeAlbumsState extends State<HomeAlbums> {
|
||||||
_transformItems(state.albums);
|
_transformItems(state.albums);
|
||||||
} else if (state is ListAlbumBlocFailure) {
|
} else if (state is ListAlbumBlocFailure) {
|
||||||
_transformItems(state.albums);
|
_transformItems(state.albums);
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
if (isPageVisible()) {
|
||||||
content: Text(exception_util.toUserString(state.exception, context)),
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
duration: k.snackBarDurationNormal,
|
content: Text(exception_util.toUserString(state.exception, context)),
|
||||||
));
|
duration: k.snackBarDurationNormal,
|
||||||
|
));
|
||||||
|
}
|
||||||
} else if (state is ListAlbumBlocInconsistent) {
|
} else if (state is ListAlbumBlocInconsistent) {
|
||||||
_reqQuery();
|
_reqQuery();
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@ import 'package:nc_photos/use_case/update_property.dart';
|
||||||
import 'package:nc_photos/widget/album_picker_dialog.dart';
|
import 'package:nc_photos/widget/album_picker_dialog.dart';
|
||||||
import 'package:nc_photos/widget/home_app_bar.dart';
|
import 'package:nc_photos/widget/home_app_bar.dart';
|
||||||
import 'package:nc_photos/widget/measure.dart';
|
import 'package:nc_photos/widget/measure.dart';
|
||||||
|
import 'package:nc_photos/widget/page_visibility_mixin.dart';
|
||||||
import 'package:nc_photos/widget/photo_list_item.dart';
|
import 'package:nc_photos/widget/photo_list_item.dart';
|
||||||
import 'package:nc_photos/widget/popup_menu_zoom.dart';
|
import 'package:nc_photos/widget/popup_menu_zoom.dart';
|
||||||
import 'package:nc_photos/widget/selectable_item_stream_list_mixin.dart';
|
import 'package:nc_photos/widget/selectable_item_stream_list_mixin.dart';
|
||||||
|
@ -51,7 +52,11 @@ class HomePhotos extends StatefulWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class _HomePhotosState extends State<HomePhotos>
|
class _HomePhotosState extends State<HomePhotos>
|
||||||
with WidgetsBindingObserver, SelectableItemStreamListMixin<HomePhotos> {
|
with
|
||||||
|
WidgetsBindingObserver,
|
||||||
|
SelectableItemStreamListMixin<HomePhotos>,
|
||||||
|
RouteAware,
|
||||||
|
PageVisibilityMixin {
|
||||||
@override
|
@override
|
||||||
initState() {
|
initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
@ -256,10 +261,12 @@ class _HomePhotosState extends State<HomePhotos>
|
||||||
}
|
}
|
||||||
} else if (state is ScanDirBlocFailure) {
|
} else if (state is ScanDirBlocFailure) {
|
||||||
_transformItems(state.files);
|
_transformItems(state.files);
|
||||||
SnackBarManager().showSnackBar(SnackBar(
|
if (isPageVisible()) {
|
||||||
content: Text(exception_util.toUserString(state.exception, context)),
|
SnackBarManager().showSnackBar(SnackBar(
|
||||||
duration: k.snackBarDurationNormal,
|
content: Text(exception_util.toUserString(state.exception, context)),
|
||||||
));
|
duration: k.snackBarDurationNormal,
|
||||||
|
));
|
||||||
|
}
|
||||||
} else if (state is ScanDirBlocInconsistent) {
|
} else if (state is ScanDirBlocInconsistent) {
|
||||||
_reqQuery();
|
_reqQuery();
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,10 @@ import 'package:nc_photos/widget/viewer.dart';
|
||||||
class MyApp extends StatefulWidget {
|
class MyApp extends StatefulWidget {
|
||||||
@override
|
@override
|
||||||
createState() => _MyAppState();
|
createState() => _MyAppState();
|
||||||
|
|
||||||
|
static RouteObserver get routeObserver => _routeObserver;
|
||||||
|
|
||||||
|
static final _routeObserver = RouteObserver<PageRoute>();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _MyAppState extends State<MyApp> implements SnackBarHandler {
|
class _MyAppState extends State<MyApp> implements SnackBarHandler {
|
||||||
|
@ -46,6 +50,7 @@ class _MyAppState extends State<MyApp> implements SnackBarHandler {
|
||||||
themeMode: Pref.inst().isDarkTheme() ? ThemeMode.dark : ThemeMode.light,
|
themeMode: Pref.inst().isDarkTheme() ? ThemeMode.dark : ThemeMode.light,
|
||||||
initialRoute: Splash.routeName,
|
initialRoute: Splash.routeName,
|
||||||
onGenerateRoute: _onGenerateRoute,
|
onGenerateRoute: _onGenerateRoute,
|
||||||
|
navigatorObservers: <NavigatorObserver>[MyApp.routeObserver],
|
||||||
scaffoldMessengerKey: _scaffoldMessengerKey,
|
scaffoldMessengerKey: _scaffoldMessengerKey,
|
||||||
locale: language_util.getSelectedLocale(context),
|
locale: language_util.getSelectedLocale(context),
|
||||||
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
||||||
|
|
40
lib/widget/page_visibility_mixin.dart
Normal file
40
lib/widget/page_visibility_mixin.dart
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
import 'package:flutter/widgets.dart';
|
||||||
|
import 'package:nc_photos/widget/my_app.dart';
|
||||||
|
|
||||||
|
mixin PageVisibilityMixin<T extends StatefulWidget> on State<T>, RouteAware {
|
||||||
|
@override
|
||||||
|
didChangeDependencies() {
|
||||||
|
super.didChangeDependencies();
|
||||||
|
MyApp.routeObserver.subscribe(this, ModalRoute.of(context));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
dispose() {
|
||||||
|
MyApp.routeObserver.unsubscribe(this);
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
didPush() {
|
||||||
|
_isVisible = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
didPushNext() {
|
||||||
|
_isVisible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
didPop() {
|
||||||
|
_isVisible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
didPopNext() {
|
||||||
|
_isVisible = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isPageVisible() => _isVisible;
|
||||||
|
|
||||||
|
var _isVisible = true;
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue