Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

alarm_manager plugin stopped working (Could not launch engine in configuration) #17566

Closed
marcmo opened this issue May 14, 2018 · 43 comments
Closed
Assignees
Labels
c: crash Stack traces logged to the console

Comments

@marcmo
Copy link

marcmo commented May 14, 2018

Steps to Reproduce

  1. checkout plugins git repo (0c4ccbf in https://github.com/flutter/plugins.git)
  2. build & run alarm_manager plugin example (from folder packages/android_alarm_manager/example)

I had this one running before but now cannot get it to work anymore. I can build & deploy the example app to an Android Nexus 5. The app starts without errors. The alarm_manager example is supposed to callback to the dart code every 60 seconds, instead what I see is an error every 60 seconds:

[+58227 ms] E/flutter ( 2789): [ERROR:flutter/shell/platform/android/android_shell_holder.cc(104)] Could not launch engine in configuration.
[ +242 ms] I/chatty  ( 2789): uid=11095(io.flutter.plugins.androidalarmmanagerexample) 1.ui identical 1 line
[        ] E/flutter ( 2789): [ERROR:flutter/shell/platform/android/android_shell_holder.cc(104)] Could not launch engine in configuration.
[+59732 ms] E/flutter ( 2789): [ERROR:flutter/shell/platform/android/android_shell_holder.cc(104)] Could not launch engine in configuration.
[  +34 ms] E/flutter ( 2789): [ERROR:flutter/shell/platform/android/android_shell_holder.cc(104)] Could not launch engine in configuration.
[+60118 ms] E/flutter ( 2789): [ERROR:flutter/shell/platform/android/android_shell_holder.cc(104)] Could not launch engine in configuration.
[  +18 ms] E/flutter ( 2789): [ERROR:flutter/shell/platform/android/android_shell_holder.cc(104)] Could not launch engine in configuration.

Logs

flutter analyze

No issues found!

flutter doctor -v

flutter doctor -v
[✓] Flutter (Channel beta, v0.3.2, on Mac OS X 10.13.4 17E202, locale en-US)
    • Flutter version 0.3.2 at /Users/muellero/dev/flutter
    • Framework revision 44b7e7d3f4 (3 weeks ago), 2018-04-20 01:02:44 -0700
    • Engine revision 09d05a3891
    • Dart version 2.0.0-dev.48.0.flutter-fe606f890b

[✓] Android toolchain - develop for Android devices (Android SDK 27.0.3)
    • Android SDK at /Users/muellero/Library/Android/sdk
    • Android NDK at /Users/muellero/Library/Android/sdk/ndk-bundle
    • Platform android-27, build-tools 27.0.3
    • ANDROID_HOME = /Users/muellero/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b01)
    • All Android licenses accepted.

[✓] iOS toolchain - develop for iOS devices (Xcode 9.2)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 9.2, Build version 9C40b
    • ios-deploy 1.9.2
    • CocoaPods version 1.5.2

[✓] Android Studio (version 3.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 24.2.1
    • Dart plugin version 173.4700
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b01)

[✓] VS Code (version 1.23.0)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Dart Code extension version 2.12.1

[✓] Connected devices (2 available)
    • Nexus 5X     • 00b5f318217aa7d9                         • android-arm64 • Android 8.1.0 (API 27)
    • ESR iphone 8 • a60c31f1f4168728fc0ccfb669a9c3bb2108ae83 • ios           • iOS 11.3.1

• No issues found!
@marcmo
Copy link
Author

marcmo commented May 15, 2018

as @gazialankus mentioned I also can confirm that downgrading Flutter to v0.2.4 3352a3f will make it work again

@marcmo
Copy link
Author

marcmo commented May 15, 2018

of course using v0.2.4 is no fun at all...constantly getting error like this:

Error: The keyword 'const' or 'new' is required here. 
Due to an implementation limit, the compiler isn't able to infer 'const' or 'new' here.

I feel quite alone since no-one really seems to care for this...
image

@squashmode
Copy link

I see this too. Sad to not have this in a functional state, it is a total blocker for me using flutter.

@marcmo
Copy link
Author

marcmo commented May 25, 2018

this issue seems to be related to the changes introduced in the flutter engine with this change (Support multiple shells in a single process). This change by core contributer @chinmaygarde is pretty substantial (changed lines +12,543 −11,072).
This is how the android service for the AlarmManager looks like, maybe @chinmaygarde can you take a look at it and tell me if this needs to be changed? @mravn-google did you try to test your plugin with newer flutter releases?

  @Override
  public void onDestroy() {
    // Try to find the native view of the main activity if there is one.
    Context context = getApplicationContext();
    FlutterNativeView nativeView = viewFromAppContext(context);

    // Don't destroy mFlutterView if it is the same as the native view for the
    // main activity, or the same as the shared native view.
    if (mFlutterView != nativeView && mFlutterView != sSharedFlutterView) {
      mFlutterView.destroy();
    }
    mFlutterView = null;

    // Don't destroy the shared native view if it is the same native view as
    // for the main activity.
    if (sSharedFlutterView != nativeView) {
      sSharedFlutterView.destroy();
    }
    sSharedFlutterView = null;
  }

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    ensureFlutterView();
    String entrypoint = intent.getStringExtra("entrypoint");
    if (entrypoint == null) {
      Log.i(TAG, "onStartCommand got a null entrypoint. Bailing out");
      return START_NOT_STICKY;
    }
    if (appBundlePath != null) {
      mFlutterView.runFromBundle(appBundlePath, null, entrypoint, true);
    }
    return START_NOT_STICKY;
  }

BTW I settled on using v0.2.11 since this is the last release that does not contain those changes to the engine. and v0.2.4 is no fun since it gives you tons of errors when omitting the new keywords.

@mravn-google
Copy link
Contributor

cc @zanderso

@gazialankus
Copy link
Contributor

gazialankus commented May 25, 2018

Here's my current workaround for this bug FWIW: I'm writing my message to a file in the Android side, and letting the Dart side know via runFromBundle() call as method channels won't work. This is my Kotlin function that does this:

    fun sendToDart(msg: String) {
        val printWriter = File(applicationContext.filesDir, "msgin").printWriter()
        printWriter.println(msg)
        printWriter.close()

        ensureFlutterView()
        mFlutterView?.runFromBundle(appBundlePath, null, "incomingMsgToDart", true)
    }

And at the Dart side I have an incomingMsgToDart() that catches this. Ugly but saves the day. May unblock @squashmode.

Btw, even at v0.2.4 I'm having this issue with a sticky persistent Android service. AlarmService is fine in v0.2.4 but mine is not. I should create a separate bug report for it at some point with sample code.

@marcmo
Copy link
Author

marcmo commented May 25, 2018

@gazialankus how do you trigger your function incomingMsgToDart? do you poll the file?
while that might be a workaround in your case, I need the alarm_manager feature that I can execute dart code even without an activity in the foreground.

@gazialankus
Copy link
Contributor

gazialankus commented May 26, 2018

No I don't poll it, I trigger it with the code that I gave. The runFromBundle call does the triggering. This runs fine from the service. It runs just fine when the activity is in the background, or when there is no activity running at all.

The ensureFlutterView function is from the alarm_manager sample. This works because method channels don't work but runFromBundle does. I did not test this in the latest Flutter version. You can replace your method channel code with a runFromBundle that triggers a simple Dart function that does a print to see if this workaround would help.

@radzish
Copy link

radzish commented May 28, 2018

see here also: #16998

@marcmo
Copy link
Author

marcmo commented May 28, 2018

@mravn-google sorry to ping you again but you seem to be the only one who considers that this might be a huge problem. Can you confirm that the current flutter version is broken for any kind of alarm_manager like functionality? if so is there any recommended way to deal with it?
Maybe you should consider removing the alarm_manager plugin from the official repository until this is solved?
For me the alarm_manager-plugin implementation is the reference implementation for

  • implementing an android plugin in general
  • executing dart code without an activity

I'd consider it so important that it ought to be included into some kind of regression test suite. No flutter release should pass as long as this test breaks.

@mravn-google
Copy link
Contributor

@marcmo AFAIK, @zanderso cc'ed above is still the primary person working on this. The cc was sent three days ago, and given that today is Monday and Memorial Day in the US, we probably just need to give it a bit more time. I'll be checking up on this issue in the coming days.

FWIW, I fully agree that plugins should be regression tested. It is on my plate to set that up.

@chinmaygarde
Copy link
Member

I am going to take a look at the regression tomorrow.

@marcmo
Copy link
Author

marcmo commented Jun 4, 2018

@chinmaygarde did you get around to look at the regression?

@marcmo
Copy link
Author

marcmo commented Jun 7, 2018

hey google guys, what's the best way to talk to you about this issue? I don't know why you don't consider this issue at all...sure you are busy but come on... this is really embarrassing! don't just focus on the pretty UI stuff, get your base right for an awesome dev experience! flutter is awesome but it is NOT ready for production when you slip with things like that and don't even talk to your users about it! even the react native guys are more responsive in this area! sorry for whining but it is kind of frustrating...
@chinmaygarde @mravn-google

@mravn-google
Copy link
Contributor

@marcmo Sorry for the frustration this causes. The best way to talk to us is what you are doing. I'll see if I can find a quick way of unblocking you. No promises though.

@ghost
Copy link

ghost commented Jun 7, 2018

Yep, I agree. Would really like to get more love for this.

I have a project in mind, but I can't start working on it unless this is fixed.

@mravn-google
Copy link
Contributor

The immediate problem with the android_alarm_manager example is that both the FlutterActivity and the onStartCommand try to runFromBundle. I've tried to guard the call to runFromBundle in this line with the extra condition !mFlutterView.isApplicationRunning() and that removes the error, it seems. But I'm not familiar enough with the plugin to know if this is a relevant change.

@marcmo
Copy link
Author

marcmo commented Jun 7, 2018

thanks @mravn-google
Note that the isApplicationRunning() function was introduced only in a very recent commit and therefore is not available in beta yet.
Anway I tested it and while I don't get an error anymore, the callback to my dart code is not happening at all.
this is the change I tried:

    if (appBundlePath != null && !mFlutterView.isApplicationRunning()) {
      mFlutterView.runFromBundle(appBundlePath, null, entrypoint, true);

without the additional check I'm back to this error

E/AndroidRuntime(24566): java.lang.AssertionError: This Flutter engine instance is already running an application
E/AndroidRuntime(24566): 	at io.flutter.view.FlutterNativeView.runFromBundle(FlutterNativeView.java:77)
E/AndroidRuntime(24566): 	at io.flutter.plugins.androidalarmmanager.AlarmService.onStartCommand(AlarmService.java:169)

@marcmo
Copy link
Author

marcmo commented Jun 7, 2018

BTW to test this I have to switch from flutter version to flutter version...which takes forever (depending on the download speed) since apparently nothing of the flutter downloads is cached.

image

anybody knows of a quicker way to do that?

@georggrab
Copy link

georggrab commented Jun 11, 2018

@marcmo It's due to the call to isApplicationRunning(), which will return true if the FlutterNativeView could be retrieved from the context or has been saved previously. runFromBundle won't be executed. Here's the most recent implementation of runFromBundle:

public void runFromBundle(String bundlePath, String snapshotOverride, String entrypoint, boolean reuseRuntimeController) {
        this.assertAttached();
        if (this.applicationIsRunning) {
            throw new AssertionError("This Flutter engine instance is already running an application");
        } else {
            nativeRunBundleAndSnapshot(this.mNativePlatformView, bundlePath, snapshotOverride, entrypoint, reuseRuntimeController, this.mContext.getResources().getAssets());
            this.applicationIsRunning = true;
        }
    }

which will clearly prevent execution if the Application is currently running. The background task works only if the Application is not running, and thus alarm_manager creates a new FlutterNativeView from context.
As the problem is only occuring when the Application is running, I think this can be fixed by sending a message back to the Flutter Application and executing the callback in the Dart alarm_manager API directly. @chinmaygarde do you know if this whole use case (calling back from native code into Dart using the same Engine) is no longer pursued or if this can be considered a bug?

@georggrab
Copy link

I built a library based on this one, however using the Android Job Scheduler API instead of AlarmManager, and implementing the approach outlined above (See here). @chinmaygarde do you want me to merge these changes back into android_alarm_manager?

@marcmo
Copy link
Author

marcmo commented Jun 12, 2018

thanks for your comments @talkdirty . I gave up on using the flutter android_alarm_manager plugin and ended up building my own plugin which is not generic at all. I just need to be able to execute code in the background in regular intervals and do this without running any dart code now. But I will take a look at your plugin also.

@bkonyi
Copy link
Contributor

bkonyi commented Jun 26, 2018

Hi all,

I wasn't aware there was an issue filed for this, but I'll take over now since I'm currently working on getting the background execution for Android on par with the iOS implementation.

As already mentioned, there was a major refactor of the engine which caused breakages for our background execution implementations. Some of the changes have added the restriction that an isolate spawned by the engine can only have its entry point run once, which is part of the reason that the android_alarm_manager plugin is broken. The fix for this is to setup a MethodChannel in the entry point run on the new isolate that can be used to invoke callbacks and other Dart-land functionality from native without having to reenter the isolate.

For this to work, the iOS implementation needs to land and the plugin needs to be restructured slightly so that Dart callbacks can be invoked from the plugin via MethodChannels and an entry point within the plugin itself (see here for an example of this).

Unfortunately, these changes may require some code to be updated if the alarm_manager_plugin was being used to updated UI state since callbacks will no longer be executed on the UI isolate. To get around this, a communication channel would need to be established between the UI isolate and the background isolate via isolate ports, which will be easily shareable using the new IsolateNameServer, which could then be used update UI state.

On the upside, callbacks no longer have to be defined as a top-level function in the root library of the application. Instead, callbacks can live in any library available to the application and can be top-level functions or static methods, (closures will probably work, but I'll need to double check), which should hopefully make these sorts of plugins more friendly to use.

TL;DR: I'm working on this, although there may be some minor breaking changes for those using the plugin to update UI. This is my top priority and I hope to have something done in the next couple of weeks.

@marcmo
Copy link
Author

marcmo commented Jun 27, 2018

thanks very much for the update @bkonyi 💚 ! While I was able to get around the alarm_manager altogether I thinks it's vital for flutter in general to solve platform challenges like this. Even better that you also address background execution on iOS.

@ethanleeX
Copy link

I've got java.lang.AssertionError: This Flutter engine instance is already running an application error when using this plugin , how can I fix this error , any workaround ?

@zoechi
Copy link
Contributor

zoechi commented Jul 17, 2018

@LyCharlie
Please add the output of flutter doctor -v.

@ethanleeX
Copy link

ethanleeX commented Jul 17, 2018

flutter doctor -v
[✓] Flutter (Channel beta, v0.5.1, on Mac OS X 10.13.5 17F77, locale en-CN)
• Flutter version 0.5.1 at /Users/ethanlee/development/flutter
• Framework revision c7ea3ca (7 weeks ago), 2018-05-29 21:07:33 +0200
• Engine revision 1ed25ca
• Dart version 2.0.0-dev.58.0.flutter-f981f09760

[✓] Android toolchain - develop for Android devices (Android SDK 27.0.3)
• Android SDK at /Users/ethanlee/Library/Android/sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-27, build-tools 27.0.3
• ANDROID_HOME = /Users/ethanlee/Library/Android/sdk
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b01)
• All Android licenses accepted.

[!] iOS toolchain - develop for iOS devices (Xcode 9.4.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 9.4.1, Build version 9F2000
✗ libimobiledevice and ideviceinstaller are not installed. To install, run:
brew install --HEAD libimobiledevice
brew install ideviceinstaller
✗ ios-deploy not installed. To install:
brew install ios-deploy
✗ CocoaPods not installed.
CocoaPods is used to retrieve the iOS platform side's plugin code that responds to your plugin usage on the Dart side.
Without resolving iOS dependencies with CocoaPods, plugins will not work on iOS.
For more info, see https://flutter.io/platform-plugins
To install:
brew install cocoapods
pod setup

[✓] Android Studio (version 3.1)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin version 26.0.1
• Dart plugin version 173.4700
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b01)

[!] IntelliJ IDEA Community Edition (version 2017.2.4)
• IntelliJ at /Applications/IntelliJ IDEA CE.app
✗ Flutter plugin not installed; this adds Flutter specific functionality.
✗ Dart plugin not installed; this adds Dart specific functionality.
• For information about installing plugins, see
https://flutter.io/intellij-setup/#installing-the-plugins

[!] VS Code (version 1.25.1)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension not installed; install from
https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter

[!] Connected devices
! No devices available

! Doctor found issues in 4 categories.

@zoechi thanks

@zoechi
Copy link
Contributor

zoechi commented Jul 17, 2018

@LyCharlie there was some work done recently that I think is related.
flutter/engine#5640, flutter/engine#5539
The alarm_manager plugin probably needs some update
flutter/plugins#642

@bkonyi
Copy link
Contributor

bkonyi commented Jul 17, 2018

@LyCharlie, @zoechi is right, the plugin needs to be updated after flutter/engine#5640 lands. The work is all done in flutter/plugins#642, so hopefully this is all done in the next week. If you're really desperate for this, all the code is there if you're willing to checkout the working branches and use a local engine, but you're probably best off just waiting a few more days for this to be rolled into flutter/flutter's master branch :)

@zoechi zoechi added c: crash Stack traces logged to the console p: first party labels Jul 17, 2018
@ethanleeX
Copy link

@bkonyi thanks a lot , I'll try it next week

@zoutepopcorn
Copy link

@bkonyi @LyCharlie

Is there any update ? And is a simple example working for anybody?

studio

E/AndroidRuntime( 5116): FATAL EXCEPTION: main
E/AndroidRuntime( 5116): Process: io.flutter.plugins.androidalarmmanagerexample, PID: 5116
E/AndroidRuntime( 5116): java.lang.AssertionError: This Flutter engine instance is already running an application
E/AndroidRuntime( 5116): 	at io.flutter.view.FlutterNativeView.runFromBundle(FlutterNativeView.java:77)
E/AndroidRuntime( 5116): 	at io.flutter.plugins.androidalarmmanager.AlarmService.onStartCommand(AlarmService.java:168)

doctor

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel beta, v0.5.1, on Linux, locale C)
[✓] Android toolchain - develop for Android devices (Android SDK 28.0.1)
[✓] Android Studio (version 3.1)
[✓] Connected devices (1 available)

• No issues found!
$ flutter upgrade
Already up to date.
....

@bkonyi
Copy link
Contributor

bkonyi commented Aug 7, 2018

@zoutepopcorn the fix hasn't landed quite yet as we've been blocked on getting the Android background execution changes in, but those just landed in flutter/engine#5954. Assuming those changes stick, flutter/plugins#642 needs to be approved, landed, and updated on pub. We're almost done, hang in there just a bit longer!

@bkonyi
Copy link
Contributor

bkonyi commented Aug 15, 2018

@mravn-google, would you mind publishing the latest update for this plugin on pub? I don't believe I have publish rights.

@bkonyi
Copy link
Contributor

bkonyi commented Aug 15, 2018

Version 0.2.0 is now available on pub.

@bkonyi bkonyi closed this as completed Aug 15, 2018
@marcmo
Copy link
Author

marcmo commented Aug 22, 2018

just saw that you updated the plugin. thanks for taking care of this @bkonyi ! one question: how can I make sure I run the matching flutter engine version that contains the changes that go along with the plugin update?

@bkonyi
Copy link
Contributor

bkonyi commented Aug 22, 2018

@marcmo not a problem! Since new functionality added to the engine is needed to use the plugin, you'll want to use either whatever engine revision is being used on master of flutter/flutter or you can update engine.version with this revision e54bc4ea1832352c4c92f54ed6919ac5bff154ab. Unfortunately, I can't promise that those revisions are totally stable so you might have to try a few revisions after e54bc4ea1832352c4c92f54ed6919ac5bff154ab if you run into issues.

@marcmo
Copy link
Author

marcmo commented Aug 22, 2018

ok thanks! will start with master first and try to get the example running. again...so awesome you took care of this @bkonyi ! will try to use this rather then my homegrown workaround for android!

@zoutepopcorn
Copy link

Thanks for all the work 🥇 all.

First it was not working that well at my Emulator (not able / time to debug that). But when I tried on my real device it seems to work a lot better 👍 . So I made my own little website to debug. If you want you can use it also (sometimes it has to wake up -

import 'package:http/http.dart' as http; 

http.get("https://h0i.herokuapp.com/p/TEST_alarm_manager/my_message").then((res) async {
});

Then I watch the requests on ``https://h0i.herokuapp.com/```. If you want you can use it.

It look like after a while (when I lock my screen) it switch from every 5 seconds to every 30 seconds to 1 sometimes minute. Not sure if its an issue, it can be my server also. Just wondering if i can get it stable

@bkonyi
Copy link
Contributor

bkonyi commented Aug 31, 2018

@zoutepopcorn glad I could help!

How often are you trying to send requests to your server? The AlarmManager on Android doesn't make any promises about when alarms are triggered. Basically, alarms aren't supposed to be used to set short-lived timers (for example, querying a server every 5 seconds) but for tasks that occur occasionally.

@zoutepopcorn
Copy link

zoutepopcorn commented Sep 2, 2018

@bkonyi thank you for your response. I want to use it for a get request each 3 hours. For testing I made a short timer, but make it longer.

I wonder if it's also working in doze mode

https://developer.android.com/training/scheduling/alarms

Alarms do not fire when the device is idle in Doze mode. Any scheduled alarms will be deferred until the device exits Doze. If you need to ensure that your work completes even when the device is idle there are several options available. You can usesetAndAllowWhileIdle() orsetExactAndAllowWhileIdle() to guarantee that the alarms will execute. Another option is to use the new WorkManager API, which is built to perform background work either once or periodically. For more information, see Schedule tasks with WorkManager.

I don't know much about Android but maybe this is a problem..

I will try to replace

manager.set(clock, startMillis, pendingIntent);

With setAndAllowWhileIdle

@zoutepopcorn
Copy link

zoutepopcorn commented Sep 3, 2018

In Alarmservice.java

I changed the function manager.set() => manager.setAndAllowWhileIdle(clock, startMillis, pendingIntent). Now its also working in the background 👍 (only small test). But restarting is not working at the moment, have to look that up later.

You can change this in your
Flutter Plugins > src.main > java... > Alarmservice.java

	   .....
      } else {
        manager.setAndAllowWhileIdle(clock, startMillis, pendingIntent);
      }

Then I will call and do a second call in the doGet() function.

await AndroidAlarmManager.oneShot(const Duration(seconds: 10), oneShotID, doGet);

@bags4439
Copy link

bags4439 commented Feb 5, 2019

The issue revolves around:

@Override
    public void registerWith(PluginRegistry registry) {
        GeneratedPluginRegistrant.registerWith(registry);
}

from you android Application class. In my case, Some of the plugins generated inside GeneratedPluginRegistrant were causing the problem. So what i did, i commented out GeneratedPluginRegistrant.registerWith(registry), to prevent auto generation and instead added the plugins i wanted to register directly inside the registerWith override.

Now looking like this:

 @Override
    public void registerWith(PluginRegistry registry) {
        //GeneratedPluginRegistrant.registerWith(registry);
      AndroidAlarmManagerPlugin.registerWith(registry.registrarFor("io.flutter.plugins.androidalarmmanager.AndroidAlarmManagerPlugin"));
        FlutterLocalNotificationsPlugin.registerWith(registry.registrarFor("com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin"));
        PathProviderPlugin.registerWith(registry.registrarFor("io.flutter.plugins.pathprovider.PathProviderPlugin"));
 
    }

ETC cheers!!!

@github-actions
Copy link

This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of flutter doctor -v and a minimal reproduction of the issue.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Aug 31, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
c: crash Stack traces logged to the console
Projects
None yet
Development

No branches or pull requests