fluttercommunity / fluttercommunity/flutter_webview_plugin

Event listeners stops working after another plugin initialization

Open
#550 16 comments 8 reactions 0 assignees View on GitHub
bug needs investigation
Dominant language
Java
Stars
1.5k
Forks
938
PR merge metrics
No merged PRs in 30d

Description

## System info

Issue occurs on: Android
Plugin version: 0.3.7
Flutter doctor output:

```
[✓] Flutter (Channel stable, v1.7.8+hotfix.4, on Linux, locale en_US.UTF-8)

[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[✓] Android Studio (version 3.5)
[!] Connected device
! No devices available

! Doctor found issues in 1 category.
```

## Steps to Reproduce

1. Use webview plugin with `onUrlChanged` listener attached
2. Add [android_alarm_manager](https://pub.dev/packages/android_alarm_manager) or [workmanager](https://pub.dev/packages/workmanager) plugin to your project
3. Initialize [android_alarm_manager](https://pub.dev/packages/android_alarm_manager) or [workmanager](https://pub.dev/packages/workmanager) and create an alrarm or task.

`main.dart` example:
```dart
...
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
import 'package:workmanager/workmanager.dart' as workManager;

...
void callbackDispatcher() {
workManager.Workmanager.executeTask((backgroundTask) {
print("Native called background task: $backgroundTask"); //simpleTask will be emitted here.
return Future.value(true);
});
}

void main() async {
FlutterError.onError = (errorDetails) {
Logger.e( "${errorDetails.exception}");
if (Logger.isInDebugMode) {
FlutterError.dumpErrorToConsole(errorDetails);
}
};

runZoned(() {
workManager.Workmanager.initialize(
callbackDispatcher,
isInDebugMode: true
);
workManager.Workmanager.registerPeriodicTask("1", "simpleTask", frequency: Duration(hours: 1)); //Comment this line to make webview events work
runApp(new HAClientApp());

}, onError: (error, stack) {
Logger.e("$error");
Logger.e("$stack");
if (Logger.isInDebugMode) {
debugPrint("$stack");
}
});
}

class HAClientApp extends StatelessWidget {

@override
Widget build(BuildContext context) {
return new MaterialApp(
title: "Application",
theme: new ThemeData(
primarySwatch: Colors.blue,
),
initialRoute: "/",
routes: {
"/": (context) => MainPage(title: 'HA Client'),
"/login": (context) => WebviewScaffold(
url: "${ConnectionManager().oauthUrl}",
appBar: new AppBar(
title: new Text("Login"),
),
),
},
);
}
}
...
```
Webview calling somewhere in code:
```dart
final flutterWebviewPlugin = new FlutterWebviewPlugin();
flutterWebviewPlugin.onUrlChanged.listen((String url) {
print("Url changed to: $url");
});
Navigator.of(context).pushNamed('/login');
```
Comment `workManager.Workmanager.registerPeriodicTask` and webview `onUrlChanged` will start working. Also need to mention that [android_alarm_manager](https://pub.dev/packages/android_alarm_manager) and [workmanager](https://pub.dev/packages/workmanager) register itself in java application class. For example:
```java
package com.keyboardcrumbs.hassclient;

import io.flutter.app.FlutterApplication;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback;
import io.flutter.plugins.GeneratedPluginRegistrant;
import be.tramckrijte.workmanager.WorkmanagerPlugin;

public class Application extends FlutterApplication implements PluginRegistrantCallback {
@Override
public void onCreate() {
super.onCreate();
WorkmanagerPlugin.setPluginRegistrantCallback(this);
}

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

No errors in log

```
$ flutter doctor -v
[✓] Flutter (Channel stable, v1.7.8+hotfix.4, on Linux, locale en_US.UTF-8)
• Flutter version 1.7.8+hotfix.4 at /home/estevez/sdk/flutter
• Framework revision 20e59316b8 (8 weeks ago), 2019-07-18 20:04:33 -0700
• Engine revision fee001c93f
• Dart version 2.4.0


[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
• Android SDK at /home/estevez/Android/Sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-29, build-tools 29.0.2
• Java binary at: /home/estevez/bin/android-studio/jre/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
• All Android licenses accepted.

[✓] Android Studio (version 3.5)
• Android Studio at /home/estevez/bin/android-studio
• Flutter plugin version 39.0.3
• Dart plugin version 191.8423
• Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)

[!] Connected device
! No devices available

! Doctor found issues in 1 category.
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.