首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Flutter -从资源读取文本文件

Flutter -从资源读取文本文件
EN

Stack Overflow用户
提问于 2017-06-29 11:47:22
回答 3查看 69.4K关注 0票数 78

我有一个文本文件(.txt),我想将其作为稍后可以扫描的资产。

在pubspec.yaml中,我已经确保:

代码语言:javascript
运行
复制
flutter:
  assets:
    - res/my_file.txt

存在。该文件驻留在我创建的res/文件夹中,与lib/android/ios/位于同一级别

我正在尝试从自定义类读取文件,而不是从小部件中读取。

根据文档,我将使用这个导入:

代码语言:javascript
运行
复制
import 'package:flutter/services.dart' show rootBundle;

然后像这样开始阅读:

代码语言:javascript
运行
复制
/// Assumes the given path is a text-file-asset.
Future<String> getFileData(String path) async {
  return await rootBundle.loadString(path);
}

要获取实际数据,请执行以下操作:

代码语言:javascript
运行
复制
String data = await getFileData(fileName);

然而,当我使用像'assets/res/my_file.txt'这样的fileName时,我得到一个错误:Unable to load asset: assets/res/my_file.txt

同样值得注意的是,我正在尝试通过单元测试来实现这一点。有没有关于如何正确做到这一点的想法?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-30 00:22:23

文件夹名称"assets“并没有被神奇地添加。更新您的pubspec.yaml以包含资源的完整路径。

代码语言:javascript
运行
复制
flutter:
  assets:
    - assets/res/my_file.txt
票数 53
EN

Stack Overflow用户

发布于 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子部分,如下所示:

代码语言:javascript
运行
复制
flutter:
  assets:
    - assets/my_file.txt

如果要包含多个文件,则可以省略文件名,只使用目录名(包括最后一个/):

代码语言:javascript
运行
复制
flutter:
  assets:
    - assets/

获取代码中的文本

您可以使用全局rootBundle来获取文本文件资源:

代码语言:javascript
运行
复制
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。建议这样做,因为它允许在运行时切换资源包,这对于多语言资源非常有用。

代码语言:javascript
运行
复制
Future<String> loadAsset(BuildContext context) async {
  return await DefaultAssetBundle.of(context).loadString('assets/my_text.txt');
}

另请参阅

票数 107
EN

Stack Overflow用户

发布于 2019-05-23 14:25:18

在我看来,为了将js文件加载到flutter中,您应该将其视为文本文件并正确加载。因此,您需要将该文件添加到assets文件夹,添加到pubspec文件中,然后加载它。在这里阅读完整的答案

其次,您使用了evalJavascript。此函数可以在许多不同的情况下使用。但它只有在你有一个视图面板的情况下才能工作。

检查下面的示例:

代码语言:javascript
运行
复制
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();
  }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44816042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档