import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_provisioning_for_iot/schemas/device_info_model.dart'; import '../objects/cloud_service_api.dart'; // import 'package:shared_preferences/shared_preferences.dart'; import '../schemas/device_model.dart'; import '../widgets/custom_list_tile.dart'; import '../widgets/sidebar.dart'; import '../widgets/single_section.dart'; Future> readJson() async { final data = await rootBundle.loadString('config/credentials.json'); var data_ = json.decode(data) as Map; debugPrint(data_.toString()); return data_; } class RegisteredDevicesScreen extends StatefulWidget { const RegisteredDevicesScreen({Key? key}) : super(key: key); @override State createState() => _RegisteredDevicesScreen(); } class _RegisteredDevicesScreen extends State { late List? _registeredInfoDevices; // late final Map _credentials; final CloudServiceAPI _cloudServiceAPI = CloudServiceAPI(); // static SharedPreferences? preferencesInstance; String _searchText = ""; bool _isFetching = false; Future _fetchRegisteredDevices() async { setState(() { _isFetching = true; }); _registeredInfoDevices == null ? _registeredInfoDevices = List.empty(growable: true) : _registeredInfoDevices!.clear(); List? registeredDevices = await _cloudServiceAPI.getDevices(); for (DeviceModel deviceModel in registeredDevices) { String deviceID = deviceModel.id; DeviceInfoModel deviceInfoModel = await _cloudServiceAPI.getDeviceInfo(deviceID); setState(() { _registeredInfoDevices!.add(deviceInfoModel); }); } setState(() { _isFetching = false; }); } @override void initState() { _registeredInfoDevices = null; _fetchRegisteredDevices(); super.initState(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: _isFetching ? const Text('Registered Devices (searching...)') : const Text('Registered Devices'), actions: [ _isFetching ? FittedBox( child: Container( margin: const EdgeInsets.all(16.0), child: const CircularProgressIndicator( valueColor: AlwaysStoppedAnimation(Colors.white), ), ), ) : IconButton( icon: const Icon(Icons.replay), onPressed: _fetchRegisteredDevices, ) ], ), body: Center( child: ListView(children: [ SingleChildScrollView( physics: const ScrollPhysics(), child: Column( children: [ SingleSection( title: "Allgemeines", children: [ Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0), child: TextFormField( obscureText: false, decoration: InputDecoration( border: const OutlineInputBorder(), hintText: 'Enter the server password', labelText: "Search", suffixIcon: IconButton( icon: const Icon(Icons.search), onPressed: () { setState(() { // TODO Suchfunktion }); }, ), filled: true, ), keyboardType: TextInputType.text, onChanged: (String newValue) { _searchText = newValue; }, ), ), ] ), SingleSection( title: "Registered Bluetooth Devices", children: [ ListView.builder( physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, itemCount: _registeredInfoDevices == null ? 0 : _registeredInfoDevices!.length, itemBuilder: (BuildContext context, index) { DeviceInfoModel entry = _registeredInfoDevices![index]; //DeviceInfoModel entryInfo = await _cloudServiceAPI.getDeviceInfo(entry.id); return CustomListTile( title: "${entry.id} \nentrypoint: ${entry.endpoint} \nstatus: ${entry.status} \nconnection: ${entry.connectionState} \nlast activity: ${entry.lastActivityTime}", icon: Icons.devices, ); }, ), ], ) ], ), ), ]), ), drawer: const Sidebar(), ); } }