首页 > 解决方案 > 如何将 INI 文件写入 App Document Directory?

问题描述

我正在开发一个订单应用程序,在正确发布订单后,我想在本地保存一些数据以备将来使用。为此,我使用下面代码中定义的 writeGlobals() 函数,在应用程序的 Document 文件夹中存储了一个 ini 文件。我正在使用 path_provider 和 ini 包。我的fileutil包如下:

import 'dart:io';
import 'package:path_provider/path_provider.dart';
import 'package:ini/ini.dart';

import '../global.dart';

Future<String> get _localPath async {
  final directory = await getApplicationDocumentsDirectory();

  return directory.path;
}

Future<File> get _localGlobalsFile async {
  final path = await _localPath;
  return File('$path/globals.ini');
}

Future readGlobals() async {
  final path = await _localGlobalsFile;
  // ignore: unrelated_type_equality_checks
  if (File('$path').exists() == true) {
    _readGlobals();
  } else
    print(path.toString() + ' does not exist.');
}

_readGlobals() async {
  var file = await _localGlobalsFile;
  Config config = new Config.fromStrings(file.readAsLinesSync());
  glbShipCity = config.get("cart", "glbShipCity");
  glbShipHood = config.get("cart", "glbShipHood");
  glbPayType = config.get("cart", "glbPayType");
  glbName = config.get("cart", "glbName");
  glbPhone  = config.get("cart", "glbPhone");
  glbStreet = config.get("cart", "glbStreet");
  glbNumber = config.get("cart", "glbNumber");
  glbCompl = config.get("cart", "glbCompl");
  glbRef = config.get("cart", "glbRef");
  glbCEP = config.get("cart", "glbCEP");
  glbEmail = config.get("cart", "glbEmail");
  glbCPF = config.get("cart", "glbCPF");

  print("globals: ${config.get("cart", "glbShipCity")}");
  print("globals: ${config.toString()}");
}

Future writeGlobals() async {
  final file = await _localGlobalsFile;
  Config config = new Config();
  config.addSection("cart");
  config.set("cart", "glbShipCity", glbShipCity);
  config.set("cart", "glbShipHood", glbShipHood);
  config.set("cart", "glbPayType", glbPayType);
  config.set("cart", "glbName", glbName);
  config.set("cart", "glbPhone", glbPhone);
  config.set("cart", "glbStreet", glbStreet);
  config.set("cart", "glbNumber", glbNumber);
  config.set("cart", "glbCompl", glbCompl);
  config.set("cart", "glbRef", glbRef);
  config.set("cart", "glbCEP", glbCEP);
  config.set("cart", "glbEmail", glbEmail);
  config.set("cart", "glbCPF", glbCPF);
  print('Writing to ${file.path}');
  print("globals: ${config.toString()}");
  return file.writeAsString(config.toString());

}

所有 glb* 变量都是全局定义的,并且在应用程序的每个其他部分都可以很好地工作。ini 文件的结构也是正确的。一切都编译并完美运行,除了没有写入文件夹的事实(不存在 - 或者我至少看不到它 - 顺便说一句;我认为它会在安装应用程序时创建...)。

函数 writeGlobals() 也不会抛出任何错误,但不会写入文件。这些问题在模拟器和实际设备上都会出现。所以我的问题是:

  1. 我需要明确创建文档文件夹吗?
  2. 该应用程序是否必须有一些特殊的许可?在这种情况下,我该如何申请?

感谢您的旅游帮助。

标签: androidpermissionsini

解决方案


推荐阅读