mirror of
https://github.com/Xevion/paperless-mobile.git
synced 2025-12-09 08:08:14 -06:00
feat: add accessibility setting and conditionally disable animations
This commit is contained in:
@@ -164,7 +164,10 @@ class AppDrawer extends StatelessWidget {
|
||||
return child;
|
||||
}
|
||||
return child
|
||||
.animate(onPlay: (c) => c.repeat(reverse: true))
|
||||
.animate(
|
||||
onPlay: (c) => c.repeat(reverse: true),
|
||||
autoPlay: !MediaQuery.disableAnimationsOf(context),
|
||||
)
|
||||
.fade(duration: 1.seconds, begin: 1, end: 0.3);
|
||||
},
|
||||
),
|
||||
|
||||
@@ -63,6 +63,7 @@ class ChangelogDialog extends StatelessWidget {
|
||||
}
|
||||
|
||||
const _versionNumbers = {
|
||||
"58": "3.1.4",
|
||||
"57": "3.1.3",
|
||||
"56": "3.1.2",
|
||||
"55": "3.1.1",
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'package:go_router/go_router.dart';
|
||||
import 'package:intl/date_symbol_data_local.dart';
|
||||
import 'package:open_filex/open_filex.dart';
|
||||
import 'package:paperless_api/paperless_api.dart';
|
||||
import 'package:paperless_mobile/accessibility/accessibility_utils.dart';
|
||||
import 'package:paperless_mobile/core/bloc/connectivity_cubit.dart';
|
||||
import 'package:paperless_mobile/core/database/tables/local_user_account.dart';
|
||||
import 'package:paperless_mobile/core/extensions/flutter_extensions.dart';
|
||||
@@ -60,6 +61,8 @@ class _DocumentDetailsPageState extends State<DocumentDetailsPage> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final disableAnimations = MediaQuery.disableAnimationsOf(context);
|
||||
debugPrint(disableAnimations.toString());
|
||||
final hasMultiUserSupport =
|
||||
context.watch<LocalUserAccount>().hasMultiUserSupport;
|
||||
final tabLength = 4 + (hasMultiUserSupport && false ? 1 : 0);
|
||||
@@ -150,7 +153,7 @@ class _DocumentDetailsPageState extends State<DocumentDetailsPage> {
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
).accessible();
|
||||
},
|
||||
),
|
||||
),
|
||||
|
||||
@@ -50,8 +50,8 @@ class _DocumentEditPageState extends State<DocumentEditPage>
|
||||
late final Animation<double> _animation;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
void didChangeDependencies() {
|
||||
super.didChangeDependencies();
|
||||
_animationController = AnimationController(
|
||||
duration: const Duration(milliseconds: 150),
|
||||
vsync: this,
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'dart:math' as math;
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:paperless_mobile/accessibility/accessibility_utils.dart';
|
||||
import 'package:paperless_mobile/core/extensions/document_extensions.dart';
|
||||
import 'package:paperless_mobile/core/extensions/flutter_extensions.dart';
|
||||
import 'package:paperless_mobile/features/document_search/cubit/document_search_cubit.dart';
|
||||
@@ -67,7 +68,7 @@ class _DocumentSearchPageState extends State<DocumentSearchPage> {
|
||||
context.read<DocumentSearchCubit>().search(query);
|
||||
},
|
||||
),
|
||||
),
|
||||
).accessible(),
|
||||
actions: [
|
||||
IconButton(
|
||||
color: theme.colorScheme.onSurfaceVariant,
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
|
||||
import 'package:paperless_api/paperless_api.dart';
|
||||
import 'package:paperless_mobile/accessibility/accessibility_utils.dart';
|
||||
import 'package:paperless_mobile/helpers/connectivity_aware_action_wrapper.dart';
|
||||
import 'package:paperless_mobile/routing/routes/documents_route.dart';
|
||||
import 'package:paperless_mobile/routing/routes/shells/authenticated_route.dart';
|
||||
@@ -46,7 +47,7 @@ class DocumentPreview extends StatelessWidget {
|
||||
return Hero(
|
||||
tag: "thumb_$documentId",
|
||||
child: _buildPreview(context),
|
||||
);
|
||||
).accessible();
|
||||
}
|
||||
return _buildPreview(context);
|
||||
}),
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/scheduler.dart';
|
||||
import 'package:paperless_api/paperless_api.dart';
|
||||
import 'package:paperless_mobile/accessibility/accessibility_utils.dart';
|
||||
import 'package:paperless_mobile/core/extensions/flutter_extensions.dart';
|
||||
import 'package:paperless_mobile/routing/routes/saved_views_route.dart';
|
||||
import 'package:paperless_mobile/routing/routes/shells/authenticated_route.dart';
|
||||
@@ -38,7 +40,7 @@ class _SavedViewChipState extends State<SavedViewChip>
|
||||
super.initState();
|
||||
_animationController = AnimationController(
|
||||
vsync: this,
|
||||
duration: const Duration(milliseconds: 200),
|
||||
duration: const Duration(milliseconds: 200).accessible(),
|
||||
);
|
||||
_animation = _animationController.drive(Tween(begin: 0, end: 1));
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:paperless_api/paperless_api.dart';
|
||||
import 'package:paperless_mobile/core/widgets/shimmer_placeholder.dart';
|
||||
import 'package:paperless_mobile/accessibility/accessibility_utils.dart';
|
||||
import 'package:paperless_mobile/core/extensions/flutter_extensions.dart';
|
||||
import 'package:paperless_mobile/core/widgets/shimmer_placeholder.dart';
|
||||
import 'package:paperless_mobile/features/documents/view/widgets/saved_views/saved_view_chip.dart';
|
||||
import 'package:paperless_mobile/features/saved_view/cubit/saved_view_cubit.dart';
|
||||
import 'package:paperless_mobile/generated/l10n/app_localizations.dart';
|
||||
@@ -41,7 +42,7 @@ class _SavedViewsWidgetState extends State<SavedViewsWidget>
|
||||
super.initState();
|
||||
_animationController = AnimationController(
|
||||
vsync: this,
|
||||
duration: const Duration(milliseconds: 200),
|
||||
duration: const Duration(milliseconds: 200).accessible(),
|
||||
);
|
||||
_animation = _animationController.drive(Tween(begin: 0, end: 0.5));
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import 'package:paperless_mobile/features/settings/view/widgets/clear_storage_se
|
||||
import 'package:paperless_mobile/features/settings/view/widgets/color_scheme_option_setting.dart';
|
||||
import 'package:paperless_mobile/features/settings/view/widgets/default_download_file_type_setting.dart';
|
||||
import 'package:paperless_mobile/features/settings/view/widgets/default_share_file_type_setting.dart';
|
||||
import 'package:paperless_mobile/features/settings/view/widgets/disable_animations_setting.dart';
|
||||
import 'package:paperless_mobile/features/settings/view/widgets/enforce_pdf_upload_setting.dart';
|
||||
import 'package:paperless_mobile/features/settings/view/widgets/language_selection_setting.dart';
|
||||
import 'package:paperless_mobile/features/settings/view/widgets/skip_document_prepraration_on_share_setting.dart';
|
||||
@@ -39,6 +40,8 @@ class SettingsPage extends StatelessWidget {
|
||||
const SkipDocumentPreprationOnShareSetting(),
|
||||
_buildSectionHeader(context, S.of(context)!.storage),
|
||||
const ClearCacheSetting(),
|
||||
_buildSectionHeader(context, 'Accessibility'),
|
||||
const DisableAnimationsSetting(),
|
||||
_buildSectionHeader(context, S.of(context)!.misc),
|
||||
const AppLogsTile(),
|
||||
const ChangelogsTile(),
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:paperless_mobile/features/settings/view/widgets/global_settings_builder.dart';
|
||||
import 'package:paperless_mobile/generated/l10n/app_localizations.dart';
|
||||
|
||||
class DisableAnimationsSetting extends StatelessWidget {
|
||||
const DisableAnimationsSetting({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return GlobalSettingsBuilder(builder: (context, settings) {
|
||||
return SwitchListTile(
|
||||
value: settings.disableAnimations,
|
||||
title: Text('Disable animations'),
|
||||
subtitle: Text('Disables page transitions and most animations.'
|
||||
' Temporary workaround until system accessibility settings can be used.'),
|
||||
onChanged: (val) async {
|
||||
settings.disableAnimations = val;
|
||||
settings.save();
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user