当前位置: 首页 > 知识库问答 >
问题:

颤振无法从资源加载文本

孔茂
2023-03-14

我读过https://flutter.dev/docs/development/ui/assets-and-images#asset-包依赖项中的图像和从资产中读取的文本文件,并应用了所有这些,但我的代码仍然无法工作。。。。

我为此打开了一个新项目,在主文件夹中创建了资产和文件:

pwd
 /home/bboett/AndroidStudioProjects/examen_companion
bboett@hayate:~/AndroidStudioProjects/examen_companion$ ls -l assets/
 insgesamt 4
 -rw-r--r-- 1 bboett bboett 10 19. Mai 15:14 test.txt
 bboett@hayate:~/AndroidStudioProjects/examen_companion$ cat assets/test.txt 
  Hello!!

然后,不信任Android Studio,我检查了vi,在pubspec.yaml一切都好:

该文件以以下内容结尾:

flutter:
 uses-material-design: true
 assets:
  - assets/

我将空间替换为使用和资产之前的2个空间:和资产之前的4个空间。。。

在MyHomePageState类中,我更改了:

  @override
  Widget build(BuildContext context)
  {
    AssetBundle bundle = DefaultAssetBundle.of(context);
    return FutureBuilder<String>(
        future: bundle.loadString("assets/test.txt"),
        builder: (context, AsyncSnapshot<String> snapshot)
        {
          if (snapshot.hasData) { return Text(snapshot.data.toString()); }
          else { return CircularProgressIndicator(); }
        }
  );
  }

不起作用。。。。我从来没有走出进度指标。。。。因此,我直接在主要部分补充说:

void main() async {
 print(await rootBundle.loadString("assets/test.txt"));
 runApp(MyApp());
}

这与:

 Launching lib/main.dart on Linux in debug mode...
 Building Linux application...
 Debug service listening on ws://127.0.0.1:41355/L-ev6_eNIlI=/ws
 Syncing files to device Linux...
 [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: Null check operator used    on a null value
 #0      PlatformAssetBundle.load (package:flutter/src/services/asset_bundle.dart:222:39)
 #1      AssetBundle.loadString (package:flutter/src/services/asset_bundle.dart:68:33)
 #2      CachingAssetBundle.loadString.<anonymous closure> (package:flutter/src/services/asset_bundle.dart:165:56)
 #3      _LinkedHashMapMixin.putIfAbsent (dart:collection-patch/compact_hash.dart:311:23)
 #4      CachingAssetBundle.loadString (package:flutter/src/services/asset_bundle.dart:165:27)
 #5      main (package:examen_companion/main.dart:9:26)

在跑步之前,我做了一些改变,然后做了一次清理。。。。。

版本为:

 flutter upgrade
  Flutter is already up to date on channel beta
  Flutter 2.2.0-10.3.pre • channel beta • https://github.com/flutter/flutter.git
  Framework • revision 06e2fd6357 (vor 11 Tagen) • 2021-05-08 11:28:22 -0700
  Engine • revision a123e75c60
  Tools • Dart 2.13.0 (build 2.13.0-211.14.beta)

Flutter医生也可以运行,哦,我在linux或android上有同样的错误,所以它不是设备......

因此,我对如何获得这项工作一无所知,因为我觉得我遵循了文档和以前的帮助:(

顺便说一句,我认为颤振现在是无效的,安全的。。。不管怎样,我怎样才能让它工作呢?

提前感谢

[编辑]:甚至是陌生人。。。。我换了

    //future: bundle.loadString("assets/test.txt"),
    future: bundle.loadString('AssetManifest.json'),

得到:

 flutter: {"assets/test.txt":["assets/test.txt"],"packages/cupertino_icons/assets/CupertinoIcons.ttf":["packages/cupertino_icons/assets/CupertinoIcons.ttf"]}

那么文件在那里???为什么我不能打开/获取它??

[ed2]:好吧,我不明白......我直接在main中尝试了这个:

 print(await rootBundle.loadString('AssetManifest.json'));

这也崩溃了空例外......

共有3个答案

白越
2023-03-14

您必须进行测试。txt在项目目录中的资产文件夹中。

另外,如果您可以将您的项目目录结构添加到您的帖子中,这会更好。

而不是这个,

flutter:
 uses-material-design: true
 assets:
  - assets/

加上这个,

flutter:
 uses-material-design: true
 assets:
  - assets/test.text

然后运行flatterpub-get。应该没问题。让我们知道它是否有效。

严阳成
2023-03-14

我试过你的代码,它对我有效。资产可能很棘手。有时,您需要在添加新资产后完全重新启动应用程序,或者在再次运行应用程序之前完全卸载应用程序。您也可以尝试运行flatterclean

建议添加if(snapshot.hasError)print(snapshot.error) FutureBuilder中的else之前执行code>,查看如果仍然不起作用,错误是什么。

在main中打印时出现空检查错误的原因是需要添加WidgetsFlutterBinding。确保重新初始化() WidgetsBinding的实例。

丌官淇
2023-03-14

WidgetsFlutterBinding.ensure初始化()是解决我的问题的关键,正如@HannesHultergārd所写的那样。为了补充他的回答,主要应该是:

void main() async {
 WidgetsFlutterBinding.ensureInitialized();
 print(await rootBundle.loadString("assets/test.txt"));
 runApp(MyApp());
}
 类似资料:
  • 我可以从flutter应用程序的assets/Images目录加载图像,但当从flutter包的assets/Images目录加载相同的图像时,我会得到以下错误:

  • 我有一个文本文件(.txt),我想成为以后可以扫描的资源。 在pubspec.yaml,我已经确保: 存在。该文件位于我创建的文件夹中,与和处于同一级别 我试图从自定义类读取文件,而不是小部件。 根据文档,我将使用此导入: 然后开始这样读: 要获得实际数据,请执行以下操作: 但是,当我使用

  • 现在我已经阅读了这里的文档:http://docs.oracle.com/javase/tutorial/uiswing/components/icon.html 但是我仍然不明白...我如何在我的代码中实现它? 我不能将getImage更改为getResources,因为它需要一些东西,我不知道是什么。 编辑:这是图像行现在的样子:图像pic=

  • 我已经将我的项目上传到githttps://github.com/gitekiras/spring-boot-gradle-mvc 我不能得到正确的是,我不能加载css和js从资源文件夹。 当我把它放在webapp文件夹,我能够得到每件事情的工作,但根据教程,我应该把它们放在资源的静态文件夹。 但是当我这样做的时候,我不能加载页面上的css和js。 谁能说出我错过了什么? 另外:当我在浏览器日志中

  • 问题内容: 我从Git存储库导入了一个项目,并在Eclipse中为其添加了Maven性质。在资源文件夹中,我添加了一个名为的配置文件。现在,每当我尝试从Java代码打开此文件时,都会得到。该文件也存在于maven编译项目后生成的文件夹中。 谁能告诉我可能是什么问题?我尝试加载此文件的Java代码是: 其中是一个对象。 谁能给我一些有关如何解决此问题的提示? 问题答案: 如果文件在编译后被放置在目标

  • 我从Git存储库中导入了一个项目,并在Eclipse中向其添加了Maven nature。在resources文件夹中,我添加了一个名为的配置文件。现在,每当我试图从我的Java代码打开这个文件时,我会得到。该文件也存在于maven编译项目后生成的文件夹中。