import 'dart:convert'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:http/http.dart' as http; class UserDeviceItem { const UserDeviceItem({ required this.id, required this.name, required this.platform, required this.status, required this.lastSeenAt, }); final String id, name, platform, status; final DateTime lastSeenAt; factory UserDeviceItem.fromJson(Map json) => UserDeviceItem( id: json['id']! as String, name: json['name']! as String, platform: json['platform']! as String, status: json['status']! as String, lastSeenAt: DateTime.parse(json['lastSeenAt']! as String), ); } class DeviceRepository { DeviceRepository({required this.client, required this.baseUrl}); static const _storage = FlutterSecureStorage(); final http.Client client; final String baseUrl; Future> list() async { final response = await client.get(Uri.parse('$baseUrl/devices')); if (response.statusCode < 200 || response.statusCode >= 300) { throw Exception('设备列表加载失败'); } return (jsonDecode(response.body) as List) .map( (item) => UserDeviceItem.fromJson(Map.from(item as Map)), ) .toList(); } Future revoke(String id) async { final response = await client.delete(Uri.parse('$baseUrl/devices/$id')); if (response.statusCode < 200 || response.statusCode >= 300) { throw Exception('撤销设备失败'); } } Future isCurrent(String id) async => await _storage.read(key: 'device_id') == id; }