首页 > 解决方案 > 未处理的异常:FileSystemException:无法打开文件,路径 = 'assets/xml/strings.xml'(操作系统错误:没有这样的文件或目录,errno = 2)

问题描述

我开始学习 Flutter,一切正常,但它不读取 xml 文件这是 pubspec.yaml 部分:

flutter:
  uses-material-design: true
  assets:
    - assets/
    - assets/xml/strings.xml

这是应该读取 xml 的部分:

  void main(){
    String file = "";
    switch (type){
      case TYPE_STRING:
        file = 'assets/xml/strings.xml';
        break;
    }
    readFileAsync(file);
  }

  void readFileAsync(String filePath) {
    File file = new File(filePath);
    Future<String> futureContent = file.readAsString();
    futureContent.then((xmlString) => {
      parseXml(xmlString)
    });
  }

我得到的错误是

Unhandled Exception: FileSystemException: Cannot open file, path = 'assets/xml/strings.xml' (OS Error: No such file or directory, errno = 2)

以下是我的资产在项目结构中的设置方式: 在此处输入图像描述

所以,在我看来,我设置了一切正确,有什么问题?

标签: flutterdart

解决方案


用于rootBundle访问应用程序包中的资源。

WidgetsFlutterBinding.ensureInitialized()如果你想使用rootBundlebeforerunApp函数,也可以先调用。

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  String file = "";
  switch (type) {
    case TYPE_STRING:
      file = 'assets/xml/strings.xml';
      break;
  }
  readFileAsync(file);
}

Future<dynamic> readFileAsync(String filePath) async {
  String xmlString =  await rootBundle.loadString(filePath);
  print(xmlString);
  return parseXml(xmlString);
}

推荐阅读