Flutter 无法从资源中加载文本

bbo*_*ett 4 android assets flutter

我已阅读https://flutter.dev/docs/development/ui/assets-and-images#asset-images-in-package-dependenciesFlutter - Read text file from assets并应用了所有内容,但我的代码仍然没有\ 不工作....

\n

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

\n
pwd\n /home/bboett/AndroidStudioProjects/examen_companion\nbboett@hayate:~/AndroidStudioProjects/examen_companion$ ls -l assets/\n insgesamt 4\n -rw-r--r-- 1 bboett bboett 10 19. Mai 15:14 test.txt\n bboett@hayate:~/AndroidStudioProjects/examen_companion$ cat assets/test.txt \n  Hello!!\n
Run Code Online (Sandbox Code Playgroud)\n

然后,不信任 android studio,我用 vi 检查了,在 pubspec.yaml 中一切正常:

\n

文件结尾为:

\n
flutter:\n uses-material-design: true\n assets:\n  - assets/\n
Run Code Online (Sandbox Code Playgroud)\n

我替换了空格,在使用和资产之前添加了 2 个空格:在 - 资产之前添加了 4 个空格...

\n

在 _MyHomePageState 类中我更改了:

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

不起作用......我从来没有走出进度指示器......\n所以直接在我添加的主要内容中:

\n
void main() async {\n print(await rootBundle.loadString("assets/test.txt"));\n runApp(MyApp());\n}\n
Run Code Online (Sandbox Code Playgroud)\n

并崩溃:

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

我在运行之前做了一些更改,然后进行了一次干净的颤动......

\n

版本是:

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

flutter doctor 也运行正常,哦,我在 linux 或 android 上有同样的错误,所以它不是设备......

\n

所以我对如何完成这项工作一无所知,因为我的印象是遵循了文档和以前的帮助:(

\n

顺便说一句,我认为颤振现在是空的,安全的......无论如何,我如何让它发挥作用?

\n

提前致谢

\n

[编辑]:更奇怪......我替换了

\n
    //future: bundle.loadString("assets/test.txt"),\n    future: bundle.loadString(\'AssetManifest.json\'),\n
Run Code Online (Sandbox Code Playgroud)\n

并得到:

\n
 flutter: {"assets/test.txt":["assets/test.txt"],"packages/cupertino_icons/assets/CupertinoIcons.ttf":["packages/cupertino_icons/assets/CupertinoIcons.ttf"]}\n
Run Code Online (Sandbox Code Playgroud)\n

所以文件在那里???为什么无法打开/获取它?

\n

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

\n
 print(await rootBundle.loadString(\'AssetManifest.json\'));\n
Run Code Online (Sandbox Code Playgroud)\n

并且由于空异常而崩溃了......

\n

Mar*_*cin 8

WidgetsFlutterBinding.ensureInitialized()是解决我的问题的关键以及 @HannesHulterg\xc3\xa5rd 所写的。为了补充他的答案,主要应该是:

\n
void main() async {\n WidgetsFlutterBinding.ensureInitialized();\n print(await rootBundle.loadString("assets/test.txt"));\n runApp(MyApp());\n}\n
Run Code Online (Sandbox Code Playgroud)\n