Closed oodavid closed 2 years ago
@oodavid
Thanks for the report. From the video you shared, what does startCrashlytics()
do ? Can you provide code sample for it ?
Also, the plugin version you are using is not latest, so could you upgrade to latest and try again to see if you still get the exception ?
From the video you shared, what does
startCrashlytics()
do ?
In that video, it only applies the following:
FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
I'll update to firebase_crashlytics: 2.8.1
now and see what happens. Give me 10 minutes.
Yes, I'm seeing the same behaviour with updated packages, here's some more details.
Run flutter doctor
and paste the output below:
Run flutter pub deps -- --style=compact
and paste the output below:
I'll continue using my debug-mode fix below:
if (!kDebugMode) {
FlutterError.onError = _onError;
}
Thanks for the update. Using the code sample above along with dependency versions and running it on simulator, gives me same crash as reported.
Hey @oodavid, have you tried implementing a runZonedGuard like so:
await runZonedGuarded(() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
runApp(MyApp());
}, (error, stackTrace) {
FirebaseCrashlytics.instance.recordError(error, stackTrace);
});
@russellwheatley I have not tried that.
I came across zones while looking into this, but if I'm honest I'm not sure what they are or what they achieve. The documentation is a bit esoteric there.
@oodavid - This is useful: https://docs.flutter.dev/testing/errors
Quote:
Note that if in your app you call WidgetsFlutterBinding.ensureInitialized() manually to perform some initialization before calling runApp (e.g. Firebase.initializeApp()), you must call WidgetsFlutterBinding.ensureInitialized() inside runZonedGuarded:
Thanks, I'll give that a whirl tomorrow when I get in to the office
The issue is still ocurring:
https://www.loom.com/share/2f254fe432924b3399349e9e3ce8cdad
My main.dart
looks like this:
void main() async {
await runZonedGuarded(() async {
// Initialise Firebase before rendering the app, see: https://firebase.flutter.dev/docs/overview/#initializing-flutterfire
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
// Error logging
FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError;
Isolate.current.addErrorListener(RawReceivePort((pair) async {
final List<dynamic> errorAndStacktrace = pair;
await FirebaseCrashlytics.instance.recordError(
errorAndStacktrace.first,
errorAndStacktrace.last,
);
}).sendPort);
// Get cracking
runApp(MyApp());
}, (error, stack) {
FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
});
}
One thing of note, our app uses the old "manual" installation process, ie:
await Firebase.initializeApp();
Instead of using the FlutterFire CLI, ie:
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
Not sure if this might be affecting the behaviour?
Regardless I'll see if there's a guide for migrating to the CLI method.
Hey @oodavid, I have tested on my simulator using the example app and it worked fine. One thing I have noticed is the output on your console isn't matching what I'm receiving:
flutter: ----------------FIREBASE CRASHLYTICS----------------
flutter: Exception: wooowwwwwwwwwwww
flutter:
#0 _MyAppState.build.<anonymous closure>.<anonymous closure> (package:firebase_crashlytics_example/main.dart:184:29)
#1 _MyAppState.build.<anonymous closure>.<anonymous closure> (package:firebase_crashlytics_example/main.dart:177:36)
#2 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:1005:21)
#3 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:198:24)
#4 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:613:11)
#5 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:298:5)
#6 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:232:7)
#7 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:563:9)
#8 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:94:12)
#9 PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/point<β¦>
flutter: ----------------------------------------------------
One thing of note, our app uses the old "manual" installation process, ie:
await Firebase.initializeApp();
Instead of using the FlutterFire CLI, ie:
await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, );
Not sure if this might be affecting the behaviour?
Regardless I'll see if there's a guide for migrating to the CLI method.
This is fine, it won't be causing the issue.
Thanks RE: CLI installation.
Yes, I see that my error doesn't include the Crashlytics messages ---FIREBASE CRASHLYTICS---
.
This is my setup and error:
Scaffold(
...
floatingActionButton: FloatingActionButton.extended(
label: const Text('Throw Error'),
icon: const Icon(Icons.edit),
onPressed: () {
throw Exception("Hello Exception");
},
),
);
flutter: handleFlutterError
ββββββββ Exception caught by gesture βββββββββββββββββββββββββββββββββββββββββββ
The following _Exception was thrown while handling a gesture:
Exception: Hello Exception
When the exception was thrown, this was the stack
#0 HomeScreen.build.<anonymous closure>
package:flowmobile/β¦/home/home_screen.dart:38
#1 _InkResponseState._handleTap
package:flutter/β¦/material/ink_well.dart:1005
#2 GestureRecognizer.invokeCallback
package:flutter/β¦/gestures/recognizer.dart:198
#3 TapGestureRecognizer.handleTapUp
package:flutter/β¦/gestures/tap.dart:613
#4 BaseTapGestureRecognizer._checkUp
package:flutter/β¦/gestures/tap.dart:298
#5 BaseTapGestureRecognizer.handlePrimaryPointer
package:flutter/β¦/gestures/tap.dart:232
#6 PrimaryPointerGestureRecognizer.handleEvent
package:flutter/β¦/gestures/recognizer.dart:563
#7 PointerRouter._dispatch
package:flutter/β¦/gestures/pointer_router.dart:94
#8 PointerRouter._dispatchEventToRoutes.<anonymous closure>
package:flutter/β¦/gestures/pointer_router.dart:139
#9 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:614:13)
#10 PointerRouter._dispatchEventToRoutes
package:flutter/β¦/gestures/pointer_router.dart:137
#11 PointerRouter.route
package:flutter/β¦/gestures/pointer_router.dart:123
#12 GestureBinding.handleEvent
package:flutter/β¦/gestures/binding.dart:445
#13 GestureBinding.dispatchEvent
package:flutter/β¦/gestures/binding.dart:425
#14 RendererBinding.dispatchEvent
package:flutter/β¦/rendering/binding.dart:329
#15 GestureBinding._handlePointerEventImmediately
package:flutter/β¦/gestures/binding.dart:380
#16 GestureBinding.handlePointerEvent
package:flutter/β¦/gestures/binding.dart:344
#17 GestureBinding._flushPointerEventQueue
package:flutter/β¦/gestures/binding.dart:302
#18 GestureBinding._handlePointerDataPacket
package:flutter/β¦/gestures/binding.dart:285
#22 _invoke1 (dart:ui/hooks.dart:170:10)
#23 PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:331:7)
#24 _dispatchPointerDataPacket (dart:ui/hooks.dart:94:31)
(elided 3 frames from dart:async)
Handler: "onTap"
Recognizer: TapGestureRecognizer#6af84
debugOwner: GestureDetector
state: possible
won arena
finalPosition: Offset(302.3, 835.0)
finalLocalPosition: Offset(82.3, 37.0)
button: 1
sent tap down
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Lost connection to device.
Exited
I'm going to strip my app right back to a basic screen and use that as my test.
Even stripped right back it's not playing nicely:
https://www.loom.com/share/7de80037f64e41b3a307e8d7302cd85c - without runZonedGuarded https://www.loom.com/share/6c1c0c3592f84cfeb88514dd33cdea65 - with runZonedGuarded
import 'dart:async';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:flutter/material.dart';
void main() async {
await runZonedGuarded(() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError;
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: TextButton(
onPressed: () {
throw Exception('My Exception');
},
child: const Text('Throw Exception'),
),
),
),
),
);
}, (error, stack) {
FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
});
}
Error:
ββββββββ Exception caught by gesture βββββββββββββββββββββββββββββββββββββββββββ
The following _Exception was thrown while handling a gesture:
Exception: My Exception
When the exception was thrown, this was the stack
#0 main.<anonymous closure>.<anonymous closure>
package:flowmobile/main.dart:20
#1 _InkResponseState._handleTap
package:flutter/β¦/material/ink_well.dart:1005
#2 GestureRecognizer.invokeCallback
package:flutter/β¦/gestures/recognizer.dart:198
#3 TapGestureRecognizer.handleTapUp
package:flutter/β¦/gestures/tap.dart:613
#4 BaseTapGestureRecognizer._checkUp
package:flutter/β¦/gestures/tap.dart:298
#5 BaseTapGestureRecognizer.handlePrimaryPointer
package:flutter/β¦/gestures/tap.dart:232
#6 PrimaryPointerGestureRecognizer.handleEvent
package:flutter/β¦/gestures/recognizer.dart:563
#7 PointerRouter._dispatch
package:flutter/β¦/gestures/pointer_router.dart:94
#8 PointerRouter._dispatchEventToRoutes.<anonymous closure>
package:flutter/β¦/gestures/pointer_router.dart:139
#9 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:614:13)
#10 PointerRouter._dispatchEventToRoutes
package:flutter/β¦/gestures/pointer_router.dart:137
#11 PointerRouter.route
package:flutter/β¦/gestures/pointer_router.dart:123
#12 GestureBinding.handleEvent
package:flutter/β¦/gestures/binding.dart:445
#13 GestureBinding.dispatchEvent
package:flutter/β¦/gestures/binding.dart:425
#14 RendererBinding.dispatchEvent
package:flutter/β¦/rendering/binding.dart:329
#15 GestureBinding._handlePointerEventImmediately
package:flutter/β¦/gestures/binding.dart:380
#16 GestureBinding.handlePointerEvent
package:flutter/β¦/gestures/binding.dart:344
#17 GestureBinding._flushPointerEventQueue
package:flutter/β¦/gestures/binding.dart:302
#18 GestureBinding._handlePointerDataPacket
package:flutter/β¦/gestures/binding.dart:285
#22 _invoke1 (dart:ui/hooks.dart:170:10)
#23 PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:331:7)
#24 _dispatchPointerDataPacket (dart:ui/hooks.dart:94:31)
(elided 3 frames from dart:async)
Handler: "onTap"
Recognizer: TapGestureRecognizer#ab7b4
debugOwner: GestureDetector
state: possible
won arena
finalPosition: Offset(194.0, 449.3)
finalLocalPosition: Offset(51.5, 19.3)
button: 1
sent tap down
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Lost connection to device.
Exited
Are we using the same dependencies?:
https://github.com/firebase/flutterfire/issues/8779#issuecomment-1139572997
Hey @oodavid, I've just learnt that you need to return a FutureBuilder
for exceptions to be caught π
. Like in the Crashlytic's example. This is also implicitly expressed in the documentation. This ought to solve your problem.
Interesting, still doesn't work for me tho.
My test code looks like this now:
import 'dart:async';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:flutter/material.dart';
void main() async {
await runZonedGuarded(() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError;
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: TextButton(
onPressed: () {
throw Exception('My Exception');
},
child: const Text('Throw Exception'),
),
),
),
builder: (BuildContext context, Widget? widget) {
Widget error = const Text('...rendering error...');
if (widget is Scaffold || widget is Navigator) {
error = Scaffold(body: Center(child: error));
}
ErrorWidget.builder = (FlutterErrorDetails errorDetails) => error;
return widget ?? Container();
},
),
);
}, (error, stack) {
FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
});
}
I think I'll have to come back to this in our next sprint :)
Use
FutureBuilder
: https://github.com/firebase/flutterfire/blob/master/packages/firebase_crashlytics/firebase_crashlytics/example/lib/main.dart#L82
TBH, I'm not sure I want to use this pattern - we have 37 screens, so this would add a lot of boilerplate to our app.
Wondering why we need this approach at all...
I solve it with updatefirebase_core : 1.18.0
and force pod install
or pod update
for m1 users it will be failed
try this lines :
sudo arch -x86_64 gem install ffi
arch -x86_64 pod install
@oodavid Did you solve this issue? We are facing the same problem. A lot of non-fatal issues are crashing the application because of this
@ggirotto we have not.
I did however find this:
The repo they promote / actively develop has Crashlytics built in. I've yet to dig into how they're doing things, but it's on my list.
Hey @oodavid, I've finally circled back to this issue. You don't need a FutureBuilder
as demonstrated with the below noted:
Press the button and you should see the correct Crashlytics exception logged out in your console without crashing the app.
flutter: ----------------FIREBASE CRASHLYTICS----------------
flutter: Exception: test error
flutter:
#0 _MyAppState.build.<anonymous closure> (package:firebase_crashlytics_example/main.dart:68:25)
#1 _MyAppState.build.<anonymous closure> (package:firebase_crashlytics_example/main.dart:67:49)
#2 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:1005:21)
#3 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:198:24)
#4 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:613:11)
#5 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:298:5)
#6 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:232:7)
#7 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:563:9)
#8 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:94:12)
#9 PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:139:9)
#10 _LinkedHashM<β¦>
flutter: ----------------------------------------------------
Hey @oodavid. We need more information to resolve this issue but there hasn't been an update in 7 weekdays. I'm marking the issue as stale and if there are no new updates in the next 7 days I will close it automatically.
If you have more information that will help us get to the bottom of this, just add a comment!
Since there haven't been any recent updates here, I am going to close this issue.
@oodavid if you're still experiencing this problem and want to continue the discussion just leave a comment here and we are happy to re-open this.
Bug report
Using
recordFlutterError
causes errors to kill the iOS simulator. Video:https://www.loom.com/share/32a75b5ee8144f84b84c64084e530e39
Then I've stripped back my app to something v. simple, the error still shows:
https://www.loom.com/share/ee7d03143efe4950ac5ea284022cd751
Steps to reproduce
The following code causes the app to force-close on iOS simulators when an Exception is thrown:
Expected behavior
That the exception is logged, but the app continues to work.
For the time being, I am using this snippet to disable crashlytics during dev
Flutter doctor
Run
flutter doctor
and paste the output below:Click To Expand
``` flutter doctor Doctor summary (to see all details, run flutter doctor -v): [β] Flutter (Channel stable, 2.10.5, on macOS 12.3.1 21E258 darwin-x64, locale en-GB) [β] Android toolchain - develop for Android devices (Android SDK version 29.0.2) [β] Xcode - develop for iOS and macOS (Xcode 13.1) [β] Chrome - develop for the web [β] Android Studio (version 2020.3) [β] VS Code (version 1.67.2) [β] Connected device (2 available) [β] HTTP Host Availability β’ No issues found! ```Flutter dependencies
Run
flutter pub deps -- --style=compact
and paste the output below:Click To Expand
``` flutter pub deps -- --style=compact Dart SDK 2.16.2 Flutter SDK 2.10.5 flowmobile 1.0.69+69 dependencies: - add_to_gallery 0.2.0+3 [flutter path_provider http path uuid] - animated_clipper 0.2.0+2 [flutter] - cloud_firestore 3.1.14 [cloud_firestore_platform_interface cloud_firestore_web collection firebase_core firebase_core_platform_interface flutter meta] - cloud_functions 3.2.14 [cloud_functions_platform_interface cloud_functions_web firebase_core firebase_core_platform_interface flutter] - collection 1.15.0 - device_info_plus 3.2.3 [flutter device_info_plus_platform_interface device_info_plus_macos device_info_plus_linux device_info_plus_web device_info_plus_windows] - expressions 0.2.3 [quiver petitparser rxdart fake_async meta] - firebase_analytics 9.1.7 [firebase_analytics_platform_interface firebase_analytics_web firebase_core firebase_core_platform_interface flutter] - firebase_auth 3.3.17 [firebase_auth_platform_interface firebase_auth_web firebase_core firebase_core_platform_interface flutter meta] - firebase_core 1.16.0 [firebase_core_platform_interface firebase_core_web flutter meta] - firebase_crashlytics 2.7.2 [firebase_core firebase_core_platform_interface firebase_crashlytics_platform_interface flutter stack_trace] - firebase_dynamic_links 4.2.2 [firebase_core firebase_core_platform_interface firebase_dynamic_links_platform_interface flutter meta plugin_platform_interface] - firebase_storage 10.2.15 [firebase_core firebase_core_platform_interface firebase_storage_platform_interface firebase_storage_web flutter] - flutter 0.0.0 [characters collection material_color_utilities meta typed_data vector_math sky_engine] - flutter_markdown 0.6.10 [flutter markdown meta path] - flutter_riverpod 1.0.3 [collection flutter meta riverpod state_notifier] - hand_signature 2.1.1 [flutter flutter_svg] - image_picker 0.8.5+1 [flutter image_picker_android image_picker_for_web image_picker_ios image_picker_platform_interface] - mime 1.0.2 - package_info_plus 1.4.2 [flutter package_info_plus_platform_interface package_info_plus_linux package_info_plus_macos package_info_plus_windows package_info_plus_web] - path 1.8.0 - path_provider 2.0.10 [flutter path_provider_android path_provider_ios path_provider_linux path_provider_macos path_provider_platform_interface path_provider_windows] - permission_handler 9.2.0 [flutter meta permission_handler_android permission_handler_apple permission_handler_windows permission_handler_platform_interface] - provider 6.0.2 [collection flutter nested] - scrollable_positioned_list 0.3.1 [flutter collection] - shared_preferences 2.0.14 [flutter shared_preferences_android shared_preferences_ios shared_preferences_linux shared_preferences_macos shared_preferences_platform_interface shared_preferences_web shared_preferences_windows] - storage_space 1.0.1+5 [flutter] - url_launcher 6.1.1 [flutter url_launcher_android url_launcher_ios url_launcher_linux url_launcher_macos url_launcher_platform_interface url_launcher_web url_launcher_windows] - wechat_camera_picker 3.1.0 [flutter camera path path_provider photo_manager video_player] dev dependencies: - flutter_lints 1.0.4 [lints] - flutter_test 0.0.0 [flutter test_api path fake_async clock stack_trace vector_math async boolean_selector characters charcode collection matcher material_color_utilities meta source_span stream_channel string_scanner term_glyph typed_data] transitive dependencies: - args 2.3.0 - async 2.8.2 [collection meta] - boolean_selector 2.1.0 [source_span string_scanner] - camera 0.9.4+22 [camera_platform_interface camera_web flutter flutter_plugin_android_lifecycle quiver] - camera_platform_interface 2.1.6 [cross_file flutter plugin_platform_interface stream_transform] - camera_web 0.2.1+5 [camera_platform_interface flutter flutter_web_plugins stream_transform] - characters 1.2.0 - charcode 1.3.1 - clock 1.1.0 - cloud_firestore_platform_interface 5.5.5 [collection firebase_core flutter meta plugin_platform_interface] - cloud_firestore_web 2.6.14 [cloud_firestore_platform_interface collection firebase_core firebase_core_web flutter flutter_web_plugins js] - cloud_functions_platform_interface 5.1.5 [firebase_core flutter meta plugin_platform_interface] - cloud_functions_web 4.2.13 [cloud_functions_platform_interface firebase_core firebase_core_web flutter flutter_web_plugins js] - cross_file 0.3.3 [js meta] - crypto 3.0.2 [typed_data] - csslib 0.17.1 [source_span] - device_info_plus_linux 2.1.1 [device_info_plus_platform_interface file flutter meta] - device_info_plus_macos 2.2.3 [device_info_plus_platform_interface flutter] - device_info_plus_platform_interface 2.3.0+1 [flutter meta plugin_platform_interface] - device_info_plus_web 2.1.0 [device_info_plus_platform_interface flutter_web_plugins flutter] - device_info_plus_windows 2.1.1 [device_info_plus_platform_interface ffi flutter win32] - fake_async 1.2.0 [clock collection] - ffi 1.1.2 - file 6.1.2 [meta path] - firebase_analytics_platform_interface 3.1.5 [firebase_core flutter meta plugin_platform_interface] - firebase_analytics_web 0.4.0+12 [firebase_analytics_platform_interface firebase_core firebase_core_web flutter flutter_web_plugins js] - firebase_auth_platform_interface 6.2.5 [firebase_core flutter meta plugin_platform_interface] - firebase_auth_web 3.3.14 [firebase_auth_platform_interface firebase_core firebase_core_web flutter flutter_web_plugins http_parser intl js meta] - firebase_core_platform_interface 4.3.0 [collection flutter meta plugin_platform_interface] - firebase_core_web 1.6.3 [firebase_core_platform_interface flutter flutter_web_plugins js meta] - firebase_crashlytics_platform_interface 3.2.5 [collection firebase_core flutter meta plugin_platform_interface] - firebase_dynamic_links_platform_interface 0.2.3+1 [firebase_core flutter meta plugin_platform_interface] - firebase_storage_platform_interface 4.1.5 [collection firebase_core flutter meta plugin_platform_interface] - firebase_storage_web 3.2.14 [async firebase_core firebase_core_web firebase_storage_platform_interface flutter flutter_web_plugins http js meta] - flutter_plugin_android_lifecycle 2.0.6 [flutter] - flutter_svg 1.0.3 [flutter meta path_drawing vector_math xml] - flutter_web_plugins 0.0.0 [flutter js characters collection material_color_utilities meta typed_data vector_math] - html 0.15.0 [csslib source_span] - http 0.13.4 [async http_parser meta path] - http_parser 4.0.0 [charcode collection source_span string_scanner typed_data] - image_picker_android 0.8.4+12 [flutter flutter_plugin_android_lifecycle image_picker_platform_interface] - image_picker_for_web 2.1.7 [flutter flutter_web_plugins image_picker_platform_interface] - image_picker_ios 0.8.5+1 [flutter image_picker_platform_interface] - image_picker_platform_interface 2.4.4 [cross_file flutter http plugin_platform_interface] - intl 0.17.0 [clock path] - js 0.6.3 - lints 1.0.1 - markdown 5.0.0 [args charcode meta] - matcher 0.12.11 [stack_trace] - material_color_utilities 0.1.3 - meta 1.7.0 - nested 1.0.0 [flutter] - package_info_plus_linux 1.0.5 [package_info_plus_platform_interface flutter path] - package_info_plus_macos 1.3.0 [flutter] - package_info_plus_platform_interface 1.0.2 [flutter meta plugin_platform_interface] - package_info_plus_web 1.0.5 [flutter flutter_web_plugins http meta package_info_plus_platform_interface] - package_info_plus_windows 1.0.5 [package_info_plus_platform_interface ffi flutter win32] - path_drawing 1.0.0 [vector_math meta path_parsing flutter] - path_parsing 1.0.0 [vector_math meta] - path_provider_android 2.0.14 [flutter path_provider_platform_interface] - path_provider_ios 2.0.9 [flutter path_provider_platform_interface] - path_provider_linux 2.1.6 [ffi flutter path path_provider_platform_interface xdg_directories] - path_provider_macos 2.0.6 [flutter path_provider_platform_interface] - path_provider_platform_interface 2.0.3 [flutter platform plugin_platform_interface] - path_provider_windows 2.0.6 [ffi flutter path path_provider_platform_interface win32] - permission_handler_android 9.0.2+1 [flutter permission_handler_platform_interface] - permission_handler_apple 9.0.4 [flutter permission_handler_platform_interface] - permission_handler_platform_interface 3.7.0 [flutter meta plugin_platform_interface] - permission_handler_windows 0.1.0 [flutter permission_handler_platform_interface] - petitparser 4.4.0 [meta] - photo_manager 2.0.9 [flutter] - platform 3.1.0 - plugin_platform_interface 2.1.2 [meta] - process 4.2.4 [file path platform] - quiver 3.1.0 [matcher] - riverpod 1.0.3 [collection meta state_notifier] - rxdart 0.27.3 - shared_preferences_android 2.0.12 [flutter shared_preferences_platform_interface] - shared_preferences_ios 2.1.1 [flutter shared_preferences_platform_interface] - shared_preferences_linux 2.1.1 [file flutter path path_provider_linux path_provider_platform_interface shared_preferences_platform_interface] - shared_preferences_macos 2.0.4 [flutter shared_preferences_platform_interface] - shared_preferences_platform_interface 2.0.0 [flutter] - shared_preferences_web 2.0.4 [flutter flutter_web_plugins shared_preferences_platform_interface] - shared_preferences_windows 2.1.1 [file flutter path path_provider_platform_interface path_provider_windows shared_preferences_platform_interface] - sky_engine 0.0.99 - source_span 1.8.1 [collection path term_glyph] - stack_trace 1.10.0 [path] - state_notifier 0.7.2+1 [meta] - stream_channel 2.1.0 [async] - stream_transform 2.0.0 - string_scanner 1.1.0 [charcode source_span] - term_glyph 1.2.0 - test_api 0.4.8 [async boolean_selector collection meta source_span stack_trace stream_channel string_scanner term_glyph matcher] - typed_data 1.3.0 [collection] - url_launcher_android 6.0.17 [flutter url_launcher_platform_interface] - url_launcher_ios 6.0.16 [flutter url_launcher_platform_interface] - url_launcher_linux 3.0.1 [flutter url_launcher_platform_interface] - url_launcher_macos 3.0.1 [flutter url_launcher_platform_interface] - url_launcher_platform_interface 2.0.5 [flutter plugin_platform_interface] - url_launcher_web 2.0.10 [flutter flutter_web_plugins url_launcher_platform_interface] - url_launcher_windows 3.0.1 [flutter url_launcher_platform_interface] - uuid 3.0.6 [crypto] - vector_math 2.1.1 - video_player 2.4.1 [flutter html video_player_android video_player_avfoundation video_player_platform_interface video_player_web] - video_player_android 2.3.3 [flutter video_player_platform_interface] - video_player_avfoundation 2.3.4 [flutter video_player_platform_interface] - video_player_platform_interface 5.1.2 [flutter plugin_platform_interface] - video_player_web 2.0.9 [flutter flutter_web_plugins video_player_platform_interface] - win32 2.5.2 [ffi] - xdg_directories 0.2.0+1 [meta path process] - xml 5.3.1 [collection meta petitparser] ```