Плагин Flutter Webview: возвращаемое html отличается при каждом запуске приложения - PullRequest
0 голосов
/ 04 августа 2020

Я использую flutter_webview_plugin для загрузки URL-адреса и получения от него HTML. Проблема в том, что возвращаемый HTML каждый раз отличается, что легко показать, получив длину строки HTML. Я использую другой URL-адрес в своем приложении, но я создал новый проект только для проверки этой проблемы.

Вот код:

  launchPlugin() {
    plugin.launch("https://www.google.com/?client=safari", hidden: true);
    plugin.onStateChanged.listen((state) {
      if (state.type == WebViewState.finishLoad) {
        final html =
            plugin.evalJavascript("document.documentElement.outerHTML");
        html.then((value) {
          print("Hello");
          //Breakpoint set here
        });
      }
    });
  }

Я установил точку останова в том месте, где комментарий находится в и запускал это приложение несколько раз (без изменения кода). Вот некоторые результаты отладки: enter image description here enter image description here enter image description here введите описание изображения здесь Что здесь происходит?

Полный main.dart код:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final plugin = FlutterWebviewPlugin();

  launchPlugin() {
    plugin.launch("https://www.google.com/?client=safari", hidden: true);
    plugin.onStateChanged.listen((state) {
      if (state.type == WebViewState.finishLoad) {
        final html =
            plugin.evalJavascript("document.documentElement.outerHTML");
        html.then((value) {
          print("Hello");
        });
      }
    });
  }

  @override
  void dispose() {
    plugin.dispose();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    launchPlugin();
    return Scaffold(
      body: Center(
        child: Text("Hello"),
      ),
    );
  }
}
...