【问题标题】:Saving DateTime type in Local File in Flutter在 Flutter 的本地文件中保存 DateTime 类型
【发布时间】:2020-02-12 13:52:47
【问题描述】:

我有一个带有 TextField 的表单和一个能够保存和读取数据的提交按钮。

class Storage {
  Future<String> get localPath async {
    final dir = await getApplicationDocumentsDirectory();
    return dir.path;
  }

  Future<File> get localFile async {
    final path = await localPath;
    return File('$path/db.txt');
  }

  Future<String> readData() async {
    try {
      final file = await localFile;
      String body = await file.readAsString();

      return body;
    } catch (e) {
      return e.toString();
    }
  }

  Future<File> writeData(String data) async {
    final file = await localFile;
    return file.writeAsString('$data');
  }
}

  @override
  void initState() {
    super.initState();
    widget.storage.readData().then((String value) {
      setState(() {
        name = value;
      });
    });
  }
  Future<File> writeData() async {
    setState(() {
      name = oneController.text;
      oneController.text = '';
    });
  }

有了这个,我可以用字符串值保存数据。我尝试为 DateTime 做同样的事情,但我收到了这个错误:
"参数类型'Null Function(DateTime)'不能分配给参数类型'FutureOr Function(String)'"

保存到本地文件是否只适用于字符串数据?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    你得到的错误似乎是因为你试图这样做:

    widget.storage.readData().then((DateTime value) {
      setState(() {
        name = value;
      });
    });
    

    使用DateTime 作为参数,但您似乎忘记将readData() 的返回类型更改为Future&lt;DateTime&gt;。无论如何,这似乎是错误。

    但正如@Adrian 所说,您可以存储int 属性millisecondsSinceEpoch 而不是DateTime,然后您可以这样做:

    DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(timestampSaved);

    【讨论】:

      【解决方案2】:

      要回答另一个问题,您必须将字符串保存到文件中。必须将对象转换为字符串。保存 DateTime 的典型方法是执行诸如 millisecondsSinceEpoch 之类的操作并将其保存在您的文件中。

      我建议不要重新发明以前所做的事情,而是研究用于持久存储的包/插件。一个有希望的是hive. 您可以在pubdev. 搜索更多内容,在那里您可以找到shared_preferencessqflitesqflitesembast. 这样的持久存储选项,其中一些(sembast 和hive)基本上是对象存储文件。有点像你在这里尝试做的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-20
        • 1970-01-01
        • 2021-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-16
        相关资源
        最近更新 更多