#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, является своего рода совпадением, поскольку вы работаете и развиваетесь на одной и той же машине. Это решение должно работать независимо от того, на какую платформу вы ориентируетесь.