首页 > 建站教程 > APP开发,混合APP >  Flutter笔记67:path_provider文件存储插件正文

Flutter笔记67:path_provider文件存储插件

Flutter path_provider文件操作模块主要提供了下面三个方法:
    getTemporaryDirectory:获取临时目录
    getApplicationDocumentsDirectory:获取应用文档目录
    getExternalStorageDirectory:获取外部存储目录,注意:IOS没有外部存储目录的概念,所以无法获取。

这里简单模拟日志记录效果:

1、在pubspec.yaml中添加插件:
path_provider: ^1.6.21
2、详细代码:
import 'dart:io';
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';

void main(){
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      child: MaterialApp(
        title: 'path_provider文件存储示例',
        debugShowCheckedModeBanner: false,
        home: FirstPage(),
      ),
    );
  }
}

class FirstPage extends StatefulWidget{
  FirstPage({Key key}) : super(key:key);

  _FirstPageState createState() => _FirstPageState();
}

class _FirstPageState extends State<FirstPage>{
  int log_id = 0;
  String log_info = '';
  File file;

  @override
  void initState() {
    super.initState();
    readLogInfo().then((String value){
      setState(() {
        log_info = value;
      });
    });
  }

  //获取路径,不存在,就创建
  Future<File> getFile() async{
    String dir = (await getApplicationDocumentsDirectory()).path;
    if(file == null){
      file = File('$dir/log.txt');
    }
    return file;
  }

  //读取文件内容
  Future<String> readLogInfo() async{
    try{
      File file = await getFile();
      String content = await file.readAsString();
      return content;
    }on FileSystemException{
      return '';
    }
  }

  //写入文件
  Future<Null> writeLogInfo() async{
    setState(() {
      log_id++;
    });
    await (await getFile()).writeAsString('日志信息:$log_id\n',mode: FileMode.append);
  }

  @override
  Widget build(BuildContext context) {
   return Scaffold(
     appBar: AppBar(
       title: Text('path_provider文件存储示例'),
     ),
     body: Center(
       child: Text('$log_info'),
     ),
     floatingActionButton: FloatingActionButton(
       onPressed: writeLogInfo,
       tooltip: '写入日志',
       child: Icon(Icons.add),
     ),
   );
  }
}