Не удается читать файлы в Flutter на всех платформах, файл можно увидеть на рабочем столе linux, но web(chrome) его не видит, как и android

#android #flutter #file #dart

Вопрос:

 import 'dart:io'; import 'package:path/path.dart';  Futurelt;Map?gt; readFile(lang) async {  var pathToFile = join(dirname(Platform.script.toFilePath()), 'text', '$lang.toml');  var document = File(pathToFile);  return document; }  

Поэтому у меня есть текстовый каталог на мой флаттера корневой каталог, который содержит некоторые файлы ТОМЛ, у меня нет проблемы с доступом к этим файлам на Linux, но как только я запускаю это на Android я получаю (OS Error: No such file or directory, errno = 2) , и на веб, но без сообщения об ошибке, он просто возвращает null, я также попробовал это также:

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

и снова тот же результат. Я видел, как люди использовали пакет path_provider для этого, но он все равно не работал, и я также хотел бы иметь веб-совместимость. Кто-нибудь знает, как это решить? ty

Комментарии:

1. Просто для ясности, вы пытаетесь прочитать файл в хост-системе или файл, который поставляется в вашей базе кода в качестве ресурса?

2. Файл, который поставляется в базе моего кода в качестве ресурса

Ответ №1:

При использовании отправленных ресурсов не следует использовать файловую систему хоста. Вместо этого используйте rootBundle «от flutter/services «.

 import 'package:flutter/services.dart';  ...  Futurelt;Stringgt; readFile(String lang) {  return rootBundle.loadString('text/$lang.toml'); }  

Предполагая, что файл находится в text/ каталоге в корне вашего проекта и он определен в pubspec.yaml :

 flutter:  assets:  - text/  

Тот факт, что он работал в Linux, является своего рода совпадением, поскольку вы работаете и развиваетесь на одной и той же машине. Это решение должно работать независимо от того, на какую платформу вы ориентируетесь.