首页 > 解决方案 > 无法在所有平台上读取Flutter中的文件,该文件在linux桌面上可以看到但web(chrome)看不到它,android也看不到

问题描述

import 'dart:io';
import 'package:path/path.dart';

Future<Map?> readFile(lang) async {
  var pathToFile = join(dirname(Platform.script.toFilePath()), 'text', '$lang.toml');
  var document = File(pathToFile);
  return document;
}

所以我的颤振根目录中有一个文本目录,其中包含一些 TOML 文件,我在 linux 上访问这些文件没有问题,但是一旦我在 android 上运行它,我就会得到一个(OS Error: No such file or directory, errno = 2),在 web 上也一样,但没有错误消息,它只是返回null,我也试过这个:

var document = File('text/$lang.toml');

再一次,同样的结果。我见过人们为此使用 path_provider 包,但它无论如何都不起作用,我也希望有网络兼容性。有谁知道如何解决这个问题?泰

标签: androidflutterfiledart

解决方案


使用随附的资产时,不应使用主机的文件系统。而是使用rootBundlefrom flutter/services

import 'package:flutter/services.dart';

...

Future<String> readFile(String lang) {
  return rootBundle.loadString('text/$lang.toml');
}

假设该文件位于text/项目根目录下的目录中,并且定义在pubspec.yaml

flutter:
  assets:
    - text/

它在 Linux 上工作的事实有点巧合,因为您在同一台机器上运行和开发。该解决方案应该独立于您所针对的平台而工作。


推荐阅读