如何在 Flutter Web 中下载 CSV 并保持跨平台代码?

问题描述 投票:0回答:2

我正在从名为

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 支持,所以我的问题是:

  1. 我可以使用哪些其他包/函数在 Web 上下载 CSV 文件,而不会生成编译错误(跨平台)?

  2. 作为替代解决方案,我可以使用一些命令,以便小部件仅在 Web 环境中运行时才使用

    dart:html
    吗?

flutter dart
2个回答
0
投票

你可以用这个代替:

import 'package:universal_html/html.dart' as html hide Text;

0
投票

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...
}
© www.soinside.com 2019 - 2024. All rights reserved.