flutter 如何實現文件讀寫(使用篇)

flutter文件讀寫可以對磁盤文件進行操作,實現某些業務場景,那麼我們開始來講下這個文件讀寫操作。


使用的庫插件(package)
dart:io(用於數據處理)
path_provider (用於獲取路勁)

操作步驟
1.獲取正確的本地路徑
2.創建指向文件位置的引用
3.寫入數據到文件內
4.從文件讀取數據

1.獲取正確的本地路徑 
我們獲取路勁用的是這個插件
path_provider 
可以看到裏面提供了兩個獲取路勁的方式

Example

Directory tempDir = await getTemporaryDirectory();
String tempPath = tempDir.path;

Directory appDocDir = await getApplicationDocumentsDirectory();
String appDocPath = appDocDir.path;

getTemporaryDirectory:【臨時文件夾
也就是系統可以隨時清空的臨時緩存文件夾,在IOS中對應NSTemporaryDirectory在安卓中對應getCacheDir() 

我們來將信息儲存在臨時文件夾中,首先我們創建一個Storage類裏面開始寫

class Storage {
  Future<String> get _localPath async {
    final _path = await getTemporaryDirectory();
    return _path.path;
  }
}


2.創建指向文件位置的引用 
確定文件儲存位置之後,導入我們的io庫,使用包裏面的File類做泛型,然後獲取路勁並且指向我們的文件名

Future<File> get _localFile async {
  final path = await _localPath;
  return File('$path/counter.txt');
}


3.寫入數據到文件內 
現在有了可以使用的File,直接就可以來讀寫數據了,因爲我們使用了計數器,所以只需將證書儲存爲字符串格式,
使用“$counter”即可(解析成整數方法在下一步)

Future<File> writeCounter(counter) async {
    final file = await _localFile;

    return file.writeAsString('$counter');
  }


4.從文件讀取數據
現在可以直接用file類來讀取文件數據,然後用int的自帶解析方法來解析我們讀取的String

Future<int> readCounter() async {
    try {
      final file = await _localFile;

      var contents = await file.readAsString();

      return int.parse(contents);
    } catch (e) {
      return 0;
    }
  }


完整代碼

import 'dart:io';
import 'dart:async';

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

class Storage {
  Future<String> get _localPath async {
    final _path = await getTemporaryDirectory();
    return _path.path;
  }

  Future<File> get _localFile async {
    final path = await _localPath;

    return File('$path/counter.txt');
  }

  Future<int> readCounter() async {
    try {
      final file = await _localFile;

      var contents = await file.readAsString();

      return int.parse(contents);
    } catch (e) {
      return 0;
    }
  }

  Future<File> writeCounter(counter) async {
    final file = await _localFile;

    return file.writeAsString('$counter');
  }
}

class OnePage extends StatefulWidget {
  final Storage storage;

  OnePage({this.storage});

  @override
  _OnePageState createState() => _OnePageState();
}

class _OnePageState extends State<OnePage> {
  int _counter;

  @override
  void initState() {
    super.initState();
    widget.storage.readCounter().then((value) {
      setState(() => _counter = value);
    });
  }

  Future<File> _incrementCounter() async {
    setState(() => _counter++);
    return widget.storage.writeCounter(_counter);
  }

  Future<File> _incrementCounterj() async {
    setState(() => _counter--);
    return widget.storage.writeCounter(_counter);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text(
          '$_counter',
          style: Theme.of(context).textTheme.display1,
        ),
      ),
      floatingActionButton: Row(
        children: <Widget>[
          FloatingActionButton(
            onPressed: () => _incrementCounter(),
            child: new Icon(Icons.add),
          ),
          FloatingActionButton(
            onPressed: () => _incrementCounterj(),
            child: new Icon(Icons.title),
          )
        ],
      ),
      floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
    );
  }
}


原文來自  ===>  Flutter教程網:http://www.flutterj.com/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章