加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flutter进阶—读取与写入文件

发布时间:2020-12-14 14:54:42 所属栏目:百科 来源:网络整理
导读:Flutter使用 path_provider 插件读取与写入文件, path_provider 插件提供了一种平台无关的方法来访问设备文件系统上常用的位置。该类目前支持访问两个文件系统位置: 临时目录:系统可以随时清除的临时目录(缓存),在iOS上,对应NSTemporaryDirectory()

Flutter使用path_provider插件读取与写入文件,path_provider插件提供了一种平台无关的方法来访问设备文件系统上常用的位置。该类目前支持访问两个文件系统位置:

  • 临时目录:系统可以随时清除的临时目录(缓存),在iOS上,对应NSTemporaryDirectory()返回的值,在Android上,这是getCacheDir()返回的值。

  • 文档目录:应用程序的目录,用于存储只有它可以访问的文件,仅当删除应用程序时,系统才会清除目录,在iOS上,这对应NSDocumentsDirectory,在Android上,这是AppData目录。

首先我们需要修改一下pubspec.yaml文件,添加path_provider插件,再在pubspec.yaml顶部的动作功能区中点击“Packages Get”。

dependencies:
  flutter:
    sdk: flutter
  path_provider: ^0.2.1+1

当你的Flutter应用程序有一个文件位置的引用,你可以使用dart:io API对文件系统执行读/写操作。

下面的示例会在点击按钮时保存按钮按下的次数,并在应用程序重新启动时加载按钮按下的次数:

import 'dart:io';
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
class ReadAndWriteDemo extends StatefulWidget {
  @override
  _ReadAndWriteDemoState createState() => new _ReadAndWriteDemoState();
}
class _ReadAndWriteDemoState extends State<ReadAndWriteDemo> {
  // 全局变量,存储点击数
  int _counter;
  // 覆盖initState函数,创建状态对象调用该方法
  @override
  void initState() {
    // 调用原initState方法内容
    super.initState();
    /* * 调用_readCounter函数,读取点击数 * 将点击数作为参数,创建一个函数 */
    _readCounter().then((int value){
      // 通知框架此对象的内部状态已更改
      setState((){
        // 将参数赋予存储点击数的变量
        _counter = value;
      });
    });
  }
  /* * _readCounter函数,读取点击数 * 关键字async表示异步操作 * 返回值Future类型,表示延迟处理的对象 */
  Future<int> _readCounter() async {
    try {
      /* * 获取本地文件目录 * 关键字await表示等待操作完成 */
      File file = await _getLocalFile();
      // 使用给定的编码将整个文件内容读取为字符串
      String  contents = await file.readAsString();
      // 返回文件中的点击数
      return int.parse(contents);
    } on FileSystemException {
      // 发生异常时返回默认值
      return 0;
    }
  }
  // _getLocalFile函数,获取本地文件目录
  Future<File> _getLocalFile() async {
    // 获取本地文档目录
    String dir = (await getApplicationDocumentsDirectory()).path;
    // 返回本地文件目录
    return new File('$dir/counter.txt');
  }
  // _incrementCounter函数,点击增加按钮时的回调
  Future<Null> _incrementCounter() async {
    setState((){
      // 存储点击数的变量自加1
      _counter++;
    });
    // 将存储点击数的变量作为字符串写入文件
    await (await _getLocalFile()).writeAsString('$_counter');
  }
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(title: new Text('读写文件操作')),body: new Center(
        child: new Text('点击按钮${_counter==0?'':'$_counter次'}!')
      ),floatingActionButton: new FloatingActionButton(
        onPressed: _incrementCounter,tooltip: '增加',child: new Icon(Icons.add),)
    );
  }
}
void main() {
  runApp(new MaterialApp(
    title: 'Flutter',home: new ReadAndWriteDemo(),));
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读