Я довольно новичок во Flutter, поэтому, пожалуйста, прости меня, если это базовый c вопрос.
Я пытаюсь создать приложение Flutter, которое показывает только полноэкранный веб-просмотр, но мне нужно кнопка возврата устройства на go назад в историю. Первая задача, которую я выполнил с легкостью, но вторая - это борьба.
Я следовал инструкциям в этом ответе , но я не смог удалить весь беспорядок ответа на 360+ строк просто к кнопке «назад» и заставить ее работать.
Мой код действительно прост:
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:webview_flutter/webview_flutter.dart';
void main() => runApp(MyApp());
WebViewController _controller;
Future<void> _onWillPop(BuildContext context) async {
if (await _controller.canGoBack()) {
_controller.goBack();
} else {
exit(0);
return Future.value(false);
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setEnabledSystemUIOverlays([]);
return WillPopScope(
onWillPop: () => _onWillPop(context),
child: MaterialApp(title: 'Test App', home: WebView(
initialUrl: 'https://google.com',
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController c) => _controller = c,
)),
);
}
}
Но когда я пытаюсь нажать кнопку устройства назад, выдается следующее сообщение об ошибке:
java.lang.RuntimeException: Cannot execute operation because FlutterJNI is not attached to native.
at io.flutter.embedding.engine.FlutterJNI.ensureAttachedToNative(FlutterJNI.java:227)
at io.flutter.embedding.engine.FlutterJNI.markTextureFrameAvailable(FlutterJNI.java:554)
at io.flutter.embedding.engine.renderer.FlutterRenderer.markTextureFrameAvailable(FlutterRenderer.java:274)
at io.flutter.embedding.engine.renderer.FlutterRenderer.access$300(FlutterRenderer.java:38)
at io.flutter.embedding.engine.renderer.FlutterRenderer$SurfaceTextureRegistryEntry$1.onFrameAvailable(FlutterRenderer.java:145)
at android.graphics.SurfaceTexture$1.handleMessage(SurfaceTexture.java:211)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7520)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
На github флаттера есть как минимум 3 потока, но ни одно из решений не помогло мне. что мне здесь не хватает?