fluttercommunity / fluttercommunity/flutter_webview_plugin

Event listeners stops working after another plugin initialization

Đang mở
#550 16 bình luận 8 reaction 0 người được giao Xem trên GitHub
bug needs investigation
Ngôn ngữ chính
Java
Star
1.5k
Fork
938
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

## 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.
```

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Hướng nghiên cứu

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.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
android, dart, java
Lĩnh vực
mobile-dev
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
32/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.