Как контролировать веб-просмотр с помощью MethodChannel во флаттере

Я интегрирую веб-просмотр во флаттер, есть два варианта: первый использует MethodChannel, а второй - виджет WebView, в моем веб-просмотре у меня есть степпер для навигации между маршрутами, когда я выполняю интеграцию во флаттере, я могу добиться этого навигация благодаря WebViewController и виджету WebView, но по причинам X мне нужно добиться того же, но с помощью MethodChannel. вопрос в том, есть ли способ это сделать? я хочу иметь контроль над веб-просмотром для кнопки "Назад".

Функция, запускающая веб-просмотр с помощью MethodChannel

static void openWebActivity(String url, String title, {String token}) async {
    const platform = const MethodChannel("native_interaction");
    try {
      await platform.invokeMethod(
          "startWebActivity", {"url": url, "title": title, "token": token});
    } on PlatformException catch (e) {
      print(e.message);
    }
}

Webview с виджетом WebView

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';

class SiniestroWebView extends StatefulWidget {
  final String uri;
  SiniestroWebView(this.uri);

  @override
  _SiniestroWebViewState createState() => _SiniestroWebViewState();
}

WebViewController controllerGlobal;

class _SiniestroWebViewState extends State<SiniestroWebView> {
  @override
  Widget build(BuildContext context) {
    return new WillPopScope(
      onWillPop: _goBack,
      child: new Scaffold(
        body: new SafeArea(
          child: new WebView(
            initialUrl: widget.uri,
            javascriptMode: JavascriptMode.unrestricted,
            onWebViewCreated: (WebViewController webViewController) {
              controllerGlobal = webViewController;
            },
          ),
        ),
      ),
    );
  }

  Future<bool> _goBack() async {
    var value = await controllerGlobal.canGoBack();
    if (value) {
      print("onwill goback");
      controllerGlobal.goBack();
      return Future.value(false);
    } else {
      return Future.value(true);
    }
  }
}

0 ответов

Другие вопросы по тегам