Как преобразовать flutter_web_view в HtmlElementView в веб-режиме

#android #flutter #dart #webview

#Android #flutter #dart #webview

Вопрос:

Это может быть повторяющийся вопрос, поскольку я видел много вопросов, связанных с фреймами, webview и всем этим, но каждый из них меня еще больше смущает, когда я их изучаю. В настоящее время я использую WebView виджет для отображения webview в своем мобильном приложении. Сейчас я хочу создавать для Интернета, но WebView он не поддерживается для Интернета, поэтому я искал альтернативный подход. Я узнал об HtmlElementView этом из документации flutter. Пытаюсь исследовать это, но, похоже, я не могу найти какой-либо четкий способ, которым я должен использовать его для решения моей проблемы.

Вот мой код:

     Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Container(
          margin: EdgeInsets.fromLTRB(0, 15, 0, 0),
          child: !kIsWeb
              ? WebView(
                  initialUrl: this.widget._url,
                  javascriptMode: JavascriptMode.unrestricted,
                  onPageStarted: this._pageStarted,
                )
              : HtmlElementView(
                  viewType: '',
                ),
        ),
      ),
    );
  }
 

Из моего кода я создаю WebView , когда не компилируется для web, и создаю HtmlElementView , когда компилируется для web. Как бы мне ни было неприятно это говорить, на данный момент это все, что я знаю HtmlElementView . Из документов viewType нужно взять строку, о которой я ничего не знаю.

Что именно я хочу сделать? Загружаемое содержимое WebView является динамическим, поэтому я хочу загрузить то же самое в HtmlElementView . Любая помощь или, возможно, материалы, которые могли бы помочь мне в этом, были бы очень признательны, поскольку я новичок во всем этом. Спасибо.

Ответ №1:

В настоящее время я нахожусь в том же квесте и нашел этот удобный, простой пример:

https://codepen.io/riccio85/pen/wvMeaMe

 import 'dart:html';
import 'dart:ui' as ui;
import 'package:flutter/material.dart';

void main() {
  // ignore: undefined_prefixed_name
  ui.platformViewRegistry.registerViewFactory(
      'hello-html',
      (int viewId) => IFrameElement()
        ..width = '500'
        ..height = '360'
        ..src = 'https://www.youtube.com/embed/xg4S67ZvsRs'
        ..style.border = 'none');

  runApp( Padding(
        padding: EdgeInsets.all(25),
        child: SizedBox(
          width: 640,
          height: 360,
          child: HtmlElementView(viewType: 'hello-html'),
      ),
    ),
  );
}
 

Это не идеально, но, похоже, делает то, что мне нужно. То есть я также заканчиваю проверку web так же, как и в вашем примере, и использую webview_flutter в противном случае.

На данный момент, похоже, это небольшой недостаток во всем этом, будем надеяться, что ситуация улучшится.