migrated to outlined icons

This commit is contained in:
Vadim 2024-05-07 20:39:40 +02:00
parent 2ba0a8f5bd
commit 8b9cd0dd19
38 changed files with 70 additions and 88 deletions

View file

@ -32,8 +32,8 @@ class MeteringBottomControls extends StatelessWidget {
onPressed: onSwitchEvSourceType,
icon: Icon(
UserPreferencesProvider.evSourceTypeOf(context) != EvSourceType.camera
? Icons.camera_rear
: Icons.wb_incandescent,
? Icons.camera_rear_outlined
: Icons.wb_incandescent_outlined,
),
tooltip: UserPreferencesProvider.evSourceTypeOf(context) != EvSourceType.camera
? S.of(context).tooltipUseCamera
@ -48,7 +48,7 @@ class MeteringBottomControls extends StatelessWidget {
),
right: IconButton.filledTonal(
onPressed: onSettings,
icon: const Icon(Icons.settings),
icon: const Icon(Icons.settings_outlined),
tooltip: S.of(context).tooltipOpenSettings,
),
);

View file

@ -21,7 +21,7 @@ class ExposureOffsetSlider extends StatelessWidget {
range: range,
value: value,
onChanged: onChanged,
icon: Icons.light_mode,
icon: Icons.light_mode_outlined,
defaultValue: 0,
rulerValueAdapter: (value) => value.toStringSignedAsFixed(0),
valueAdapter: (value) => S.of(context).evValue(value.toStringSignedAsFixed(1)),

View file

@ -32,7 +32,7 @@ class _ZoomSliderState extends State<ZoomSlider> {
range: widget.range,
value: widget.value,
onChanged: widget.onChanged,
icon: Icons.search,
icon: Icons.search_outlined,
defaultValue: EquipmentProfiles.selectedOf(context).lensZoom,
rulerValueAdapter: (value) => value.toStringAsFixed(0),
valueAdapter: (value) => value.toZoom(),

View file

@ -20,15 +20,12 @@ class CameraControlsPlaceholder extends StatelessWidget {
children: [
IconButton(
onPressed: onReset,
icon: Icon(error == CameraErrorType.permissionNotGranted ? Icons.settings : Icons.sync),
icon: Icon(error == CameraErrorType.permissionNotGranted ? Icons.settings_outlined : Icons.sync_outlined),
),
const SizedBox(height: Dimens.grid8),
Text(
error.toStringLocalized(context),
style: Theme.of(context)
.textTheme
.bodyMedium
?.copyWith(color: Theme.of(context).colorScheme.onBackground),
style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: Theme.of(context).colorScheme.onBackground),
textAlign: TextAlign.center,
),
],

View file

@ -12,7 +12,7 @@ class CameraViewPlaceholder extends StatelessWidget {
return Card(
color: error != null ? null : Colors.black,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(Dimens.borderRadiusM)),
child: Center(child: error != null ? const Icon(Icons.no_photography) : null),
child: Center(child: error != null ? const Icon(Icons.no_photography_outlined) : null),
);
}
}

View file

@ -19,7 +19,7 @@ class ExposurePairsList extends StatelessWidget {
duration: Dimens.switchDuration,
child: exposurePairs.isEmpty
? IconPlaceholder(
icon: Icons.not_interested,
icon: Icons.not_interested_outlined,
text: S.of(context).noExposurePairs,
)
: Stack(

View file

@ -11,7 +11,7 @@ class EquipmentProfilePicker extends StatelessWidget {
@override
Widget build(BuildContext context) {
return AnimatedDialogPicker<EquipmentProfile>(
icon: Icons.camera,
icon: Icons.camera_outlined,
title: S.of(context).equipmentProfile,
selectedValue: EquipmentProfiles.selectedOf(context),
values: EquipmentProfiles.of(context),

View file

@ -13,7 +13,7 @@ class FilmPicker extends StatelessWidget {
@override
Widget build(BuildContext context) {
return AnimatedDialogPicker<Film>(
icon: Icons.camera_roll,
icon: Icons.camera_roll_outlined,
title: S.of(context).film,
subtitle: S.of(context).filmReciprocityHint,
selectedValue: Films.selectedOf(context),
@ -23,17 +23,14 @@ class FilmPicker extends StatelessWidget {
closedChild: ReadingValueContainer.singleValue(
value: ReadingValue(
label: _label(context),
value: Films.selectedOf(context).name.isEmpty
? S.of(context).none
: Films.selectedOf(context).name,
value: Films.selectedOf(context).name.isEmpty ? S.of(context).none : Films.selectedOf(context).name,
),
),
);
}
String _label(BuildContext context) {
if (Films.selectedOf(context) == const Film.other() ||
Films.selectedOf(context).iso == selectedIso.value) {
if (Films.selectedOf(context) == const Film.other() || Films.selectedOf(context).iso == selectedIso.value) {
return S.of(context).film;
}

View file

@ -18,16 +18,15 @@ class IsoValuePicker extends StatelessWidget {
@override
Widget build(BuildContext context) {
return AnimatedDialogPicker<IsoValue>(
icon: Icons.iso,
icon: Icons.iso_outlined,
title: S.of(context).iso,
subtitle: S.of(context).filmSpeed,
selectedValue: selectedValue,
values: values,
itemTitleBuilder: (_, value) => Text(value.value.toString()),
// using ascending order, because increase in film speed rises EV
itemTrailingBuilder: (selected, value) => value.value != selected.value
? Text(S.of(context).evValue(selected.toStringDifference(value)))
: null,
itemTrailingBuilder: (selected, value) =>
value.value != selected.value ? Text(S.of(context).evValue(selected.toStringDifference(value))) : null,
onChanged: onChanged,
closedChild: ReadingValueContainer.singleValue(
value: ReadingValue(

View file

@ -18,7 +18,7 @@ class NdValuePicker extends StatelessWidget {
@override
Widget build(BuildContext context) {
return AnimatedDialogPicker<NdValue>(
icon: Icons.filter_b_and_w,
icon: Icons.filter_b_and_w_outlined,
title: S.of(context).nd,
subtitle: S.of(context).ndFilterFactor,
selectedValue: selectedValue,

View file

@ -60,7 +60,7 @@ class ReadingValueContainer extends StatelessWidget implements AnimatedDialogClo
top: 0,
right: 0,
child: Icon(
Icons.lock,
Icons.lock_outlined,
size: Theme.of(context).textTheme.labelMedium!.fontSize,
color: Theme.of(context).colorScheme.onPrimaryContainer,
),

View file

@ -9,7 +9,7 @@ class ReportIssueListTile extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListTile(
leading: const Icon(Icons.bug_report),
leading: const Icon(Icons.bug_report_outlined),
title: Text(S.of(context).reportIssue),
onTap: () {
launchUrl(

View file

@ -8,7 +8,7 @@ class RestorePurchasesListTile extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListTile(
leading: const Icon(Icons.restore),
leading: const Icon(Icons.restore_outlined),
title: Text(S.of(context).restorePurchases),
onTap: IAPProductsProvider.of(context).restorePurchases,
);

View file

@ -9,7 +9,7 @@ class SourceCodeListTile extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListTile(
leading: const Icon(Icons.code),
leading: const Icon(Icons.code_outlined),
title: Text(S.of(context).sourceCode),
onTap: () {
launchUrl(

View file

@ -10,7 +10,7 @@ class WriteEmailListTile extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListTile(
leading: const Icon(Icons.email),
leading: const Icon(Icons.email_outlined),
title: Text(S.of(context).writeEmail),
onTap: () {
final mailToUrl = Uri.parse('mailto:$contactEmail?subject=M3 Lightmeter');

View file

@ -12,7 +12,7 @@ class CaffeineListTile extends StatelessWidget {
Widget build(BuildContext context) {
return BlocBuilder<CaffeineListTileBloc, bool>(
builder: (context, state) => SwitchListTile(
secondary: const Icon(Icons.screen_lock_portrait),
secondary: const Icon(Icons.screen_lock_portrait_outlined),
title: Text(S.of(context).keepScreenOn),
value: state,
onChanged: context.read<CaffeineListTileBloc>().onCaffeineChanged,

View file

@ -12,7 +12,7 @@ class HapticsListTile extends StatelessWidget {
Widget build(BuildContext context) {
return BlocBuilder<HapticsListTileBloc, bool>(
builder: (context, state) => SwitchListTile(
secondary: const Icon(Icons.vibration),
secondary: const Icon(Icons.vibration_outlined),
title: Text(S.of(context).haptics),
value: state,
onChanged: context.read<HapticsListTileBloc>().onHapticsChanged,

View file

@ -10,14 +10,14 @@ class LanguageListTile extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListTile(
leading: const Icon(Icons.language),
leading: const Icon(Icons.language_outlined),
title: Text(S.of(context).language),
trailing: Text(UserPreferencesProvider.localeOf(context).localizedName),
onTap: () {
showDialog<SupportedLocale>(
context: context,
builder: (_) => DialogPicker<SupportedLocale>(
icon: Icons.language,
icon: Icons.language_outlined,
title: S.of(context).chooseLanguage,
selectedValue: UserPreferencesProvider.localeOf(context),
values: SupportedLocale.values,

View file

@ -11,7 +11,7 @@ class VolumeActionsListTile extends StatelessWidget {
Widget build(BuildContext context) {
return BlocBuilder<VolumeActionsListTileBloc, bool>(
builder: (context, state) => SwitchListTile(
secondary: const Icon(Icons.volume_up),
secondary: const Icon(Icons.volume_up_outlined),
title: Text(S.of(context).volumeKeysAction),
value: state,
onChanged: context.read<VolumeActionsListTileBloc>().onVolumeActionChanged,

View file

@ -12,7 +12,7 @@ class BuyProListTile extends StatelessWidget {
final status = IAPProducts.productOf(context, IAPProductType.paidFeatures)?.status;
final isPending = status == IAPProductStatus.purchased || status == null;
return ListTile(
leading: const Icon(Icons.star),
leading: const Icon(Icons.star_outlined),
title: Text(S.of(context).unlockProFeatures),
onTap: !isPending
? () {

View file

@ -16,7 +16,7 @@ class CalibrationDialog extends StatelessWidget {
Widget build(BuildContext context) {
final bool hasLightSensor = ServicesProvider.of(context).environment.hasLightSensor;
return AlertDialog(
icon: const Icon(Icons.settings_brightness),
icon: const Icon(Icons.settings_brightness_outlined),
titlePadding: Dimens.dialogIconTitlePadding,
title: Text(S.of(context).calibration),
contentPadding: const EdgeInsets.symmetric(horizontal: Dimens.paddingL),
@ -25,38 +25,27 @@ class CalibrationDialog extends StatelessWidget {
mainAxisSize: MainAxisSize.min,
children: [
Text(
hasLightSensor
? S.of(context).calibrationMessage
: S.of(context).calibrationMessageCameraOnly,
hasLightSensor ? S.of(context).calibrationMessage : S.of(context).calibrationMessageCameraOnly,
),
const SizedBox(height: Dimens.grid16),
BlocBuilder<CalibrationDialogBloc, CalibrationDialogState>(
buildWhen: (previous, current) =>
previous.cameraEvCalibration != current.cameraEvCalibration,
buildWhen: (previous, current) => previous.cameraEvCalibration != current.cameraEvCalibration,
builder: (context, state) => _CalibrationUnit(
title: S.of(context).camera,
value: state.cameraEvCalibration,
onChanged: (value) => context
.read<CalibrationDialogBloc>()
.add(CameraEvCalibrationChangedEvent(value)),
onReset: () => context
.read<CalibrationDialogBloc>()
.add(const CameraEvCalibrationResetEvent()),
onChanged: (value) => context.read<CalibrationDialogBloc>().add(CameraEvCalibrationChangedEvent(value)),
onReset: () => context.read<CalibrationDialogBloc>().add(const CameraEvCalibrationResetEvent()),
),
),
if (hasLightSensor)
BlocBuilder<CalibrationDialogBloc, CalibrationDialogState>(
buildWhen: (previous, current) =>
previous.lightSensorEvCalibration != current.lightSensorEvCalibration,
buildWhen: (previous, current) => previous.lightSensorEvCalibration != current.lightSensorEvCalibration,
builder: (context, state) => _CalibrationUnit(
title: S.of(context).lightSensor,
value: state.lightSensorEvCalibration,
onChanged: (value) => context
.read<CalibrationDialogBloc>()
.add(LightSensorEvCalibrationChangedEvent(value)),
onReset: () => context
.read<CalibrationDialogBloc>()
.add(const LightSensorEvCalibrationResetEvent()),
onChanged: (value) =>
context.read<CalibrationDialogBloc>().add(LightSensorEvCalibrationChangedEvent(value)),
onReset: () => context.read<CalibrationDialogBloc>().add(const LightSensorEvCalibrationResetEvent()),
),
),
],
@ -116,7 +105,7 @@ class _CalibrationUnit extends StatelessWidget {
),
IconButton(
onPressed: onReset,
icon: const Icon(Icons.sync),
icon: const Icon(Icons.sync_outlined),
tooltip: S.of(context).tooltipResetToZero,
),
],

View file

@ -9,7 +9,7 @@ class CalibrationListTile extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListTile(
leading: const Icon(Icons.settings_brightness),
leading: const Icon(Icons.settings_brightness_outlined),
title: Text(S.of(context).calibration),
onTap: () {
showDialog<double>(

View file

@ -11,13 +11,13 @@ class CameraFeaturesListTile extends StatelessWidget {
@override
Widget build(BuildContext context) {
return IAPListTile(
leading: const Icon(Icons.camera_alt),
leading: const Icon(Icons.camera_alt_outlined),
title: Text(S.of(context).cameraFeatures),
onTap: () {
showDialog(
context: context,
builder: (_) => DialogSwitch<CameraFeature>(
icon: Icons.layers_outlined,
icon: Icons.camera_alt_outlined,
title: S.of(context).cameraFeatures,
values: UserPreferencesProvider.cameraConfigOf(context),
titleAdapter: (context, feature) {

View file

@ -171,7 +171,7 @@ class _AnimatedNameLeading extends AnimatedWidget {
return Padding(
padding: EdgeInsets.only(right: _progress.value * Dimens.grid8),
child: Icon(
Icons.edit,
Icons.edit_outlined,
size: _progress.value * Dimens.grid24,
),
);
@ -194,7 +194,7 @@ class _AnimatedArrowButton extends AnimatedWidget {
onPressed: onPressed,
icon: Transform.rotate(
angle: _progress.value * pi,
child: const Icon(Icons.keyboard_arrow_down),
child: const Icon(Icons.keyboard_arrow_down_outlined),
),
tooltip: _progress.value == 0 ? S.of(context).tooltipExpand : S.of(context).tooltipCollapse,
);
@ -239,7 +239,7 @@ class _AnimatedEquipmentListTiles extends AnimatedWidget {
child: Column(
children: [
FilterListTile<IsoValue>(
icon: Icons.iso,
icon: Icons.iso_outlined,
title: S.of(context).isoValues,
description: S.of(context).isoValuesFilterDescription,
values: IsoValue.values,
@ -247,7 +247,7 @@ class _AnimatedEquipmentListTiles extends AnimatedWidget {
onChanged: onIsoValuesSelecred,
),
FilterListTile<NdValue>(
icon: Icons.filter_b_and_w,
icon: Icons.filter_b_and_w_outlined,
title: S.of(context).ndFilters,
description: S.of(context).ndFiltersFilterDescription,
values: NdValue.values,
@ -255,7 +255,7 @@ class _AnimatedEquipmentListTiles extends AnimatedWidget {
onChanged: onNdValuesSelected,
),
RangePickerListTile<ApertureValue>(
icon: Icons.camera,
icon: Icons.camera_outlined,
title: S.of(context).apertureValues,
description: S.of(context).apertureValuesFilterDescription,
values: ApertureValue.values,
@ -263,7 +263,7 @@ class _AnimatedEquipmentListTiles extends AnimatedWidget {
onChanged: onApertureValuesSelected,
),
RangePickerListTile<ShutterSpeedValue>(
icon: Icons.shutter_speed,
icon: Icons.shutter_speed_outlined,
title: S.of(context).shutterSpeedValues,
description: S.of(context).shutterSpeedValuesFilterDescription,
values: ShutterSpeedValue.values,
@ -275,7 +275,7 @@ class _AnimatedEquipmentListTiles extends AnimatedWidget {
value.value == 1 ? S.of(context).shutterSpeedManual : value.toString(),
),
SliderPickerListTile(
icon: Icons.zoom_in,
icon: Icons.zoom_in_outlined,
title: S.of(context).lensZoom,
description: S.of(context).lensZoomDescription,
value: equipmentData.lensZoom,
@ -291,12 +291,12 @@ class _AnimatedEquipmentListTiles extends AnimatedWidget {
children: [
IconButton(
onPressed: onCopy,
icon: const Icon(Icons.copy),
icon: const Icon(Icons.copy_outlined),
tooltip: S.of(context).tooltipCopy,
),
IconButton(
onPressed: onDelete,
icon: const Icon(Icons.delete),
icon: const Icon(Icons.delete_outlined),
tooltip: S.of(context).tooltipDelete,
),
],

View file

@ -23,7 +23,7 @@ class _EquipmentProfileNameDialogState extends State<EquipmentProfileNameDialog>
@override
Widget build(BuildContext context) {
return AlertDialog(
icon: const Icon(Icons.edit),
icon: const Icon(Icons.edit_outlined),
titlePadding: Dimens.dialogIconTitlePadding,
title: Text(S.of(context).equipmentProfileName),
content: TextField(

View file

@ -32,7 +32,7 @@ class _EquipmentProfilesScreenState extends State<EquipmentProfilesScreen> {
appBarActions: [
IconButton(
onPressed: _addProfile,
icon: const Icon(Icons.add),
icon: const Icon(Icons.add_outlined),
tooltip: S.of(context).tooltipAdd,
),
],
@ -150,7 +150,7 @@ class _EquipmentProfilesListPlaceholder extends StatelessWidget {
child: Padding(
padding: const EdgeInsets.all(Dimens.paddingL),
child: IconPlaceholder(
icon: Icons.add,
icon: Icons.add_outlined,
text: S.of(context).tapToAdd,
),
),

View file

@ -10,7 +10,7 @@ class EquipmentProfilesListTile extends StatelessWidget {
@override
Widget build(BuildContext context) {
return IAPListTile(
leading: const Icon(Icons.camera),
leading: const Icon(Icons.camera_outlined),
title: Text(S.of(context).equipmentProfiles),
onTap: () {
Navigator.of(context).push<EquipmentProfile>(

View file

@ -11,13 +11,13 @@ class FilmsListTile extends StatelessWidget {
@override
Widget build(BuildContext context) {
return IAPListTile(
leading: const Icon(Icons.camera_roll),
leading: const Icon(Icons.camera_roll_outlined),
title: Text(S.of(context).filmsInUse),
onTap: () {
showDialog<List<Film>>(
context: context,
builder: (_) => DialogFilter<Film>(
icon: const Icon(Icons.camera_roll),
icon: const Icon(Icons.camera_roll_outlined),
title: S.of(context).filmsInUse,
description: S.of(context).filmsInUseDescription,
values: Films.of(context).sublist(1),

View file

@ -10,14 +10,14 @@ class StopTypeListTile extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListTile(
leading: const Icon(Icons.straighten),
leading: const Icon(Icons.straighten_outlined),
title: Text(S.of(context).fractionalStops),
trailing: Text(_typeToString(context, UserPreferencesProvider.stopTypeOf(context))),
onTap: () {
showDialog<StopType>(
context: context,
builder: (_) => DialogPicker<StopType>(
icon: Icons.straighten,
icon: Icons.straighten_outlined,
title: S.of(context).showFractionalStops,
selectedValue: UserPreferencesProvider.stopTypeOf(context),
values: StopType.values,

View file

@ -13,7 +13,7 @@ class ShowEv100ListTile extends StatelessWidget {
return Disable(
disable: !context.isPro,
child: SwitchListTile(
secondary: const Icon(Icons.adjust),
secondary: const Icon(Icons.adjust_outlined),
title: Text(S.of(context).showEv100),
value: context.isPro && UserPreferencesProvider.showEv100Of(context),
onChanged: (_) => UserPreferencesProvider.of(context).toggleShowEv100(),

View file

@ -109,7 +109,7 @@ class _DialogFilterState<T> extends State<DialogFilter<T>> {
width: 40,
child: IconButton(
padding: EdgeInsets.zero,
icon: Icon(_hasAnyUnselected ? Icons.select_all : Icons.deselect),
icon: Icon(_hasAnyUnselected ? Icons.select_all_outlined : Icons.deselect_outlined),
onPressed: _toggleAll,
tooltip: _hasAnyUnselected ? S.of(context).tooltipSelectAll : S.of(context).tooltipDesecelectAll,
),

View file

@ -10,7 +10,7 @@ class DynamicColorListTile extends StatelessWidget {
@override
Widget build(BuildContext context) {
return SwitchListTile(
secondary: const Icon(Icons.colorize),
secondary: const Icon(Icons.colorize_outlined),
title: Text(S.of(context).dynamicColor),
value: UserPreferencesProvider.dynamicColorStateOf(context) == DynamicColorState.enabled,
onChanged: UserPreferencesProvider.of(context).enableDynamicColor,

View file

@ -24,7 +24,7 @@ class _PrimaryColorDialogPickerState extends State<PrimaryColorDialogPicker> {
@override
Widget build(BuildContext context) {
return AlertDialog(
icon: const Icon(Icons.palette),
icon: const Icon(Icons.palette_outlined),
titlePadding: Dimens.dialogIconTitlePadding,
title: Text(S.of(context).choosePrimaryColor),
content: SizedBox(
@ -124,7 +124,7 @@ class _SelectableColorItemState extends State<_SelectableColorItem> {
duration: Dimens.durationS,
child: widget.selected
? Icon(
Icons.check,
Icons.check_outlined,
color: ThemeData.estimateBrightnessForColor(widget.color) == Brightness.light
? Colors.black
: Colors.white,

View file

@ -13,13 +13,13 @@ class PrimaryColorListTile extends StatelessWidget {
if (UserPreferencesProvider.dynamicColorStateOf(context) == DynamicColorState.enabled) {
return Disable(
child: ListTile(
leading: const Icon(Icons.palette),
leading: const Icon(Icons.palette_outlined),
title: Text(S.of(context).primaryColor),
),
);
}
return ListTile(
leading: const Icon(Icons.palette),
leading: const Icon(Icons.palette_outlined),
title: Text(S.of(context).primaryColor),
onTap: () {
showDialog<Color>(

View file

@ -10,14 +10,14 @@ class ThemeTypeListTile extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListTile(
leading: const Icon(Icons.brightness_6),
leading: const Icon(Icons.brightness_6_outlined),
title: Text(S.of(context).theme),
trailing: Text(_typeToString(context, UserPreferencesProvider.themeTypeOf(context))),
onTap: () {
showDialog<ThemeType>(
context: context,
builder: (_) => DialogPicker<ThemeType>(
icon: Icons.brightness_6,
icon: Icons.brightness_6_outlined,
title: S.of(context).chooseTheme,
selectedValue: UserPreferencesProvider.themeTypeOf(context),
values: ThemeType.values,

View file

@ -24,7 +24,7 @@ class ProFeaturesDialog extends StatelessWidget {
@override
Widget build(BuildContext context) {
return TransparentDialog(
icon: Icons.star,
icon: Icons.star_outlined,
title: S.of(context).proFeatures,
scrollableContent: false,
content: Flexible(

View file

@ -53,7 +53,7 @@ class RulerSlider extends StatelessWidget {
),
),
IconButton(
icon: const Icon(Icons.sync),
icon: const Icon(Icons.sync_outlined),
onPressed: value != defaultValue ? () => onChanged(defaultValue) : null,
tooltip: S.of(context).tooltipResetToZero,
),

View file

@ -42,7 +42,7 @@ class SliverScreen extends StatelessWidget {
if (Navigator.of(context).canPop())
IconButton(
onPressed: Navigator.of(context).pop,
icon: const Icon(Icons.close),
icon: const Icon(Icons.close_outlined),
tooltip: S.of(context).tooltipClose,
),
],