diff --git a/lib/controls/html_text_viewer_control.dart b/lib/controls/html_text_viewer_control.dart index eed9ed0..aaa64ba 100644 --- a/lib/controls/html_text_viewer_control.dart +++ b/lib/controls/html_text_viewer_control.dart @@ -1,9 +1,12 @@ import 'dart:async'; +import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart'; import 'package:html/dom.dart' as dom; +import '../globals.dart'; + const _emojiSize = {'width': '20px', 'height': '20px', 'margin-left': '-3px'}; class HtmlTextViewerControl extends StatelessWidget { @@ -17,6 +20,7 @@ class HtmlTextViewerControl extends StatelessWidget { Widget build(BuildContext context) { return HtmlWidget( content, + factoryBuilder: () => MyWidgetFactory(), customStylesBuilder: _defaultStylesBuilder, onTapUrl: onTapUrl, ); @@ -30,3 +34,28 @@ class HtmlTextViewerControl extends StatelessWidget { return null; } } + +class MyWidgetFactory extends WidgetFactory { + @override + Widget? buildImageWidget(BuildMetadata meta, ImageSource src) { + final url = src.url; + if (!url.startsWith(RegExp('https?://'))) { + return super.buildImageWidget(meta, src); + } + + Map headers = {'user-agent': userAgent}; + + return CachedNetworkImage( + httpHeaders: headers, + errorWidget: (context, _, error) => + onErrorBuilder(context, meta, error, src) ?? widget0, + fit: BoxFit.fill, + imageUrl: url, + progressIndicatorBuilder: (context, _, progress) { + final t = progress.totalSize; + final v = t != null && t > 0 ? progress.downloaded / t : null; + return onLoadingBuilder(context, meta, v, src) ?? widget0; + }, + ); + } +} diff --git a/pubspec.lock b/pubspec.lock index 7f17bce..c37f5b5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -556,10 +556,10 @@ packages: dependency: "direct main" description: name: flutter_widget_from_html_core - sha256: df7c7c9e5ea144f7ab0adfbad733b4d4f7d408ab733c94e6e9fdcb327af92aa1 + sha256: b1048fd119a14762e2361bd057da608148a895477846d6149109b2151d2f7abf url: "https://pub.dev" source: hosted - version: "0.15.1" + version: "0.15.2" freezed_annotation: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 9a57157..93d8bab 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -24,7 +24,7 @@ dependencies: flutter_secure_storage: ^9.2.2 flutter_svg: ^2.0.10+1 flutter_web_auth_2: ^3.1.2 - flutter_widget_from_html_core: ^0.15.1 + flutter_widget_from_html_core: ^0.15.2 get_it: ^7.7.0 get_it_mixin: ^4.2.2 go_router: ^14.1.2