flutter文件讀寫可以對磁盤文件進行操作源祈,實現(xiàn)某些業(yè)務場景渔欢,那么我們開始來講下這個文件讀寫操作墓塌。
使用的庫插件(package)
dart:io(用于數(shù)據(jù)處理)
path_provider (用于獲取路勁)
操作步驟
1.獲取正確的本地路徑
2.創(chuàng)建指向文件位置的引用
3.寫入數(shù)據(jù)到文件內(nèi)
4.從文件讀取數(shù)據(jù)
**1.獲取正確的本地路徑 **
我們獲取路勁用的是這個插件
path_provider
可以看到里面提供了兩個獲取路勁的方式
Example
Directory tempDir = await getTemporaryDirectory();
String tempPath = tempDir.path;
Directory appDocDir = await getApplicationDocumentsDirectory();
String appDocPath = appDocDir.path;
getTemporaryDirectory:【臨時文件夾】
也就是系統(tǒng)可以隨時清空的臨時緩存文件夾,在IOS中對應NSTemporaryDirectory在安卓中對應getCacheDir()
我們來將信息儲存在臨時文件夾中,首先我們創(chuàng)建一個Storage類里面開始寫
class Storage {
Future<String> get _localPath async {
final _path = await getTemporaryDirectory();
return _path.path;
}
}
**2.創(chuàng)建指向文件位置的引用 **
確定文件儲存位置之后苫幢,導入我們的io庫访诱,使用包里面的File類做泛型,然后獲取路勁并且指向我們的文件名
Future<File> get _localFile async {
final path = await _localPath;
return File('$path/counter.txt');
}
**3.寫入數(shù)據(jù)到文件內(nèi) **
現(xiàn)在有了可以使用的File韩肝,直接就可以來讀寫數(shù)據(jù)了触菜,因為我們使用了計數(shù)器,所以只需將證書儲存為字符串格式哀峻,
使用“$counter”即可(解析成整數(shù)方法在下一步)
Future<File> writeCounter(counter) async {
final file = await _localFile;
return file.writeAsString('$counter');
}
4.從文件讀取數(shù)據(jù) ???????
現(xiàn)在可以直接用file類來讀取文件數(shù)據(jù)涡相,然后用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教程網(wǎng):http://www.flutterj.com/