vodemn / m3_lightmeter Goto Github PK
View Code? Open in Web Editor NEWLightmeter app inspired by Material 3 design system.
Home Page: https://linktr.ee/vodemn
License: GNU General Public License v3.0
Lightmeter app inspired by Material 3 design system.
Home Page: https://linktr.ee/vodemn
License: GNU General Public License v3.0
Incident light metering should be done via ambient light sensor. Android-only.
Steps to reproduce:
Expected result:
Dialog content is scrolled to the end, the last item is visible.
Actual result:
Dialog content is scrolled to the last item's offset and then bounces back to the biggest offset possible.
Light measurement usually takes some feasible time. For better user experience it will be good to add loading state to measure button. For example, button's outer ring can be transformed to circular progress indicator of the same thickness.
When user changes one of these settings:
due to this code:
@override
void didChangeDependencies() {
super.didChangeDependencies();
_bloc.add(EquipmentProfileChangedEvent(EquipmentProfile.of(context)));
_bloc.add(StopTypeChangedEvent(context.watch<StopType>()));
if (!MeteringScreenLayout.featureStatusOf(context, MeteringScreenLayoutFeature.filmPicker)) {
_bloc.add(const FilmChangedEvent(Film.other()));
}
}
response vibration is called.
In order to fix it custom dependency listener can be implemented.
Response vibration should be called only when EV and corresponding exposure pairs list are changed.
This can be achieve simply by checking if, for example, new ND values is equal to the current one. If true - nothing happens.
RepaintBoundary
where neededMeteringTopBar
DialogPicker
Fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: FormatException: Invalid double
null
at double.parse(dart:core)
at CameraContainerBloc._takePhoto(bloc_container_camera.dart:186)
It will be good to indicate, that recent measurement ended with error and displayed EV can be incorrect.
Fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: Null check operator used on a null value
at AnimationController.stop(animation_controller.dart:785)
at AnimationController._animateToInternal(animation_controller.dart:605)
at AnimationController.reverse(animation_controller.dart:501)
at AnimatedDialogState._animateReverse(widget_dialog_animated.dart:195)
at AnimatedDialogState.close(widget_dialog_animated.dart:201)
Fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: PlatformException(ACTIVITY_NOT_FOUND, No Activity found to handle intent { mailto:[email protected]?subject=M3%20Lightmeter }, null, null)
at StandardMethodCodec.decodeEnvelope(message_codecs.dart:653)
at MethodChannel._invokeMethod(platform_channel.dart:315)
Some users encountered blank grey screen on startup. Reinstalling the app doesn't help.
Users of the old material_lightmeter app can have their own settings (ISO, ND, etc.) And as M3 Lightmeter has different storage keys for the same values, it is necessary to map old keys to the new ones on the first startup of the M3 Lightmeter app. In the second M3 release this mechanism should be removed.
As in Google Camera the Lightmeter app should have these actions executed by volume buttons:
Things to do:
Describe the bug
Exposure reset button is not clickable.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
Exposure reset button should be clickable.
Device:
App version
0.14.0
Thwere should be a possibility to filter out Apeture manually:
For example my camera only has f/16 /8 /5,6 and /3,5 so the app should just show me these
Nested InheritedWidgetBase<...>
widgets at the top of the widget tree do not provide any helpful information about the layout and actually are adding visual noise.
InheritedWidget
thus replacing several providers with only 1 widgetInheritedModel
allowing descendants to depend on the specific valueThe app should support dynamic colors introduced in Android 12. But users still should be able to select primary color for the app.
Describe the bug
To Reproduce
Steps to reproduce the behavior:
MeteringScreenLayoutFeaturesDialog
Expected behavior
Screenshots
App version
0.14.0
Is your feature request related to a problem? Please describe.
Allow users to deselect unused films in the settings and thus hide them from the picker on the main screen.
Describe the solution you'd like
Optional
On small devices there can be too little space for the exposure pairs list, so it will be good to allow user hiding fastest/shortest exposure pairs and thus expanding exposure pairs list height.
Use Github actions to build and sign apk files
Hello,
The value chosen for the fractional stops option is not saved and defaults to 1/3, which means you have to reset it each time you launch the application.
Thanks for your work 👌
Issues
Logs
Fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: CameraException(Disposed CameraController, buildPreview() was called on a disposed CameraController.). Error thrown building Widget.
at CameraController._throwIfNotInitialized(camera_controller.dart:858)
at CameraController.buildPreview(camera_controller.dart:611)
at CameraView.build.<fn>(widget_camera_view.dart:19)
at _ValueListenableBuilderState.build(value_listenable_builder.dart:186)
at StatefulElement.build(framework.dart:5198)
at ComponentElement.performRebuild(framework.dart:5086)
at StatefulElement.performRebuild(framework.dart:5251)
at Element.rebuild(framework.dart:4805)
at BuildOwner.buildScope(framework.dart:2780)
at WidgetsBinding.drawFrame(binding.dart:903)
at RendererBinding._handlePersistentFrameCallback(binding.dart:358)
at SchedulerBinding._invokeFrameCallback(binding.dart:1284)
at SchedulerBinding.handleDrawFrame(binding.dart:1214)
at SchedulerBinding._handleDrawFrame(binding.dart:1072)
Fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: CameraException(Disposed CameraController, getExposureOffsetStepSize() was called on a disposed CameraController.)
at CameraController._throwIfNotInitialized(camera_controller.dart:858)
at CameraController.getExposureOffsetStepSize(camera_controller.dart:723)
at CameraController.setExposureOffset(camera_controller.dart:755)
Fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: CameraException(Disposed CameraController, stopImageStream() was called on a disposed CameraController.)
at CameraController._throwIfNotInitialized(camera_controller.dart:858)
at CameraController.stopImageStream(camera_controller.dart:487)
at _CameraHistogramState.dispose(widget_histogram.dart:31)
at StatefulElement.unmount(framework.dart:5297)
at _InactiveElements._unmount(framework.dart:1953)
at _InactiveElements._unmount.<fn>(framework.dart:1951)
at ComponentElement.visitChildren(framework.dart:5138)
at _InactiveElements._unmount(framework.dart:1949)
at _InactiveElements._unmount.<fn>(framework.dart:1951)
at MultiChildRenderObjectElement.visitChildren(framework.dart:6533)
at _InactiveElements._unmount(framework.dart:1949)
at _InactiveElements._unmount.<fn>(framework.dart:1951)
at ComponentElement.visitChildren(framework.dart:5138)
at _InactiveElements._unmount(framework.dart:1949)
at ListIterable.forEach(dart:_internal)
at _InactiveElements._unmountAll(framework.dart:1962)
at BuildOwner.lockState(framework.dart:2640)
at BuildOwner.finalizeTree(framework.dart:3050)
at WidgetsBinding.drawFrame(binding.dart:906)
at RendererBinding._handlePersistentFrameCallback(binding.dart:358)
at SchedulerBinding._invokeFrameCallback(binding.dart:1284)
at SchedulerBinding.handleDrawFrame(binding.dart:1214)
at SchedulerBinding._handleDrawFrame(binding.dart:1072)
Fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: CameraException(Disposed CameraController, setExposureOffset() was called on a disposed CameraController.)
at CameraController._throwIfNotInitialized(camera_controller.dart:858)
at CameraController.setExposureOffset(camera_controller.dart:743)
at CameraContainerBloc._onExposureOffsetChanged(bloc_container_camera.dart:179)
at Bloc.on.<fn>.handleEvent(bloc.dart:229)
at Bloc.on.<fn>(bloc.dart:238)
As the app is in release it must have at least unit tests (at least to avoid issues like #60)
Some methods provided by packages (like Vibration
or AppSettings
) are available through static access and thus cannot be stubbed with mocktail
- [ ] Static classes tests
Some user may want to prevent screen from dimming and locking.
Is your feature request related to a problem? Please describe.
As a photographer, I can have 1 camera body with different lenses. To create equipment profiles for different combinations of this body and lenses it would be convenient to:
Describe the solution you'd like
When user changes ND filter current EV value is adjusted by ND filter reduction value: ev = ev - nd
. But when making a measurement with non-zero ND filter selected filter value is applied on the current EV value: ev = ev
.
Fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: Unsupported operation: Infinity or NaN toInt
at MeteringBloc._buildExposureValues(bloc_metering.dart)
at MeteringBloc._emitMeasuredState(bloc_metering.dart:157)
at MeteringBloc._onFilmChanged(bloc_metering.dart:117)
at Bloc.on.<fn>.handleEvent(bloc.dart:226)
at Bloc.on.<fn>(bloc.dart:235)
Describe the bug
When I first start the app, maybe I'm being too quick, but I'll get a reading of a scene like this:
F22
2"
ISO 200
However I hit the button again, without moving the camera, and I'll get the right reading like this
F22
1/30
ISO 200
To Reproduce
I can get it to reproduce when first opening the app
OR unlocking the screen and trying it straight away.
Expected behavior
The second metering is always correct.
Device:
App version
Latest as of 26.8.23
Steps to reproduce:
Expected result
The camera review is lightened/darkened. Exposure offset slider position is the same as it was before exit.
Actual result
The camera preview has zero exposure offset. But the corresponding slider shows a nonzero offset.
Suggested solution
Reset exposure offset slider position, when reconnected to the camera.
Fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: Null check operator used on a null value
at ScaffoldMessenger.of(scaffold.dart:150)
at WriteEmailListTile.build.<fn>.<fn>.<fn>.<fn>(widget_list_tile_write_email.dart:34)
Is your feature request related to a problem? Please describe.
Currently it can be tricky in the field in some conditions to see what the levels are actually doing without a histogram
Describe the solution you'd like
Would be awesome to have a live histogram overlay below the live preview. It could react to the +/- ev slider
Describe alternatives you've considered
The live view is great, but hard to tell in the field when highlights are clipping for example.
Additional context
It could be a simple rgb histogram or just a histogram
The problem
The user's device and camera can have different focus lengths, which results in different magnifications and a need to always adjust the zoom level in the app to meter the portion of the scene captured by the camera.
Describe the solution you'd like
lensZoom
lensZoom
Additional context
Switching between different lenses should be handled by the system as in the pre-installed camera app.
No handling for metering screen is required when user edits zoom range in the settings. At this point metering screen camera is disposed and should be initialised with the new range.
Currently to create a new release on GP and Github I need to manually run a Build prod .aab & .apk
action, download attached artefacts and create 2 separate releases with the same release notes. Probably it can be at least partially automated.
buildTypes.release.ndk.debugSymbolLevel 'FULL'
(#79)TBD
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.