Skip to content

Commit

Permalink
ML-70 Migrate to Dart 3 + stricter lints (#71)
Browse files Browse the repository at this point in the history
* updated pub version

* added lint

* --code=always_use_package_imports

* dart fixes

* format

* other lints
  • Loading branch information
vodemn committed May 11, 2023
1 parent 19a788a commit 5602b1e
Show file tree
Hide file tree
Showing 61 changed files with 259 additions and 260 deletions.
11 changes: 10 additions & 1 deletion analysis_options.yaml
Original file line number Diff line number Diff line change
@@ -1 +1,10 @@
include: package:flutter_lints/flutter.yaml
include: package:lint/strict.yaml


linter:
rules:
use_setters_to_change_properties: false

analyzer:
exclude:
- "**/generated/**"
30 changes: 15 additions & 15 deletions lib/application.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,23 @@ import 'package:flutter/services.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:lightmeter/data/caffeine_service.dart';
import 'package:lightmeter/data/haptics_service.dart';
import 'package:lightmeter/data/light_sensor_service.dart';
import 'package:lightmeter/data/models/supported_locale.dart';
import 'package:lightmeter/data/permissions_service.dart';
import 'package:lightmeter/data/shared_prefs_service.dart';
import 'package:lightmeter/environment.dart';
import 'package:lightmeter/generated/l10n.dart';
import 'package:lightmeter/providers/equipment_profile_provider.dart';
import 'package:lightmeter/providers/ev_source_type_provider.dart';
import 'package:lightmeter/providers/metering_screen_layout_provider.dart';
import 'package:lightmeter/providers/stop_type_provider.dart';
import 'package:lightmeter/providers/supported_locale_provider.dart';
import 'package:lightmeter/providers/theme_provider.dart';
import 'package:lightmeter/screens/metering/flow_metering.dart';
import 'package:lightmeter/screens/settings/flow_settings.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';

import 'data/light_sensor_service.dart';
import 'data/permissions_service.dart';
import 'data/shared_prefs_service.dart';
import 'environment.dart';
import 'generated/l10n.dart';
import 'providers/equipment_profile_provider.dart';
import 'providers/ev_source_type_provider.dart';
import 'providers/metering_screen_layout_provider.dart';
import 'providers/theme_provider.dart';
import 'screens/metering/flow_metering.dart';
import 'screens/settings/flow_settings.dart';
import 'providers/stop_type_provider.dart';

class Application extends StatelessWidget {
final Environment env;

Expand All @@ -33,15 +32,16 @@ class Application extends StatelessWidget {
return FutureBuilder(
future: Future.wait([
SharedPreferences.getInstance(),
Platform.isAndroid ? const LightSensorService().hasSensor() : Future.value(false),
if (Platform.isAndroid) const LightSensorService().hasSensor() else Future.value(false),
]),
builder: (_, snapshot) {
if (snapshot.data != null) {
return MultiProvider(
providers: [
Provider.value(value: env.copyWith(hasLightSensor: snapshot.data![1] as bool)),
Provider(
create: (_) => UserPreferencesService(snapshot.data![0] as SharedPreferences)),
create: (_) => UserPreferencesService(snapshot.data![0] as SharedPreferences),
),
Provider(create: (_) => const CaffeineService()),
Provider(create: (_) => const HapticsService()),
Provider(create: (_) => PermissionsService()),
Expand Down
2 changes: 1 addition & 1 deletion lib/data/caffeine_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class CaffeineService {
const CaffeineService();

Future<bool> isKeepScreenOn() async {
return await _methodChannel.invokeMethod<bool>("isKeepScreenOn").then((value) => value!);
return _methodChannel.invokeMethod<bool>("isKeepScreenOn").then((value) => value!);
}

Future<void> keepScreenOn(bool keep) async {
Expand Down
2 changes: 1 addition & 1 deletion lib/data/models/exposure_pair.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ class ExposurePair {
const ExposurePair(this.aperture, this.shutterSpeed);

@override
String toString() => '${aperture.toString()} - ${shutterSpeed.toString()}';
String toString() => '$aperture - $shutterSpeed';
}
3 changes: 2 additions & 1 deletion lib/data/models/metering_screen_layout_config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ typedef MeteringScreenLayoutConfig = Map<MeteringScreenLayoutFeature, bool>;

extension MeteringScreenLayoutConfigJson on MeteringScreenLayoutConfig {
static MeteringScreenLayoutConfig fromJson(Map<String, dynamic> data) => data.map(
(key, value) => MapEntry(MeteringScreenLayoutFeature.values[int.parse(key)], value as bool));
(key, value) => MapEntry(MeteringScreenLayoutFeature.values[int.parse(key)], value as bool),
);

Map<String, dynamic> toJson() => map((key, value) => MapEntry(key.index.toString(), value));
}
1 change: 0 additions & 1 deletion lib/data/models/supported_locale.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,3 @@ extension SupportedLocaleExtension on SupportedLocale {
}
}
}

2 changes: 1 addition & 1 deletion lib/data/permissions_service.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:permission_handler/permission_handler.dart';

class PermissionsService {
Future<PermissionStatus> checkCameraPermission() async => await Permission.camera.status;
Future<PermissionStatus> checkCameraPermission() async => Permission.camera.status;

Future<PermissionStatus> requestCameraPermission() async => Permission.camera.request();
}
13 changes: 7 additions & 6 deletions lib/data/shared_prefs_service.dart
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:lightmeter/data/models/ev_source_type.dart';
import 'package:lightmeter/data/models/film.dart';
import 'package:lightmeter/data/models/metering_screen_layout_config.dart';
import 'package:lightmeter/data/models/supported_locale.dart';
import 'package:lightmeter/data/models/theme_type.dart';
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
import 'package:shared_preferences/shared_preferences.dart';

import 'models/ev_source_type.dart';
import 'models/film.dart';
import 'models/metering_screen_layout_config.dart';
import 'models/theme_type.dart';

class UserPreferencesService {
static const _isoKey = "iso";
static const _ndFilterKey = "ndFilter";
Expand Down Expand Up @@ -87,7 +86,9 @@ class UserPreferencesService {
MeteringScreenLayoutConfig get meteringScreenLayout {
final configJson = _sharedPreferences.getString(_meteringScreenLayoutKey);
if (configJson != null) {
return MeteringScreenLayoutConfigJson.fromJson(json.decode(configJson));
return MeteringScreenLayoutConfigJson.fromJson(
json.decode(configJson) as Map<String, dynamic>,
);
} else {
return {
MeteringScreenLayoutFeature.extremeExposurePairs: true,
Expand Down
2 changes: 1 addition & 1 deletion lib/firebase.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:flutter/foundation.dart';

import 'firebase_options.dart';
import 'package:lightmeter/firebase_options.dart';

Future<void> initializeFirebase() async {
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
Expand Down
2 changes: 0 additions & 2 deletions lib/interactors/metering_interactor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,6 @@ class MeteringInteractor {
AppSettings.openAppSettings();
}

void enableHaptics(bool enable) => _userPreferencesService.haptics = enable;

Future<bool> hasAmbientLightSensor() async {
if (Platform.isAndroid) {
return _lightSensorService.hasSensor();
Expand Down
3 changes: 1 addition & 2 deletions lib/main_dev.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import 'package:flutter/material.dart';
import 'package:lightmeter/application.dart';
import 'package:lightmeter/environment.dart';

import 'application.dart';

Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(const Application(Environment.dev()));
Expand Down
5 changes: 2 additions & 3 deletions lib/main_prod.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import 'package:flutter/material.dart';
import 'package:lightmeter/application.dart';
import 'package:lightmeter/environment.dart';

import 'application.dart';
import 'firebase.dart';
import 'package:lightmeter/firebase.dart';

Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
Expand Down
2 changes: 2 additions & 0 deletions lib/platform_config.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
class PlatformConfig {
const PlatformConfig._();

static double get cameraPreviewAspectRatio {
final rational = const String.fromEnvironment('cameraPreviewAspectRatio').split('/');
return int.parse(rational[0]) / int.parse(rational[1]);
Expand Down
18 changes: 10 additions & 8 deletions lib/providers/equipment_profile_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,16 @@ class EquipmentProfileProviderState extends State<EquipmentProfileProvider> {

/// Creates a default equipment profile
void addProfile(String name) {
_customProfiles.add(EquipmentProfileData(
id: const Uuid().v1(),
name: name,
apertureValues: ApertureValue.values,
ndValues: NdValue.values,
shutterSpeedValues: ShutterSpeedValue.values,
isoValues: IsoValue.values,
));
_customProfiles.add(
EquipmentProfileData(
id: const Uuid().v1(),
name: name,
apertureValues: ApertureValue.values,
ndValues: NdValue.values,
shutterSpeedValues: ShutterSpeedValue.values,
isoValues: IsoValue.values,
),
);
_refreshSavedProfiles();
}

Expand Down
49 changes: 26 additions & 23 deletions lib/screens/metering/bloc_metering.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,15 @@ import 'package:lightmeter/data/models/exposure_pair.dart';
import 'package:lightmeter/data/models/film.dart';
import 'package:lightmeter/data/shared_prefs_service.dart';
import 'package:lightmeter/interactors/metering_interactor.dart';
import 'package:lightmeter/screens/metering/communication/bloc_communication_metering.dart';
import 'package:lightmeter/screens/metering/communication/event_communication_metering.dart'
as communication_events;
import 'package:lightmeter/screens/metering/communication/state_communication_metering.dart'
as communication_states;
import 'package:lightmeter/screens/metering/event_metering.dart';
import 'package:lightmeter/screens/metering/state_metering.dart';
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';

import 'communication/bloc_communication_metering.dart';
import 'event_metering.dart';
import 'state_metering.dart';

class MeteringBloc extends Bloc<MeteringEvent, MeteringState> {
final MeteringCommunicationBloc _communicationBloc;
final UserPreferencesService _userPreferencesService;
Expand Down Expand Up @@ -145,26 +144,28 @@ class MeteringBloc extends Bloc<MeteringEvent, MeteringState> {

void _emitMeasuredState(Emitter emit) {
final ev = _ev100 + log2(_iso.value / 100) - _nd.stopReduction;
emit(_isMeteringInProgress
? MeteringInProgressState(
ev: ev,
film: _film,
iso: _iso,
nd: _nd,
exposurePairs: _buildExposureValues(ev),
)
: MeteringEndedState(
ev: ev,
film: _film,
iso: _iso,
nd: _nd,
exposurePairs: _buildExposureValues(ev),
));
emit(
_isMeteringInProgress
? MeteringInProgressState(
ev: ev,
film: _film,
iso: _iso,
nd: _nd,
exposurePairs: _buildExposureValues(ev),
)
: MeteringEndedState(
ev: ev,
film: _film,
iso: _iso,
nd: _nd,
exposurePairs: _buildExposureValues(ev),
),
);
}

List<ExposurePair> _buildExposureValues(double ev) {
if (ev.isNaN || ev.isInfinite) {
return List.empty(growable: false);
return List.empty();
}

/// Depending on the `stopType` the exposure pairs list length is multiplied by 1,2 or 3
Expand Down Expand Up @@ -200,12 +201,14 @@ class MeteringBloc extends Bloc<MeteringEvent, MeteringState> {
shutterSpeedOffset = 0;
}

final int itemsCount = min(_apertureValues.length + shutterSpeedOffset,
_shutterSpeedValues.length + apertureOffset) -
final int itemsCount = min(
_apertureValues.length + shutterSpeedOffset,
_shutterSpeedValues.length + apertureOffset,
) -
max(apertureOffset, shutterSpeedOffset);

if (itemsCount < 0) {
return List.empty(growable: false);
return List.empty();
}
return List.generate(
itemsCount,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:flutter_bloc/flutter_bloc.dart';

import 'event_communication_metering.dart';
import 'state_communication_metering.dart';
import 'package:lightmeter/screens/metering/communication/event_communication_metering.dart';
import 'package:lightmeter/screens/metering/communication/state_communication_metering.dart';

class MeteringCommunicationBloc
extends Bloc<MeteringCommunicationEvent, MeteringCommunicationState> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ class _MeteringMeasureButtonState extends State<MeteringMeasureButton> {
/// This key is needed to make indicator start from the same point every time
key: ValueKey(widget.isMetering),
color: Theme.of(context).colorScheme.onSurface,
strokeWidth: Dimens.grid4,
value: widget.isMetering ? null : 1,
),
),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:lightmeter/res/dimens.dart';

import 'widget_bottom_controls.dart';
import 'package:lightmeter/screens/metering/components/bottom_controls/widget_bottom_controls.dart';

class MeteringBottomControlsProvider extends StatelessWidget {
final double? ev;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import 'package:flutter/material.dart';
import 'package:lightmeter/data/models/ev_source_type.dart';
import 'package:lightmeter/res/dimens.dart';
import 'package:lightmeter/screens/metering/components/bottom_controls/components/measure_button/widget_button_measure.dart';
import 'package:provider/provider.dart';

import 'components/measure_button/widget_button_measure.dart';

class MeteringBottomControls extends StatelessWidget {
final double? ev;
final bool isMetering;
Expand Down Expand Up @@ -42,9 +41,11 @@ class MeteringBottomControls extends StatelessWidget {
child: Center(
child: IconButton(
onPressed: onSwitchEvSourceType,
icon: Icon(context.watch<EvSourceType>() != EvSourceType.camera
? Icons.camera_rear
: Icons.wb_incandescent),
icon: Icon(
context.watch<EvSourceType>() != EvSourceType.camera
? Icons.camera_rear
: Icons.wb_incandescent,
),
),
),
)
Expand Down
Loading

0 comments on commit 5602b1e

Please sign in to comment.