import 'package:flutter/material.dart'; import '../api/api_client.dart'; import 'kontroll_screen.dart'; /// Prompt 11 Screen 1: Standort/Objekt wählen. Kamera-Scan (Karte 10) ist Roadmap - /// das Suchfeld nimmt schon jetzt einen gescannten Code entgegen, sobald ein /// Scanner-Plugin ergänzt wird. class ObjektListScreen extends StatefulWidget { const ObjektListScreen({super.key, required this.apiClient}); final ApiClient apiClient; @override State createState() => _ObjektListScreenState(); } class _ObjektListScreenState extends State { List _objekte = []; String _suche = ''; String? _fehler; @override void initState() { super.initState(); _laden(); } Future _laden() async { try { final ergebnis = await widget.apiClient.request('/objekte'); setState(() => _objekte = ergebnis as List); } catch (_) { setState(() => _fehler = 'Objektliste konnte nicht geladen werden.'); } } @override Widget build(BuildContext context) { final gefiltert = _objekte.where((o) { final name = (o['name'] as String).toLowerCase(); final code = (o['code'] as String).toLowerCase(); final suche = _suche.toLowerCase(); return name.contains(suche) || code.contains(suche); }).toList(); return Scaffold( appBar: AppBar(title: const Text('Objekte')), body: Column( children: [ Padding( padding: const EdgeInsets.all(12), child: TextField( decoration: const InputDecoration(labelText: 'Suche oder Code scannen…'), onChanged: (wert) => setState(() => _suche = wert), ), ), if (_fehler != null) Text(_fehler!, style: const TextStyle(color: Colors.red)), Expanded( child: ListView.builder( itemCount: gefiltert.length, itemBuilder: (context, index) { final objekt = gefiltert[index]; return ListTile( title: Text(objekt['name'] as String), subtitle: Text(objekt['code'] as String), onTap: () => Navigator.of(context).push( MaterialPageRoute( builder: (_) => KontrollScreen( apiClient: widget.apiClient, objektId: objekt['id'] as int, ), ), ), ); }, ), ), ], ), ); } }