added device option panel and implement search function

This commit is contained in:
Simeon5566 2023-01-05 17:33:50 +01:00
parent b31dee4799
commit 259985f8cc
3 changed files with 69 additions and 10 deletions

View File

@ -23,7 +23,7 @@ class CloudServiceAPI {
static String _password = ""; static String _password = "";
static late Map<String, String> _headers; static late Map<String, String> _headers;
static bool _initState = false; static bool _initState = false;
static List<dynamic> devices = List<dynamic>.empty(growable: true); static List<DeviceModel> devices = List<DeviceModel>.empty(growable: true);
CloudServiceAPI() { CloudServiceAPI() {
if (!_initState) { if (!_initState) {
@ -72,14 +72,16 @@ class CloudServiceAPI {
DeviceInfoModel deviceInfoModel = DeviceInfoModel.fromJson(jsonObject); DeviceInfoModel deviceInfoModel = DeviceInfoModel.fromJson(jsonObject);
return deviceInfoModel; return deviceInfoModel;
} }
Future<List<DeviceInfoModel>> getDevicesInfo() async {
updateDeviceList();
List<DeviceInfoModel> deviceInfoModelList = List<DeviceInfoModel>.empty(growable: true);
for(DeviceModel tmp in devices){
deviceInfoModelList.add(await getDeviceInfo(tmp.id));
}
return deviceInfoModelList;
}
Future updateDeviceList() async { Future updateDeviceList() async {
devices = await getDevices(); devices = await getDevices();
debugPrint("devices: ${devices.elementAt(0)}");
}
Future<Map<String, dynamic>> getDeviceInfo(deviceID) async {
Uri url = Uri.https(address, '/api/devices/$deviceID');
Response r = await get(url, headers: headers);
return json.decode(r.body) as Map<String, dynamic>;
} }
Future<Map<String, dynamic>> getInformation() async { Future<Map<String, dynamic>> getInformation() async {
@ -87,6 +89,14 @@ class CloudServiceAPI {
Response response = await get(url, headers: _headers); Response response = await get(url, headers: _headers);
return json.decode(response.body) as Map<String, dynamic>; return json.decode(response.body) as Map<String, dynamic>;
} }
Future<bool> deleteDevice(String clientId) async {
Uri url = Uri.https(_address, '/api/devices/$clientId');
Response response = await delete(url, headers: _headers);
if(response.statusCode == 204){
return true;
}
return false;
}
Future<bool> createDevice(String id, String primaryThumbprint, String secondaryThumbprint) async { Future<bool> createDevice(String id, String primaryThumbprint, String secondaryThumbprint) async {
Uri url = Uri.https(_address, '/api/devices'); Uri url = Uri.https(_address, '/api/devices');

View File

@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../objects/cloud_service_api.dart';
import '../objects/create_material_color.dart'; import '../objects/create_material_color.dart';
import '../widgets/sidebar.dart'; import '../widgets/sidebar.dart';
@ -33,6 +34,7 @@ class HomeScreen extends StatefulWidget {
} }
class _HomeScreen extends State<HomeScreen> { class _HomeScreen extends State<HomeScreen> {
final CloudServiceAPI _cloudServiceAPI = CloudServiceAPI();
@override @override
void initState() { void initState() {
super.initState(); super.initState();

View File

@ -1,4 +1,5 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@ -63,6 +64,21 @@ class _RegisteredDevicesScreen extends State<RegisteredDevicesScreen> {
super.initState(); super.initState();
} }
Future searchDevice(String clientId) async {
List<DeviceInfoModel> searchResult = List<DeviceInfoModel>.empty(growable: true);
for(DeviceInfoModel tmp in _registeredInfoDevices!){
if(clientId == ""){
// _fetchRegisteredDevices();
// break;
// missing implementation
}
if(tmp.id.contains(clientId)){
searchResult.add(tmp);
}
}
_registeredInfoDevices = searchResult;
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@ -99,13 +115,13 @@ class _RegisteredDevicesScreen extends State<RegisteredDevicesScreen> {
obscureText: false, obscureText: false,
decoration: InputDecoration( decoration: InputDecoration(
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
hintText: 'Enter the server password', hintText: 'Search for Devices',
labelText: "Search", labelText: "Search",
suffixIcon: IconButton( suffixIcon: IconButton(
icon: const Icon(Icons.search), icon: const Icon(Icons.search),
onPressed: () { onPressed: () {
setState(() { setState(() {
// TODO Suchfunktion searchDevice(_searchText);
}); });
}, },
), ),
@ -130,8 +146,39 @@ class _RegisteredDevicesScreen extends State<RegisteredDevicesScreen> {
DeviceInfoModel entry = _registeredInfoDevices![index]; DeviceInfoModel entry = _registeredInfoDevices![index];
//DeviceInfoModel entryInfo = await _cloudServiceAPI.getDeviceInfo(entry.id); //DeviceInfoModel entryInfo = await _cloudServiceAPI.getDeviceInfo(entry.id);
return CustomListTile( return CustomListTile(
title: "${entry.id} \nentrypoint: ${entry.endpoint} \nstatus: ${entry.status} \nconnection: ${entry.connectionState} \nlast activity: ${entry.lastActivityTime}", title: entry.id,
icon: Icons.devices, icon: Icons.devices,
onTap: () => showDialog<String>(
context: context,
builder: (BuildContext context) => AlertDialog(
title: const Text('Device Info'),
content: Text("${entry.id} "
"\nentrypoint: ${entry.endpoint} "
"\nstatus: ${entry.status} "
"\nconnection: ${entry.connectionState} "
"\nlast activity: ${entry.lastActivityTime}"
"\nprimaryThumbprint: ${entry.primaryThumbprint}"),
backgroundColor: Colors.white70,
actions: <Widget>[
TextButton(onPressed: () => Navigator.pop(context, 'Cancel'),
child: const Text('Cancel'),
),
TextButton(
onPressed: () {
_cloudServiceAPI.deleteDevice(entry.id);
Navigator.pop(context, 'delete device');
},
child: const Text('Delete Device'),
),
],
),
)
/*
Navigator.push(context,
MaterialPageRoute(
builder: (context) => DeviceOptions(deviceInfoModel: entry)));
*/
); );
}, },
), ),