如何防止platformViewRegistry出错[flutter-web]
Posted
技术标签:
【中文标题】如何防止platformViewRegistry出错[flutter-web]【英文标题】:How to prevent error of platformViewRegistry [flutter-web] 【发布时间】:2021-02-21 04:13:39 【问题描述】:我正在尝试在我的网页(flutter web)中添加 pdf 视图。这是代码的一部分
ui.platformViewRegistry.registerViewFactory(
'hello-world-html',
(int viewId) => html.IFrameElement()
..width = '700'
..height = '4000'
..src = 'http:xxx.pdf'
..style.border = 'none');
代码像我想要的那样运行,但我得到这样的错误
The name 'platformViewRegistry' is being referenced through the prefix 'ui', but it isn't defined in any of the libraries imported using that prefix.
Try correcting the prefix or importing the library that defines 'platformViewRegistry'.
有没有办法防止这种错误发生?
【问题讨论】:
作为让分析器满意的附加选项,您可以尝试PR 中定义的解决方案。检查dart_ui.dart
、dart_ui_fake.dart
和dart_ui_real.dart
。它是有条件导入和垫片的组合。此问题已为人所知,并由 Github 中的 issue 跟踪。
【参考方案1】:
编辑使用analysis_options.yaml
analyzer:
errors:
undefined_prefixed_name: ignore
您可以在下面复制粘贴运行完整代码
你可以使用// ignore: undefined_prefixed_name
代码sn-p
// ignore: undefined_prefixed_name
ui.platformViewRegistry.registerViewFactory(
'hello-world-html',
(int viewId) => html.IFrameElement()
..width = '700'
..height = '4000'
..src = 'http:xxx.pdf'
..style.border = 'none');
工作演示
完整的模拟代码
import 'package:flutter/material.dart';
// import 'dart:io' if (dart.library.html) 'dart:ui' as ui;
import 'dart:ui' as ui;
import 'dart:html' as html;
void main()
runApp(MyApp());
class MyApp extends StatelessWidget
@override
Widget build(BuildContext context)
return MaterialApp(
title: 'Flutter Demo',
home: MyHomePage(),
);
class MyHomePage extends StatelessWidget
@override
Widget build(BuildContext context)
return Scaffold(
body: Center(child: Iframe()),
floatingActionButton: FloatingActionButton(
onPressed: () ,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
class Iframe extends StatelessWidget
Iframe()
// ignore: undefined_prefixed_name
ui.platformViewRegistry.registerViewFactory('iframe', (int viewId)
var iframe = html.IFrameElement();
iframe.src = 'http://www.africau.edu/images/default/sample.pdf';
return iframe;
);
@override
Widget build(BuildContext context)
return Container(
width: 400, height: 300, child: HtmlElementView(viewType: 'iframe'));
【讨论】:
感谢您的回答,我已经尝试了您的代码.. 它运行完美...但我的编辑器中仍然有红色下划线,它仍然说这是因为前缀或.. ....,我已经编辑了我的问题并添加了一张红色下划线的照片.. 尽管代码运行完美,是否可以防止红色下划线? @uyhaW 尝试重新启动分析器或 ide。 @uyhaW,请使用 analysis_options.yaml,查看我的更新答案 @AbhilashChandran,我已经阅读了你给我的链接,@chunhunghan 我也跟着你的回答,最后我通过添加 FakeUi.dart、RealUi.dart 和最后一个找到了解决方案正在与pubspec.yaml
在同一个文件夹中创建analysis_options.yaml
...效果非常好...红色下划线消失了...非常感谢您以上是关于如何防止platformViewRegistry出错[flutter-web]的主要内容,如果未能解决你的问题,请参考以下文章