При работе с Flutter и Dart вы можете столкнуться со сценариями, когда вам необходимо сохранить Uint8List (неизменяемый список 8-битных целых чисел без знака) в постоянном хранилище, например в общих настройках. В этой статье мы рассмотрим различные методы выполнения этой задачи. Мы предоставим примеры кода, чтобы продемонстрировать реализацию каждого метода и обсудим их плюсы и минусы.
Метод 1: преобразование Uint8List в строку
Один простой подход — преобразовать Uint8List в строковое представление с использованием кодировки base64. Вот пример:
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
Future<void> saveUint8ListToSharedPrefs(Uint8List data) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String encodedData = base64Encode(data);
await prefs.setString('myKey', encodedData);
}
Чтобы получить Uint8List из общих настроек:
Future<Uint8List> getUint8ListFromSharedPrefs() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String encodedData = prefs.getString('myKey');
Uint8List data = base64Decode(encodedData);
return data;
}
Метод 2: использование SharedPreferences.setStringList
Другой подход — сохранить Uint8List как список целых чисел с помощью метода SharedPreferences.setStringList. Вот пример:
import 'package:shared_preferences/shared_preferences.dart';
Future<void> saveUint8ListToSharedPrefs(Uint8List data) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
List<int> dataList = data.toList();
await prefs.setStringList('myKey', dataList.map((e) => e.toString()).toList());
}
Чтобы получить Uint8List из общих настроек:
Future<Uint8List> getUint8ListFromSharedPrefs() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
List<int> dataList = prefs.getStringList('myKey').map(int.parse).toList();
Uint8List data = Uint8List.fromList(dataList);
return data;
}
Метод 3: использование SharedPreferences.setUint8List (только для Android)
В Android класс SharedPreferencesпредоставляет метод setUint8List, специально предназначенный для хранения Uint8Lists. Вот пример:
import 'package:shared_preferences/shared_preferences.dart';
Future<void> saveUint8ListToSharedPrefs(Uint8List data) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setUint8List('myKey', data);
}
Чтобы получить Uint8List из общих настроек:
Future<Uint8List> getUint8ListFromSharedPrefs() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
Uint8List data = prefs.getUint8List('myKey');
return data;
}
В этой статье мы рассмотрели три метода сохранения Uint8Lists в общих настройках Flutter. Каждый метод предлагает свой подход в зависимости от ваших конкретных требований. Выберите метод, который лучше всего соответствует вашим потребностям, исходя из таких факторов, как совместимость платформы и размер данных.
Не забудьте импортировать необходимые пакеты (shared_preferencesи dart:convert) в свой проект Flutter, чтобы эффективно использовать эти методы. С помощью этих методов вы можете легко сохранять списки Uint8Lists в своих приложениях.