美文网首页
Flutter 存储

Flutter 存储

作者: 苦咖啡Li | 来源:发表于2021-01-05 12:39 被阅读0次

    1、本地存储

    1.1 在 pubspec.yaml 包文件中添加包文件名,并通过 flutter package get 下载包依赖
        shared_preferences: ^0.5.8
    
    1.2 在需要使用的组件中引入包依赖文件
        import 'package:shared_preferences/shared_preferences.dart';
    
    1.3 在组件中使用
        final sp = await SharedPreferences.getInstance();
    
        // 往本地存储中存数据
        sp.setBool('flag', true);
        sp.setDouble('double', 2020.08);
        sp.setInt('int', 2020);
        sp.setString('Sting', 'hello 小明');
        sp.setStringList('stringList', ['1','2','3']);
    
        // 从本地存储中取数据
        final flag= sp.get('flag');   // 获取对应key值得数据
        final stringList = sp.getStringList('stringList'); 
        print('本地缓存中数据: $stringList');
    
    1.4 本地存储封装
        // 公共文件utils中封装本地存储的方法
        class LocalSave{
            // 读取数据
            static getSp(String keyName) async{
                SharedPreferences sp = await SharedPreferences.getInstance();
                String data = sp.get(keyName);
                return data;
            }
            // 保存数据
            static saveSp(String keyName,String value) async{
                SharedPreferences sp = await SharedPreferences.getInstance();
                bool isOK = await sp.setString(keyName, value);
                return isOK;
            }
        }
    
        // 组件中引入本地存储 + 调用
        LocalSave.saveSp('stringList', json.encode(['1','2','3']));
        final getspData = await LocalSave.getSp('stringList');
        print(getspData);
    

    2、 文件存储

    Flutter SDK 本身已经有 File 相关的 api ,在 Flutter 中使用 file 存储的关键是获取手机中存储的目录,然后根据目录路径来创建不同的文件。根据 Flutter 的特性,我们可以自定义 channel 来获取平台端的可存储文件夹路径给 flutter 端,我们需要用到插件 path_provider

        path_provider 插件提供了三个方法:
    
        getTemporaryDirectory()         // 获取临时目录
    
        getApplicationDocumentsDirectory()  // 获取应用文档目录
    
        getExternalStorageDirectory()       // 获取外部存储目录,该方法仅支持安卓,IOS 平台会抛出不支持的错误信息,因此可看出IOS平台没有外部存储目录的概念,所以无法获取外部存储目录路径
    
    2.1 在 pubspec.yaml 包文件中添加包文件名,并通过 flutter package get 下载包依赖
        path_provider: ^1.6.11
    
    2.2 在需要使用的组件中引入包依赖文件
        import 'package:path_provider/path_provider.dart';
    
    2.3 在组件中使用
        /*
        * @Description: 定义文件存储中相关操作方法
        */
        // ​找到正确的本地路径
        //  iOS模拟器中file的路径为: /Users/.../CoreSimulator/Devices/D44E9E54-2FDD-40B2-A953-3592C1D0BFD8/data/Containers/Data/Application/28644C62-1FFA-422E-8ED6-54AA4E9CBE0C/Documents
        //  Android模拟器中file的路径为: /data/user/0/com.example.demo/app_flutter
        Future<String> get _localPath async {
            final directory = await getApplicationDocumentsDirectory();
            return directory.path;
        }
        // 创建对文件位置的引用
        Future<File> get _localFile async {
            final path = await _localPath;
            return new File('$path/counter.txt');
        }
        // 将数据写入文件
        Future<File> writeCounter(counter) async {
            final file = await _localFile;
            return file.writeAsString('$counter');
        }
        // 从文件中读取数据
        Future<String> readCounter() async {
            try {
                final file = await _localFile;
                String contents = await file.readAsString();
                return contents;
            } catch (e) {
                //读取错误时返回信息
                return 'error';
            }
        }
    
        /*
        * @Description: 组件中调用文件的方法
        */
        // 获取本地路径
        _localPath.then((value) => {
            print('获取本地路径: $value')
        });
        // 创建对文件位置的引用
        _localFile.then((value) => {
            print('创建对文件位置的引用: $value')
        });
        // 将数据写入文件
        final writeData = await writeCounter('测试文件存储');
        print('写入数据: $writeData');
        // 从文件中读取数据
        final readData = await readCounter();
        print('读取数据: $readData');
    

    3、 网络图片资源本地缓存

    3.1 在 pubspec.yaml 包文件中添加包文件名,并通过 flutter package get 下载包依赖
        cached_network_image: ^2.2.0+1
    
    3.2 在需要使用的组件中引入包依赖文件
        import 'package:cached_network_image/cached_network_image.dart';
    
    3.3 组件中使用
        CachedNetworkImage(
            imageUrl: "https://tpc.googlesyndication.com/simgad/7275932481044045584?sqp=4sqPyQQ7QjkqNxABHQAAtEIgASgBMAk4A0DwkwlYAWBfcAKAAQGIAQGdAQAAgD-oAQGwAYCt4gS4AV_FAS2ynT4&rs=AOga4qlT010JqD6sByFyXwBOCmZFFnlE6g",
            width: 600,
        )
    

    注意: 只有需要访问的图片地址存在、有效、有权限、网络正常的情况下才可以访问成功,网络上随便找的图片可能会存在 ( 404:图片不存在; 403: 无权限访问; 无效图片资源; 网络不通... 等)错误信息

    相关文章

      网友评论

          本文标题:Flutter 存储

          本文链接:https://www.haomeiwen.com/subject/vdqluktx.html