This commit is contained in:
2026-02-27 21:12:56 +08:00
commit a878084cbb
233 changed files with 22988 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
import 'package:riverpod_annotation/riverpod_annotation.dart';
import '../../../../backend/api/commands.dart' as commands;
import '../../../../backend/discovery/model.dart';
part 'peers_controller.g.dart';
@riverpod
class PeersController extends _$PeersController {
@override
Future<List<Peer>> build() async {
return commands.getPeers();
}
Future<void> refresh() async {
state = const AsyncLoading();
state = await AsyncValue.guard(commands.getPeers);
}
void upsertPeer(Peer peer) {
final current = state.asData?.value ?? const <Peer>[];
final index = current.indexWhere((item) => item.id == peer.id);
if (index < 0) {
state = AsyncData([...current, peer]);
return;
}
final old = current[index];
if (old == peer) {
return;
}
final next = [...current];
next[index] = peer;
state = AsyncData(next);
}
void removePeer(String id) {
final current = state.asData?.value;
if (current == null || current.isEmpty) {
return;
}
final next = current.where((item) => item.id != id).toList(growable: false);
if (next.length != current.length) {
state = AsyncData(next);
}
}
}

View File

@@ -0,0 +1,54 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'peers_controller.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(PeersController)
final peersControllerProvider = PeersControllerProvider._();
final class PeersControllerProvider
extends $AsyncNotifierProvider<PeersController, List<Peer>> {
PeersControllerProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'peersControllerProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$peersControllerHash();
@$internal
@override
PeersController create() => PeersController();
}
String _$peersControllerHash() => r'd6d108b39274dd5de380523373f115d2e4c10e0e';
abstract class _$PeersController extends $AsyncNotifier<List<Peer>> {
FutureOr<List<Peer>> build();
@$mustCallSuper
@override
void runBuild() {
final ref = this.ref as $Ref<AsyncValue<List<Peer>>, List<Peer>>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<AsyncValue<List<Peer>>, List<Peer>>,
AsyncValue<List<Peer>>,
Object?,
Object?
>;
element.handleCreate(ref, build);
}
}