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

Research direction

Reproduce the interaction using the main.dart example, focusing on FlutterWebviewPlugin.onUrlChanged after Workmanager or android_alarm_manager initialization. Then inspect the Java Application class, WorkmanagerPlugin registration, and GeneratedPluginRegistrant flow; done means the webview listener continues emitting URL changes after the background plugin is initialized.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, dart, java
Domain
mobile-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
32/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.