Files
flutter_server_box/lib/data/provider/private_key.dart
lollipopkit🏳️‍⚧️ 53a7c0d8ff migrate: riverpod + freezed (#870)
2025-08-31 00:55:54 +08:00

54 lines
1.5 KiB
Dart

import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:server_box/core/sync.dart';
import 'package:server_box/data/model/server/private_key_info.dart';
import 'package:server_box/data/res/store.dart';
part 'private_key.freezed.dart';
part 'private_key.g.dart';
@freezed
abstract class PrivateKeyState with _$PrivateKeyState {
const factory PrivateKeyState({
@Default(<PrivateKeyInfo>[]) List<PrivateKeyInfo> keys,
}) = _PrivateKeyState;
}
@Riverpod(keepAlive: true)
class PrivateKeyNotifier extends _$PrivateKeyNotifier {
@override
PrivateKeyState build() {
final keys = Stores.key.fetch();
return PrivateKeyState(keys: keys);
}
void add(PrivateKeyInfo info) {
final newKeys = [...state.keys, info];
state = state.copyWith(keys: newKeys);
Stores.key.put(info);
bakSync.sync(milliDelay: 1000);
}
void delete(PrivateKeyInfo info) {
final newKeys = state.keys.where((e) => e.id != info.id).toList();
state = state.copyWith(keys: newKeys);
Stores.key.delete(info);
bakSync.sync(milliDelay: 1000);
}
void update(PrivateKeyInfo old, PrivateKeyInfo newInfo) {
final keys = [...state.keys];
final idx = keys.indexWhere((e) => e.id == old.id);
if (idx == -1) {
keys.add(newInfo);
Stores.key.put(newInfo);
Stores.key.delete(old);
} else {
keys[idx] = newInfo;
Stores.key.put(newInfo);
}
state = state.copyWith(keys: keys);
bakSync.sync(milliDelay: 1000);
}
}