diff --git a/app/lib/controller/pref_controller.dart b/app/lib/controller/pref_controller.dart index e2d67d5f..ee095b3f 100644 --- a/app/lib/controller/pref_controller.dart +++ b/app/lib/controller/pref_controller.dart @@ -2,6 +2,7 @@ import 'package:logging/logging.dart'; import 'package:nc_photos/di_container.dart'; import 'package:nc_photos/entity/pref.dart'; import 'package:nc_photos/language_util.dart' as language_util; +import 'package:nc_photos/size.dart'; import 'package:nc_photos/widget/gps_map.dart'; import 'package:np_codegen/np_codegen.dart'; import 'package:rxdart/rxdart.dart'; @@ -117,6 +118,29 @@ class PrefController { value: value, ); + ValueStream get isSaveEditResultToServer => + _isSaveEditResultToServerController.stream; + + Future setSaveEditResultToServer(bool value) => _set( + controller: _isSaveEditResultToServerController, + setter: (pref, value) => pref.setSaveEditResultToServer(value), + value: value, + ); + + ValueStream get enhanceMaxSize => _enhanceMaxSizeController.stream; + + Future setEnhanceMaxSize(SizeInt value) => _set( + controller: _enhanceMaxSizeController, + setter: (pref, value) async { + return (await Future.wait([ + pref.setEnhanceMaxWidth(value.width), + pref.setEnhanceMaxHeight(value.height), + ])) + .reduce((a, b) => a && b); + }, + value: value, + ); + Future _set({ required BehaviorSubject controller, required Future Function(Pref pref, T value) setter, @@ -169,4 +193,8 @@ class PrefController { BehaviorSubject.seeded(_c.pref.isAlbumBrowserShowDateOr(false)); late final _isDoubleTapExitController = BehaviorSubject.seeded(_c.pref.isDoubleTapExitOr(false)); + late final _isSaveEditResultToServerController = + BehaviorSubject.seeded(_c.pref.isSaveEditResultToServerOr(true)); + late final _enhanceMaxSizeController = BehaviorSubject.seeded( + SizeInt(_c.pref.getEnhanceMaxWidthOr(), _c.pref.getEnhanceMaxHeightOr())); } diff --git a/app/lib/size.dart b/app/lib/size.dart new file mode 100644 index 00000000..b9c617d9 --- /dev/null +++ b/app/lib/size.dart @@ -0,0 +1,28 @@ +import 'package:flutter/material.dart'; +import 'package:to_string/to_string.dart'; + +part 'size.g.dart'; + +/// Decimal size +@toString +class SizeInt { + const SizeInt(this.width, this.height); + + SizeInt.square(int dimension) : this(dimension, dimension); + + @override + bool operator ==(Object? other) { + return other is SizeInt && width == other.width && height == other.height; + } + + @override + int get hashCode => Object.hash(width, height); + + Size toSizeF() => Size(width.toDouble(), height.toDouble()); + + @override + String toString() => _$toString(); + + final int width; + final int height; +} diff --git a/app/lib/size.g.dart b/app/lib/size.g.dart new file mode 100644 index 00000000..0de7e1bb --- /dev/null +++ b/app/lib/size.g.dart @@ -0,0 +1,14 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'size.dart'; + +// ************************************************************************** +// ToStringGenerator +// ************************************************************************** + +extension _$SizeIntToString on SizeInt { + String _$toString() { + // ignore: unnecessary_string_interpolations + return "SizeInt {width: $width, height: $height}"; + } +} diff --git a/app/lib/widget/image_enhancer.dart b/app/lib/widget/image_enhancer.dart index a68b9b08..eda803c5 100644 --- a/app/lib/widget/image_enhancer.dart +++ b/app/lib/widget/image_enhancer.dart @@ -27,7 +27,7 @@ import 'package:nc_photos/url_launcher_util.dart'; import 'package:nc_photos/widget/handler/permission_handler.dart'; import 'package:nc_photos/widget/image_editor_persist_option_dialog.dart'; import 'package:nc_photos/widget/selectable.dart'; -import 'package:nc_photos/widget/settings.dart'; +import 'package:nc_photos/widget/settings/enhancement_settings.dart'; import 'package:nc_photos/widget/stateful_slider.dart'; import 'package:nc_photos_plugin/nc_photos_plugin.dart'; import 'package:np_codegen/np_codegen.dart'; diff --git a/app/lib/widget/my_app.dart b/app/lib/widget/my_app.dart index e06b92e1..6eb94e3e 100644 --- a/app/lib/widget/my_app.dart +++ b/app/lib/widget/my_app.dart @@ -38,6 +38,7 @@ import 'package:nc_photos/widget/result_viewer.dart'; import 'package:nc_photos/widget/root_picker.dart'; import 'package:nc_photos/widget/settings.dart'; import 'package:nc_photos/widget/settings/account_settings.dart'; +import 'package:nc_photos/widget/settings/enhancement_settings.dart'; import 'package:nc_photos/widget/settings/language_settings.dart'; import 'package:nc_photos/widget/setup.dart'; import 'package:nc_photos/widget/share_folder_picker.dart'; @@ -191,6 +192,7 @@ class _WrappedAppState extends State<_WrappedApp> CollectionPicker.routeName: CollectionPicker.buildRoute, LanguageSettings.routeName: LanguageSettings.buildRoute, PeopleBrowser.routeName: PeopleBrowser.buildRoute, + EnhancementSettings.routeName: EnhancementSettings.buildRoute, }; Route? _onGenerateRoute(RouteSettings settings) { @@ -215,7 +217,6 @@ class _WrappedAppState extends State<_WrappedApp> route ??= _handleShareFolderPickerRoute(settings); route ??= _handleEnhancedPhotoBrowserRoute(settings); route ??= _handleLocalFileViewerRoute(settings); - route ??= _handleEnhancementSettingsRoute(settings); route ??= _handleImageEditorRoute(settings); route ??= _handleChangelogRoute(settings); route ??= _handlePlacesBrowserRoute(settings); @@ -488,18 +489,6 @@ class _WrappedAppState extends State<_WrappedApp> return null; } - Route? _handleEnhancementSettingsRoute(RouteSettings settings) { - try { - if (settings.name == EnhancementSettings.routeName) { - return EnhancementSettings.buildRoute(); - } - } catch (e) { - _log.severe( - "[_handleEnhancementSettingsRoute] Failed while handling route", e); - } - return null; - } - Route? _handleImageEditorRoute(RouteSettings settings) { try { if (settings.name == ImageEditor.routeName && diff --git a/app/lib/widget/settings.dart b/app/lib/widget/settings.dart index 945db092..6154f356 100644 --- a/app/lib/widget/settings.dart +++ b/app/lib/widget/settings.dart @@ -7,19 +7,18 @@ import 'package:nc_photos/account.dart'; import 'package:nc_photos/app_localizations.dart'; import 'package:nc_photos/controller/pref_controller.dart'; import 'package:nc_photos/debug_util.dart'; -import 'package:nc_photos/entity/pref.dart'; import 'package:nc_photos/k.dart' as k; import 'package:nc_photos/language_util.dart' as language_util; import 'package:nc_photos/mobile/platform.dart' if (dart.library.html) 'package:nc_photos/web/platform.dart' as platform; import 'package:nc_photos/platform/features.dart' as features; import 'package:nc_photos/platform/notification.dart'; -import 'package:nc_photos/snack_bar_manager.dart'; import 'package:nc_photos/stream_util.dart'; import 'package:nc_photos/url_launcher_util.dart'; import 'package:nc_photos/widget/list_tile_center_leading.dart'; import 'package:nc_photos/widget/settings/collection_settings.dart'; import 'package:nc_photos/widget/settings/developer_settings.dart'; +import 'package:nc_photos/widget/settings/enhancement_settings.dart'; import 'package:nc_photos/widget/settings/expert_settings.dart'; import 'package:nc_photos/widget/settings/language_settings.dart'; import 'package:nc_photos/widget/settings/metadata_settings.dart'; @@ -28,9 +27,7 @@ import 'package:nc_photos/widget/settings/photos_settings.dart'; import 'package:nc_photos/widget/settings/settings_list_caption.dart'; import 'package:nc_photos/widget/settings/theme_settings.dart'; import 'package:nc_photos/widget/settings/viewer_settings.dart'; -import 'package:nc_photos/widget/stateful_slider.dart'; import 'package:np_codegen/np_codegen.dart'; -import 'package:tuple/tuple.dart'; part 'settings.g.dart'; @@ -292,250 +289,5 @@ class _SubPageItem extends StatelessWidget { final Widget Function() pageBuilder; } -class EnhancementSettings extends StatefulWidget { - static const routeName = "/enhancement-settings"; - - static Route buildRoute() => MaterialPageRoute( - builder: (_) => const EnhancementSettings(), - ); - - const EnhancementSettings({ - Key? key, - }) : super(key: key); - - @override - createState() => _EnhancementSettingsState(); -} - -@npLog -class _EnhancementSettingsState extends State { - @override - initState() { - super.initState(); - _maxWidth = Pref().getEnhanceMaxWidthOr(); - _maxHeight = Pref().getEnhanceMaxHeightOr(); - _isSaveEditResultToServer = Pref().isSaveEditResultToServerOr(); - } - - @override - build(BuildContext context) { - return Scaffold( - body: Builder( - builder: (context) => _buildContent(context), - ), - ); - } - - Widget _buildContent(BuildContext context) { - return CustomScrollView( - slivers: [ - SliverAppBar( - pinned: true, - title: Text(L10n.global().settingsImageEditTitle), - ), - SliverList( - delegate: SliverChildListDelegate( - [ - SwitchListTile( - title: Text( - L10n.global().settingsImageEditSaveResultsToServerTitle), - subtitle: Text(_isSaveEditResultToServer - ? L10n.global() - .settingsImageEditSaveResultsToServerTrueDescription - : L10n.global() - .settingsImageEditSaveResultsToServerFalseDescription), - value: _isSaveEditResultToServer, - onChanged: _onSaveEditResultToServerChanged, - ), - ListTile( - title: Text(L10n.global().settingsEnhanceMaxResolutionTitle2), - subtitle: Text("${_maxWidth}x$_maxHeight"), - onTap: () => _onMaxResolutionTap(context), - ), - ], - ), - ), - ], - ); - } - - Future _onMaxResolutionTap(BuildContext context) async { - var width = _maxWidth; - var height = _maxHeight; - final result = await showDialog( - context: context, - builder: (_) => AlertDialog( - title: Text(L10n.global().settingsEnhanceMaxResolutionTitle2), - content: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text(L10n.global().settingsEnhanceMaxResolutionDescription), - const SizedBox(height: 16), - _EnhanceResolutionSlider( - initialWidth: _maxWidth, - initialHeight: _maxHeight, - onChanged: (value) { - width = value.item1; - height = value.item2; - }, - ) - ], - ), - actions: [ - TextButton( - onPressed: () { - Navigator.of(context).pop(true); - }, - child: Text(MaterialLocalizations.of(context).okButtonLabel), - ), - ], - ), - ); - if (result != true || (width == _maxWidth && height == _maxHeight)) { - return; - } - - unawaited(_setMaxResolution(width, height)); - } - - Future _setMaxResolution(int width, int height) async { - _log.info( - "[_setMaxResolution] ${_maxWidth}x$_maxHeight -> ${width}x$height"); - final oldWidth = _maxWidth; - final oldHeight = _maxHeight; - setState(() { - _maxWidth = width; - _maxHeight = height; - }); - if (!await Pref().setEnhanceMaxWidth(width) || - !await Pref().setEnhanceMaxHeight(height)) { - _log.severe("[_setMaxResolution] Failed writing pref"); - SnackBarManager().showSnackBar(SnackBar( - content: Text(L10n.global().writePreferenceFailureNotification), - duration: k.snackBarDurationNormal, - )); - await Pref().setEnhanceMaxWidth(oldWidth); - setState(() { - _maxWidth = oldWidth; - _maxHeight = oldHeight; - }); - } - } - - Future _onSaveEditResultToServerChanged(bool value) async { - final oldValue = _isSaveEditResultToServer; - setState(() { - _isSaveEditResultToServer = value; - }); - if (!await Pref().setSaveEditResultToServer(value)) { - _log.severe("[_onSaveEditResultToServerChanged] Failed writing pref"); - SnackBarManager().showSnackBar(SnackBar( - content: Text(L10n.global().writePreferenceFailureNotification), - duration: k.snackBarDurationNormal, - )); - setState(() { - _isSaveEditResultToServer = oldValue; - }); - } - } - - late int _maxWidth; - late int _maxHeight; - late bool _isSaveEditResultToServer; -} - -class _EnhanceResolutionSlider extends StatefulWidget { - const _EnhanceResolutionSlider({ - Key? key, - required this.initialWidth, - required this.initialHeight, - this.onChanged, - }) : super(key: key); - - @override - createState() => _EnhanceResolutionSliderState(); - - final int initialWidth; - final int initialHeight; - final ValueChanged>? onChanged; -} - -class _EnhanceResolutionSliderState extends State<_EnhanceResolutionSlider> { - @override - initState() { - super.initState(); - _width = widget.initialWidth; - _height = widget.initialHeight; - } - - @override - build(BuildContext context) { - return Column( - children: [ - Align( - alignment: Alignment.center, - child: Text("${_width}x$_height"), - ), - StatefulSlider( - initialValue: resolutionToSliderValue(_width).toDouble(), - min: -3, - max: 3, - divisions: 6, - onChangeEnd: (value) async { - final resolution = sliderValueToResolution(value.toInt()); - setState(() { - _width = resolution.item1; - _height = resolution.item2; - }); - widget.onChanged?.call(resolution); - }, - ), - ], - ); - } - - static Tuple2 sliderValueToResolution(int value) { - switch (value) { - case -3: - return const Tuple2(1024, 768); - case -2: - return const Tuple2(1280, 960); - case -1: - return const Tuple2(1600, 1200); - case 1: - return const Tuple2(2560, 1920); - case 2: - return const Tuple2(3200, 2400); - case 3: - return const Tuple2(4096, 3072); - default: - return const Tuple2(2048, 1536); - } - } - - static int resolutionToSliderValue(int width) { - switch (width) { - case 1024: - return -3; - case 1280: - return -2; - case 1600: - return -1; - case 2560: - return 1; - case 3200: - return 2; - case 4096: - return 3; - default: - return 0; - } - } - - late int _width; - late int _height; -} - // final _enabledExperiments = [ // ]; diff --git a/app/lib/widget/settings.g.dart b/app/lib/widget/settings.g.dart index 628387e5..2a03c031 100644 --- a/app/lib/widget/settings.g.dart +++ b/app/lib/widget/settings.g.dart @@ -12,10 +12,3 @@ extension _$_SettingsStateNpLog on _SettingsState { static final log = Logger("widget.settings._SettingsState"); } - -extension _$_EnhancementSettingsStateNpLog on _EnhancementSettingsState { - // ignore: unused_element - Logger get _log => log; - - static final log = Logger("widget.settings._EnhancementSettingsState"); -} diff --git a/app/lib/widget/settings/enhancement/bloc.dart b/app/lib/widget/settings/enhancement/bloc.dart new file mode 100644 index 00000000..d95597d7 --- /dev/null +++ b/app/lib/widget/settings/enhancement/bloc.dart @@ -0,0 +1,54 @@ +part of '../enhancement_settings.dart'; + +@npLog +class _Bloc extends Bloc<_Event, _State> with BlocLogger { + _Bloc({ + required this.prefController, + }) : super(_State( + isSaveEditResultToServer: + prefController.isSaveEditResultToServer.value, + maxSize: prefController.enhanceMaxSize.value, + )) { + on<_Init>(_onInit); + on<_SetSaveEditResultToServer>(_onSetSaveEditResultToServer); + on<_SetMaxSize>(_onSetMaxSize); + } + + @override + String get tag => _log.fullName; + + Future _onInit(_Init ev, Emitter<_State> emit) async { + _log.info(ev); + await Future.wait([ + emit.forEach( + prefController.isSaveEditResultToServer, + onData: (data) => state.copyWith(isSaveEditResultToServer: data), + onError: (e, stackTrace) { + _log.severe("[_onInit] Uncaught exception", e, stackTrace); + return state.copyWith(error: ExceptionEvent(e, stackTrace)); + }, + ), + emit.forEach( + prefController.enhanceMaxSize, + onData: (data) => state.copyWith(maxSize: data), + onError: (e, stackTrace) { + _log.severe("[_onInit] Uncaught exception", e, stackTrace); + return state.copyWith(error: ExceptionEvent(e, stackTrace)); + }, + ), + ]); + } + + void _onSetSaveEditResultToServer( + _SetSaveEditResultToServer ev, Emitter<_State> emit) { + _log.info(ev); + prefController.setSaveEditResultToServer(ev.value); + } + + void _onSetMaxSize(_SetMaxSize ev, Emitter<_State> emit) { + _log.info(ev); + prefController.setEnhanceMaxSize(ev.value); + } + + final PrefController prefController; +} diff --git a/app/lib/widget/settings/enhancement/state_event.dart b/app/lib/widget/settings/enhancement/state_event.dart new file mode 100644 index 00000000..e39a6107 --- /dev/null +++ b/app/lib/widget/settings/enhancement/state_event.dart @@ -0,0 +1,51 @@ +part of '../enhancement_settings.dart'; + +@genCopyWith +@toString +class _State { + const _State({ + required this.isSaveEditResultToServer, + required this.maxSize, + this.error, + }); + + @override + String toString() => _$toString(); + + final bool isSaveEditResultToServer; + final SizeInt maxSize; + + final ExceptionEvent? error; +} + +abstract class _Event { + const _Event(); +} + +@toString +class _Init implements _Event { + const _Init(); + + @override + String toString() => _$toString(); +} + +@toString +class _SetSaveEditResultToServer implements _Event { + const _SetSaveEditResultToServer(this.value); + + @override + String toString() => _$toString(); + + final bool value; +} + +@toString +class _SetMaxSize implements _Event { + const _SetMaxSize(this.value); + + @override + String toString() => _$toString(); + + final SizeInt value; +} diff --git a/app/lib/widget/settings/enhancement_settings.dart b/app/lib/widget/settings/enhancement_settings.dart new file mode 100644 index 00000000..8c30e6e6 --- /dev/null +++ b/app/lib/widget/settings/enhancement_settings.dart @@ -0,0 +1,262 @@ +import 'package:copy_with/copy_with.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:logging/logging.dart'; +import 'package:nc_photos/app_localizations.dart'; +import 'package:nc_photos/bloc_util.dart'; +import 'package:nc_photos/controller/pref_controller.dart'; +import 'package:nc_photos/exception_event.dart'; +import 'package:nc_photos/exception_util.dart' as exception_util; +import 'package:nc_photos/k.dart' as k; +import 'package:nc_photos/size.dart'; +import 'package:nc_photos/snack_bar_manager.dart'; +import 'package:nc_photos/widget/page_visibility_mixin.dart'; +import 'package:nc_photos/widget/stateful_slider.dart'; +import 'package:np_codegen/np_codegen.dart'; +import 'package:to_string/to_string.dart'; +import 'package:tuple/tuple.dart'; + +part 'enhancement/bloc.dart'; +part 'enhancement/state_event.dart'; +part 'enhancement_settings.g.dart'; + +// typedef _BlocBuilder = BlocBuilder<_Bloc, _State>; +typedef _BlocListener = BlocListener<_Bloc, _State>; +typedef _BlocSelector = BlocSelector<_Bloc, _State, T>; + +class EnhancementSettings extends StatelessWidget { + static const routeName = "/settings/enhancement"; + + static Route buildRoute() => MaterialPageRoute( + builder: (_) => const EnhancementSettings(), + ); + + const EnhancementSettings({super.key}); + + @override + Widget build(BuildContext context) { + return BlocProvider( + create: (_) => _Bloc( + prefController: context.read(), + ), + child: const _WrappedEnhancementSettings(), + ); + } +} + +class _WrappedEnhancementSettings extends StatefulWidget { + const _WrappedEnhancementSettings(); + + @override + State createState() => _WrappedEnhancementSettingsState(); +} + +class _WrappedEnhancementSettingsState + extends State<_WrappedEnhancementSettings> + with RouteAware, PageVisibilityMixin { + @override + void initState() { + super.initState(); + _bloc.add(const _Init()); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: MultiBlocListener( + listeners: [ + _BlocListener( + listenWhen: (previous, current) => previous.error != current.error, + listener: (context, state) { + if (state.error != null && isPageVisible()) { + SnackBarManager().showSnackBar(SnackBar( + content: + Text(exception_util.toUserString(state.error!.error)), + duration: k.snackBarDurationNormal, + )); + } + }, + ), + ], + child: CustomScrollView( + slivers: [ + SliverAppBar( + pinned: true, + title: Text(L10n.global().photosTabLabel), + ), + SliverList( + delegate: SliverChildListDelegate( + [ + _BlocSelector( + selector: (state) => state.isSaveEditResultToServer, + builder: (context, state) { + return SwitchListTile( + title: Text(L10n.global() + .settingsImageEditSaveResultsToServerTitle), + subtitle: Text(state + ? L10n.global() + .settingsImageEditSaveResultsToServerTrueDescription + : L10n.global() + .settingsImageEditSaveResultsToServerFalseDescription), + value: state, + onChanged: (value) { + _bloc.add(_SetSaveEditResultToServer(value)); + }, + ); + }, + ), + _BlocSelector( + selector: (state) => state.maxSize, + builder: (context, state) { + return ListTile( + title: Text( + L10n.global().settingsEnhanceMaxResolutionTitle2), + subtitle: Text("${state.width}x${state.height}"), + onTap: () => _onMaxSizeTap(context, state), + ); + }, + ), + ], + ), + ), + ], + ), + ), + ); + } + + Future _onMaxSizeTap(BuildContext context, SizeInt initialSize) async { + var width = initialSize.width; + var height = initialSize.height; + final result = await showDialog( + context: context, + builder: (_) => AlertDialog( + title: Text(L10n.global().settingsEnhanceMaxResolutionTitle2), + content: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text(L10n.global().settingsEnhanceMaxResolutionDescription), + const SizedBox(height: 16), + _SizeSlider( + initialWidth: initialSize.width, + initialHeight: initialSize.height, + onChanged: (value) { + width = value.item1; + height = value.item2; + }, + ) + ], + ), + actions: [ + TextButton( + onPressed: () { + Navigator.of(context).pop(true); + }, + child: Text(MaterialLocalizations.of(context).okButtonLabel), + ), + ], + ), + ); + if (!context.mounted || + result != true || + (width == initialSize.width && height == initialSize.height)) { + return; + } + _bloc.add(_SetMaxSize(SizeInt(width, height))); + } + + late final _bloc = context.read<_Bloc>(); +} + +class _SizeSlider extends StatefulWidget { + const _SizeSlider({ + Key? key, + required this.initialWidth, + required this.initialHeight, + this.onChanged, + }) : super(key: key); + + @override + createState() => _SizeSliderState(); + + final int initialWidth; + final int initialHeight; + final ValueChanged>? onChanged; +} + +class _SizeSliderState extends State<_SizeSlider> { + @override + initState() { + super.initState(); + _width = widget.initialWidth; + _height = widget.initialHeight; + } + + @override + build(BuildContext context) { + return Column( + children: [ + Align( + alignment: Alignment.center, + child: Text("${_width}x$_height"), + ), + StatefulSlider( + initialValue: resolutionToSliderValue(_width).toDouble(), + min: -3, + max: 3, + divisions: 6, + onChangeEnd: (value) async { + final resolution = sliderValueToResolution(value.toInt()); + setState(() { + _width = resolution.item1; + _height = resolution.item2; + }); + widget.onChanged?.call(resolution); + }, + ), + ], + ); + } + + static Tuple2 sliderValueToResolution(int value) { + switch (value) { + case -3: + return const Tuple2(1024, 768); + case -2: + return const Tuple2(1280, 960); + case -1: + return const Tuple2(1600, 1200); + case 1: + return const Tuple2(2560, 1920); + case 2: + return const Tuple2(3200, 2400); + case 3: + return const Tuple2(4096, 3072); + default: + return const Tuple2(2048, 1536); + } + } + + static int resolutionToSliderValue(int width) { + switch (width) { + case 1024: + return -3; + case 1280: + return -2; + case 1600: + return -1; + case 2560: + return 1; + case 3200: + return 2; + case 4096: + return 3; + default: + return 0; + } + } + + late int _width; + late int _height; +} diff --git a/app/lib/widget/settings/enhancement_settings.g.dart b/app/lib/widget/settings/enhancement_settings.g.dart new file mode 100644 index 00000000..69bfd324 --- /dev/null +++ b/app/lib/widget/settings/enhancement_settings.g.dart @@ -0,0 +1,86 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'enhancement_settings.dart'; + +// ************************************************************************** +// CopyWithLintRuleGenerator +// ************************************************************************** + +// ignore_for_file: library_private_types_in_public_api, duplicate_ignore + +// ************************************************************************** +// CopyWithGenerator +// ************************************************************************** + +abstract class $_StateCopyWithWorker { + _State call( + {bool? isSaveEditResultToServer, + SizeInt? maxSize, + ExceptionEvent? error}); +} + +class _$_StateCopyWithWorkerImpl implements $_StateCopyWithWorker { + _$_StateCopyWithWorkerImpl(this.that); + + @override + _State call( + {dynamic isSaveEditResultToServer, + dynamic maxSize, + dynamic error = copyWithNull}) { + return _State( + isSaveEditResultToServer: + isSaveEditResultToServer as bool? ?? that.isSaveEditResultToServer, + maxSize: maxSize as SizeInt? ?? that.maxSize, + error: error == copyWithNull ? that.error : error as ExceptionEvent?); + } + + final _State that; +} + +extension $_StateCopyWith on _State { + $_StateCopyWithWorker get copyWith => _$copyWith; + $_StateCopyWithWorker get _$copyWith => _$_StateCopyWithWorkerImpl(this); +} + +// ************************************************************************** +// NpLogGenerator +// ************************************************************************** + +extension _$_BlocNpLog on _Bloc { + // ignore: unused_element + Logger get _log => log; + + static final log = Logger("widget.settings.enhancement_settings._Bloc"); +} + +// ************************************************************************** +// ToStringGenerator +// ************************************************************************** + +extension _$_StateToString on _State { + String _$toString() { + // ignore: unnecessary_string_interpolations + return "_State {isSaveEditResultToServer: $isSaveEditResultToServer, maxSize: $maxSize, error: $error}"; + } +} + +extension _$_InitToString on _Init { + String _$toString() { + // ignore: unnecessary_string_interpolations + return "_Init {}"; + } +} + +extension _$_SetSaveEditResultToServerToString on _SetSaveEditResultToServer { + String _$toString() { + // ignore: unnecessary_string_interpolations + return "_SetSaveEditResultToServer {value: $value}"; + } +} + +extension _$_SetMaxSizeToString on _SetMaxSize { + String _$toString() { + // ignore: unnecessary_string_interpolations + return "_SetMaxSize {value: $value}"; + } +}