如何使用 HTML 渲染图像,使用 Flutter 创建 iOS-App 的 CSS?

Posted

技术标签:

【中文标题】如何使用 HTML 渲染图像,使用 Flutter 创建 iOS-App 的 CSS?【英文标题】:How to render image using HTML, CSS using flutter to create iOS-App? 【发布时间】:2020-01-02 07:15:20 【问题描述】:

正在尝试使用 HTML、CSS 在 Flutter 中创建 PDF。因此,在某些情况下,我必须使用 html 和 css 呈现资产图像。

android 的情况下,它使用资产文件位置(如以下代码中提到的 (file:///android_asset/...))进行渲染:

makeProfileImage() 
  return '<img src="file:///android_asset/flutter_assets/assets/image_name.jpg">';

如何在 iOS 中获取像 (file:///android_asset/flutter_assets/...) 这样的资产文件路径?

Future<void> printPdf() async 
  print('Print ...');
  await Printing.layoutPdf(onLayout: (PdfPageFormat format) async 
    return await Printing.convertHtml(
        format: PdfPageFormat.a4
            .applyMargin(left: 0, top: 0, right: 0, bottom: 0),
        html: '<html><head>' +
            getRatingbarCss() +
            '<style>.checked color: red;</style>' +
            '</head><body style="margin:0;padding:0" bgcolor="white">' +
            makeProfileImage() +
            '<h2 style="color:black;">Star Rating</h2><span class="fa fa-star checked"/><span class="fa fa-star checked"/><span class="fa fa-star checked"/><span class="fa fa-star"/><span class="fa fa-star"/></body></html>');
  );

pubspec.yaml

dev_dependencies:
  flutter_test:
    sdk: flutter
  pdf: ^1.3.17
  printing: ^2.0.0
  flutter_full_pdf_viewer: ^1.0.4

【问题讨论】:

将你的资产文件夹放在你的 Flutter 项目中。这不会有帮助吗? 是的,我在资产文件夹下有图像,并且已经在 pubspec.yaml 中定义了 我不认为这是一个颤振问题。因为如果我理解这一点,它是关于从网络视图访问资产的。 只有 ios 存在问题,因为我们可以在 android 中访问资产图像。但在 iOS 中,我不知道如何访问资产图像路径以通过 HTML、CSS 呈现图像。 您可以从这里查看答案***.com/questions/56787422/… 【参考方案1】:

目前的实现,webview 插件中的 FLTWebViewController 和 FLTWebViewFactory 类无法访问 registrar,所以我将它们的 initWithMessenger 方法更改为 initWithRegistrar。现在我们有了在 iOS webview 中加载资产文件的答案:

NSString* key = [_registrar lookupKeyForAsset:url];
NSURL* nsUrl = [[NSBundle mainBundle] URLForResource:key withExtension:nil];
[_webView loadFileURL:nsUrl allowingReadAccessToURL:[NSURL URLWithString:@"file:///"]];

作为拉取请求:https://github.com/flutter/plugins/pull/1247/files

例子:

<html>
 <head>
 </head>
 <body>
    <img src="image_name.jpg">
 </body>
</html>

然后在 Flutter 项目的根目录下创建 assets 文件夹:

assets:
  - assets/image_name.jpg
  - assets/htmlfile.html

创建 Web 视图 下面的 dart 代码创建 WebView 并渲染本地 assets/htmlfile.html 文件。

  return WebView(
          initialUrl: 'assets/htmlfile.html',
          javascriptMode: JavascriptMode.unrestricted,
          onWebViewCreated: (WebViewController webViewController) 
            _controller.complete(webViewController);
          ,
        );

Loading Local Assets in WebView in Flutter

【讨论】:

如何在flutter中使用这段代码? NSString* key = [_registrar lookupKeyForAsset:url]; NSURL* nsUrl = [[NSBundle mainBundle] URLForResource:key withExtension:nil]; [_webView loadFileURL:nsUrl allowedReadAccessToURL:[NSURL URLWithString:@"file:///"]]; @jazzbpn 它正在等待批准 pull github.com/flutter/plugins/pull/1247/files 你可以在flutter插件编辑4个文件或等待批准 好的,我在等。 我们需要编辑哪四个文件和哪个插件?我在 webview 插件中找不到 FLTWebViewControllerFLTWebViewFactory 类。那么,这些文件在哪里? 在路径 packages/webview_flutter/ios/Classes/FlutterWebView.h

以上是关于如何使用 HTML 渲染图像,使用 Flutter 创建 iOS-App 的 CSS?的主要内容,如果未能解决你的问题,请参考以下文章

Dart // Flutter - 如何连接图像和音频以渲染静态视频

如何使用flutter dart webview渲染本地HTML文件

Flutter 2 渲染图像像素化

Flutter SVG 渲染

如何在flutter_svg中使用preCachePicture()

FLUTTER:如何在启动画面中更改图像的大小?