我正在从名为
List<List<dynamic>>
的 rows
生成一个 csv 文件,如下...
String csv = const ListToCsvConverter().convert(rows);
然后,如果我使用移动设备(Android 或 IOS),我会将文件发送到电子邮件,并且 如果我在网络上,我会使用 AnchorElement
将其下载到设备,这是
import 'dart: html' as html
的一部分如下:
if (_prefs.platform == 'isWeb')
{
html.AnchorElement(href: "data:text/plain;charset=utf-8,$csv")
..setAttribute("download", "report.csv")
..click();
} else {
//To write csv as a file in a path and send it using FlutterEmailSender
}
它在 Web 上运行正常,但是当我尝试在 Android 或 IOS 中编译时出现错误:
:错误:未找到:'dart:html'导入'dart:html'作为html; ^
:错误:找不到方法:“AnchorElement”。 html.AnchorElement(href: "data:text/plain;charset=utf-8,$csv")
我认为这是因为 dart:html 不被 IOS 和 Android 支持,所以我的问题是:
我可以使用哪些其他包/函数在 Web 上下载 CSV 文件,而不会生成编译错误(跨平台)?
作为替代解决方案,我可以使用一些命令,以便小部件仅在 Web 环境中运行时才使用
dart:html
吗?
你可以用这个代替:
import 'package:universal_html/html.dart' as html hide Text;
Flutter 为您提供了一个
kIsWeb
全局标志,您可以使用它来检查平台是否是 Web。您可以将 if
语句替换为以下代码:
if (kIsWeb) {
HTMLAnchorElement()
..href = 'data:text/plain;charset=utf-8,$csv'
..setAttribute('download', 'chatur_export_${DateTime.now().toIso8601String()}.csv')
..click();
} else {
// Your platform specific code goes here...
}