uploadTemplate method

Future<void> uploadTemplate(
  1. KoiTemplateManifest manifest
)

Implementation

Future<void> uploadTemplate(KoiTemplateManifest manifest) async {
  await Future.delayed(const Duration(milliseconds: 600)); // 模拟网络延迟
  final prefs = await SharedPreferences.getInstance();
  final jsonStringList = prefs.getStringList(_kCloudTemplatesKey) ?? [];

  // 解析已有的列表,检查是否存在同 ID 模板,覆盖或追加
  final List<Map<String, dynamic>> existing = [];
  for (final str in jsonStringList) {
    try {
      existing.add(jsonDecode(str) as Map<String, dynamic>);
    } catch (_) {}
  }

  final index = existing.indexWhere((m) => m['id'] == manifest.id);
  final newManifestJson = manifest.toJson();
  if (index >= 0) {
    existing[index] = newManifestJson;
  } else {
    existing.add(newManifestJson);
  }

  await prefs.setStringList(
    _kCloudTemplatesKey,
    existing.map((m) => jsonEncode(m)).toList(),
  );
}