颤振中共享首选项中的图像存储

时间:2021-03-31 04:27:44

标签: image flutter memory sharedpreferences store

我们如何将图像存储在共享首选项中并从 flutter 中的共享首选项中检索?

2 个答案:

答案 0 :(得分:3)

您可以将图像转换为 Unit8List,然后将 UnitList8 转换为 base64 并保存。这是一个例子。

static Future<bool> saveImage(List<int> imageBytes) async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    String base64Image = base64Encode(imageBytes);
    return prefs.setString("image", base64Image);
  }

  static Future<Image> getImage() async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    Uint8List bytes = base64Decode(prefs.getString("image"));
    return Image.memory(bytes);
  }

然后使用它。

来自资产

 ByteData bytes = await rootBundle.load('assets/file');
  SharedPreferencesHelper.saveImage(bytes.buffer.asUint8List());

来自网络

http.Response response = await http.get(
    'https://flutter.io/images/flutter-mark-square-100.png',
  );
  if(response.statusCode == 200){
    SharedPreferencesHelper.saveImage(response.bodyBytes);
  }else{
    //TODO: Handle error
  }

答案 1 :(得分:0)

我不完全知道共享首选项的解决方案,但我是用 path_provider 这样做的;

用于保存到磁盘;

Future<bool> saveNetworkImageToDisk() async{
await fileController.prepareInSubDirectoryJsonFile();
try{
  var response=await get(this.imageUrl); //http package for geting image from the internet 
  if(response.statusCode==200){
    await fileController.file.writeAsBytes(response.bodyBytes);
    return true;
  }else{
    return false;
  }
}catch(e){
  return false;
}

}

用于从磁盘获取;

  Future<File> getImage() async{
    Future<File> getImage() async{
    await fileController.prepareInSubDirectoryJsonFile();
    return fileController.file;
  }

在 file_controller.dart prepareJsonFileFunction 中这样做: 你只需要;

import 'dart:io';
import 'package:path_provider/path_provider.dart';

String directory=await  getApplicationDocumentsDirectory().then((appDirectory){return appDirectory;});
String appPath=directory.path;
file=File('${this.appPath}/${this.fileName}');

我也在 try-catch 系统中做这个工作,所以你可以修改它们:)