Flutter Web, HtmlElementView, «Удаление запрещенного атрибута» - PullRequest
1 голос
/ 10 июля 2020

Я пытаюсь создать значок приложения HtmlElementView для Playstore во Flutter Web?

Я пробовал следующее, как упоминалось здесь

  Widget _getAppStoreBadgeView() {
    final NodeValidatorBuilder _htmlValidator =
        new NodeValidatorBuilder.common()
          ..allowElement('a', attributes: ['data-target', 'data-toggle'])
          ..allowElement('button', attributes: ['data-target', 'data-toggle']);
    ui.platformViewRegistry.registerViewFactory("idid", (int viewId) {
      final element = DivElement()
        ..setInnerHtml(r"""
        <a href='https://play.google.com/store/apps/details?id=com.shahxad.evendor&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png'/></a>
        """, validator: _htmlValidator)
        ..style.width = "100%"
        ..style.height = "100%"
        ..style.border = 'none';
      return element;
    });
    return Container(
      child: HtmlElementView(viewType: "idid"),
      height: 150,
      width: 400,
    );
  }

Но он не работает как Я получаю вот что.

enter image description here

I am getting this message in the Chrome console.

Removing disallowed attribute

html_dart2js.dart:39901 Removing disallowed attribute  html_dart2 js .dart: 39901 Удаление запрещенного атрибута 
image

1 Ответ

1 голос
/ 10 июля 2020

Используйте NodeValidatorBuilder из библиотеки dart: html с предопределенными правилами allowHtml5, allowNavigation, allowImages и определите класс ItemUrlPolicy, чтобы разрешить навигацию из сгенерированного html -код.

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

class ItemUrlPolicy implements html.UriPolicy {
  RegExp regex = RegExp(r'(?:http://|https://)?.*');

  bool allowsUri(String uri) {
    return regex.hasMatch(uri);
  }
}

class MyWidget extends StatefulWidget {
  @override
  MyWidgetState createState() => MyWidgetState();
}

class MyWidgetState extends State<MyWidget> {
  html.DivElement _element;

  @override
  void initState() {
    super.initState();
    _element = html.DivElement()
      ..appendHtml("""
            <a href='https://play.google.com/store/apps/details?id=com.shahxad.evendor&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'>
              <img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png'/>
            </a>
          """,
          validator: html.NodeValidatorBuilder()
            ..allowHtml5(uriPolicy: ItemUrlPolicy())
            ..allowNavigation(ItemUrlPolicy())
            ..allowImages(ItemUrlPolicy()));
    // ignore: undefined_prefixed_name
    ui.platformViewRegistry.registerViewFactory('demo-view', (int viewId) => _element);
  }

  @override
  Widget build(BuildContext context) {
    return HtmlElementView(key: UniqueKey(), viewType: "demo-view");
  }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...