我有个问题, 我正在使用Ffltter开发一个应用程序,并且在pubspec.yaml文件中包含了Assets目录.然而,这个目录只能在我的PC上运行.比方说,当我打开一个文件时,我使用目录File("assets/data.txt").但当我在手机上运行这个应用程序时,它的运行方式不同.有人能帮我这个忙吗?

Thanks a lot

帖子主题:Re:Колибри

description: A new Flutter project.


publish_to: 'none'


version: 1.0.0+1

environment:
  sdk: ">=2.17.6 <3.0.0"


dependencies:
  intl: ^0.17.0
  
  flutter:
    sdk: flutter

  path_provider: ^1.6.27

  cupertino_icons: ^1.0.2

dev_dependencies:
  flutter_test:
    sdk: flutter

  flutter_lints: ^2.0.0


flutter:

  uses-material-design: true

  assets:
    - assets/logo.png
    - assets/states.txt
    - assets/states1.txt

推荐答案

如果在Flutter 项目中使用File("assets/data.txt"),它实际上会try 访问操作系统内assets文件夹中的文件.你的电脑已经有了这个文件夹,但你的手机没有,因为Ffltter不会为资源创建文件夹.

相反,它会创建一个AssetBundle,其中包含您的pubspec.yaml中包含的所有assets资源 文件.要访问此Bundle 包,只需:

import 'package:flutter/services.dart' show rootBundle;

并访问特定的文本文件:

Future<String> loadAsset() async {
  return await rootBundle.loadString('assets/data.txt');
}

如果您处理二进制文件,则调用load(...)而不是loadString(...).

编辑:

如果在应用程序启动时需要,只需拨打main()内线loadString(...)即可.为此,我们需要确保小部件绑定已经初始化:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  String text = await loadAsset());
  runApp(const MyApp());
}

Flutter相关问答推荐

我遇到了一个问题,从showDialogue()调用Navigator.pop()两次导致屏幕空白

Flutter creating Constant.dart InputDecoration section put pass in hintText

无效参数(S):隔离消息中的非法参数:try 旋转图像时对象不可发送

为什么我的PUT请求不能正常工作?

如何在应用程序中使用Fflight显示表情包

将侧边菜单和底部导航栏放在同一Flutter 应用程序中

在flutter web上渲染多个Youtube视频

参数类型';List<;Dynamic&>不能分配给参数类型';List<;SingleChildWidget&>';

如何在flutter中使用youtube_explod_start加载下一页

如何在 VS Code 中启用 Flutter 运行/调试工具栏?

带按钮的 Riverpod future Provider

我对 Flutter Apk 有疑问

如何解决需要一个标识符,但得到的是:.try 在:之前插入一个标识符.dart 错误

面对Flutter 中的行和列问题

我想在一个屏幕上有两个相同区域的列表视图,我该如何设置?

如何在Flutter中制作带有波浪边框的圆圈来显示图像?

如何在椭圆形图像周围添加边框?Flutter

如何在Flutter 中将列表的模型类型转换为数组?

检索 api 的值时,我得到_TypeError(类型'Null'不是'String'类型的子类型)

如何从 MemoryFileSystem 字节创建假 dart:io 文件?