// lib/screens/service_point_select_screen.dart import "package:flutter/material.dart"; import "../services/api.dart"; import "../models/service_point.dart"; class ServicePointSelectScreen extends StatefulWidget { const ServicePointSelectScreen({super.key}); @override State createState() => _ServicePointSelectScreenState(); } class _ServicePointSelectScreenState extends State { late Future> _future; // MVP HARD CODE static const int _mvpBusinessId = 17; @override void initState() { super.initState(); _future = _load(); } Future> _load() { return Api.listServicePoints(businessId: _mvpBusinessId); } String _tryGetString(dynamic obj, String field) { try { final v = obj == null ? null : (obj as dynamic).__getattribute__(field); if (v == null) return ""; final s = v.toString().trim(); return s; } catch (_) { // Dart doesn't actually support __getattribute__; this block is never reached in that way. // We keep it here because we also attempt direct dynamic access below. return ""; } } String _nameFor(ServicePoint sp, int index) { final d = sp as dynamic; // Try common getters without compile-time assumptions. try { final v = d.servicePointName; if (v != null) { final s = v.toString().trim(); if (s.isNotEmpty) return s; } } catch (_) {} try { final v = d.name; if (v != null) { final s = v.toString().trim(); if (s.isNotEmpty) return s; } } catch (_) {} try { final v = d.ServicePointName; if (v != null) { final s = v.toString().trim(); if (s.isNotEmpty) return s; } } catch (_) {} try { final v = d.SERVICEPOINTNAME; if (v != null) { final s = v.toString().trim(); if (s.isNotEmpty) return s; } } catch (_) {} return "Service Point ${index + 1}"; } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text("Select Service Point"), ), body: FutureBuilder>( future: _future, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Center(child: CircularProgressIndicator()); } if (snapshot.hasError) { return Center( child: Padding( padding: const EdgeInsets.all(16), child: Column( mainAxisSize: MainAxisSize.min, children: [ const Text( "Failed to load service points.", style: TextStyle(fontWeight: FontWeight.bold), ), const SizedBox(height: 8), Text( snapshot.error.toString(), textAlign: TextAlign.center, ), const SizedBox(height: 16), ElevatedButton( onPressed: () => setState(() => _future = _load()), child: const Text("Retry"), ), ], ), ), ); } final items = snapshot.data ?? const []; if (items.isEmpty) { return const Center(child: Text("No service points found.")); } return ListView.separated( itemCount: items.length, separatorBuilder: (_, __) => const Divider(height: 1), itemBuilder: (context, i) { final sp = items[i]; final name = _nameFor(sp, i); return ListTile( title: Text(name), trailing: const Icon(Icons.chevron_right), onTap: () { // Return the selected service point to the previous screen. Navigator.of(context).pop(sp); }, ); }, ); }, ), ); } }