文质彬彬的拐杖 · 梵悦108 国贸旁边的新盘平层 ...· 8 月前 · |
魁梧的书签 · 意大利裔美国人对法西斯反犹主义的反应,Pat ...· 1 年前 · |
重感情的围巾 · 《一直一直都很喜欢你》:一部似曾相识的“兑水 ...· 1 年前 · |
乖乖的手套 · 《蚁人与黄蜂女:量子狂潮》影评-剧情单调又拖 ...· 1 年前 · |
我有一个文本文件(.txt),我想将其作为稍后可以扫描的资产。
在pubspec.yaml中,我已经确保:
flutter:
assets:
- res/my_file.txt
存在。该文件驻留在我创建的
res/
文件夹中,与
lib/android/
和
ios/
位于同一级别
我正在尝试从自定义类读取文件,而不是从小部件中读取。
根据文档,我将使用这个导入:
import 'package:flutter/services.dart' show rootBundle;
然后像这样开始阅读:
/// Assumes the given path is a text-file-asset.
Future<String> getFileData(String path) async {
return await rootBundle.loadString(path);
}
要获取实际数据,请执行以下操作:
String data = await getFileData(fileName);
然而,当我使用像
'assets/res/my_file.txt'
这样的
fileName
时,我得到一个错误:
Unable to load asset: assets/res/my_file.txt
。
同样值得注意的是,我正在尝试通过单元测试来实现这一点。有没有关于如何正确做到这一点的想法?谢谢!
发布于 2017-06-30 00:22:23
文件夹名称"assets“并没有被神奇地添加。更新您的
pubspec.yaml
以包含资源的完整路径。
flutter:
assets:
- assets/res/my_file.txt
发布于 2019-01-11 01:05:42
对于未来的访问者,这里有一个更全面的答案。
创建资产文件夹
在项目的根文件夹中创建一个assets文件夹。在Android Studio中,您可以右键单击项目大纲,然后转到 新建>目录 。
如果愿意,可以在
assets
中为文本文件创建另一个子文件夹。但如果这样做,则必须在pubspec.yaml中包含相对路径。见下文。
将文本文件添加到新文件夹
您可以只将文本文件复制到
assets
目录中。例如,
my_file.txt
的相对路径将是
assets/my_file.txt
。
在pubspec.yaml中注册assets文件夹
打开项目根目录下的pubspec.yaml文件。
向flutter部分添加一个assets子部分,如下所示:
flutter:
assets:
- assets/my_file.txt
如果要包含多个文件,则可以省略文件名,只使用目录名(包括最后一个/):
flutter:
assets:
- assets/
获取代码中的文本
您可以使用全局
rootBundle
来获取文本文件资源:
import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;
Future<String> loadAsset() async {
return await rootBundle.loadString('assets/my_text.txt');
}
或者,如果您有BuildContext (在小部件中),则可以使用DefaultAssetBundle。建议这样做,因为它允许在运行时切换资源包,这对于多语言资源非常有用。
Future<String> loadAsset(BuildContext context) async {
return await DefaultAssetBundle.of(context).loadString('assets/my_text.txt');
}
另请参阅
发布于 2019-05-23 14:25:18
在我看来,为了将js文件加载到flutter中,您应该将其视为文本文件并正确加载。因此,您需要将该文件添加到assets文件夹,添加到pubspec文件中,然后加载它。在这里阅读完整的答案
其次,您使用了evalJavascript。此函数可以在许多不同的情况下使用。但它只有在你有一个视图面板的情况下才能工作。
检查下面的示例:
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
main() async {
String jsCode = await rootBundle.loadString('assets/javascript.js');
runApp(new MaterialApp(
home: LunchWebView(jsCode),
class LunchWebView extends StatelessWidget {
final String text;
LunchWebView(this.text);
@override
Widget build(BuildContext context) {