我有一个文本文件(.txt),我想成为一个资产,我可以在以后扫描.
在pubspec.yaml中,我确保:
flutter:
assets:
- res/my_file.txt
Run Code Online (Sandbox Code Playgroud)
存在.该文件位于res/我创建的文件夹中,与lib/android/和的级别相同ios/
我正在尝试从自定义类中读取文件,而不是小部件.
根据文档,我将使用此导入:
import 'package:flutter/services.dart' show rootBundle;
Run Code Online (Sandbox Code Playgroud)
并开始阅读:
/// Assumes the given path is a text-file-asset.
Future<String> getFileData(String path) async {
return await rootBundle.loadString(path);
}
Run Code Online (Sandbox Code Playgroud)
要获得实际数据,请执行以下操作:
String data = await getFileData(fileName);
Run Code Online (Sandbox Code Playgroud)
但是,当我使用fileNamelike时'assets/res/my_file.txt',我收到一个错误:Unable to load asset: assets/res/my_file.txt.
值得注意的是,我正试图通过单元测试来做到这一点.关于如何正确地做到这一点的任何想法?谢谢!
Sur*_*gch 33
对于将来的访客,这是一个更完整的答案。
在项目的根文件夹中创建一个资产文件夹。在Android Studio中,您可以右键单击“项目”大纲,然后转到“ 新建”>“目录”。
您可以根据需要为文本文件创建另一个子文件夹assets。但是,如果这样做,则必须在pubspec.yaml中包括相对路径。见下文。
您可以将文本文件复制到assets目录中。的相对路径my_file.txt为例如assets/my_file.txt。
打开项目根目录中的pubspec.yaml文件。
如下所示,将资产子部分添加到flutter部分:
flutter:
assets:
- assets/my_file.txt
Run Code Online (Sandbox Code Playgroud)
如果要包含多个文件,则可以不使用文件名,而只使用目录名(包括最后的/):
flutter:
assets:
- assets/
Run Code Online (Sandbox Code Playgroud)
您可以使用全局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');
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您具有BuildContext(在小部件内部),则可以使用DefaultAssetBundle。推荐这样做是因为它允许在运行时切换资产包,这对于多语言资产很有用。
Future<String> loadAsset(BuildContext context) async {
return await DefaultAssetBundle.of(context).loadString('assets/my_text.txt');
}
Run Code Online (Sandbox Code Playgroud)
Col*_*son 26
文件夹名称"assets"不会神奇地添加.更新您的pubspec.yaml以包含资产的完整路径.
flutter:
assets:
- assets/res/my_file.txt
Run Code Online (Sandbox Code Playgroud)
在我看来,为了将一个 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) {
final FlutterWebviewPlugin flutterWebviewPlugin = FlutterWebviewPlugin();
flutterWebviewPlugin.launch('https://www.google.com');
flutterWebviewPlugin.evalJavascript(text);
return Container();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17698 次 |
| 最近记录: |