хочу сохранить сетевой образ в свою локальную память, используя пакет shared_preference.
Давайте используем изображение ниже:
Как мне это сделать с помощью shared_preference?
Я с нетерпением жду ответа от вас. Спасибо.
Ваше изображение может быть слишком большим для следующего метода, поэтому я использую изображение-заполнитель меньшего размера из https://picsum.photos/200, которое возвращает случайное изображение каждый раз, когда оно вызывается. Просмотрите следующий код, который сначала проверяет, сохранено ли изображение в общих настройках, если нет, код загрузит изображение, преобразует изображение в строку base64 и сохранит строку изображения base64 в общих настройках.
import 'dart:async';
import 'dart:convert';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:shared_preferences/shared_preferences.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark(),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
State createState() => MyHomePageState();
}
class MyHomePageState extends State<MyHomePage> {
String _base64;
Future getImage;
Future<String> _getImage() async {
String base64;
final SharedPreferences prefs = await SharedPreferences.getInstance();
base64 = prefs.getString("base64Image");
if (base64 == null) {
final http.Response response = await http.get(
'https://picsum.photos/200',
);
base64 = base64Encode(response.bodyBytes);
prefs.setString("base64Image", base64);
}
return base64;
}
@override
void initState() {
super.initState();
getImage = _getImage();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Example App')),
body: FutureBuilder<String>(
future: getImage,
builder: (context, snapshot) {
if (snapshot.hasData) {
_base64 = snapshot.data;
final Uint8List bytes = base64Decode(_base64);
return ListTile(
leading: Image.memory(bytes),
title: Text(_base64),
);
}
return const Center(child: CircularProgressIndicator());
},
),
);
}
}