flutter文件讀寫可以對磁碟文件進行操作,實現某些業務場景,那麼我們開始來講下這個文件讀寫操作。 使用的庫插件(package) dart:io(用於數據處理) path_provider (用於獲取路勁) 操作步驟 1.獲取正確的本地路徑 2.創建指向文件位置的引用 3.寫入數據到文件內 4. ...
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/