我们如何将图像存储在共享首选项中并从 flutter 中的共享首选项中检索?
答案 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 系统中做这个工作,所以你可以修改它们:)