Files
app_flutter/lib/api/capatcha.dart
2025-06-27 20:20:51 +08:00

39 lines
1.0 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:styled_widget/styled_widget.dart';
import '../providers/api.dart';
class ApiImage extends HookConsumerWidget {
final String path;
const ApiImage(this.path, {super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final future = useMemoized(() async {
final client = ref.read(apiClientProvider);
final res = await client.get(path); // GET /avatar 或 /captcha
return res.bodyBytes;
}, [path]);
final snapshot = useFuture(future);
if (snapshot.connectionState != ConnectionState.done) {
return const CircularProgressIndicator();
}
if (snapshot.hasError) {
return const Icon(Icons.error);
}
return Image.memory(
snapshot.data!,
gaplessPlayback: true, // 避免闪烁
);
}
}
ApiImage captchaImage() => ApiImage('misc.php?mod=seccode');