import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../app/tema.dart'; import '../comfy/comfy_istemci.dart'; import '../veri/isar_servisi.dart'; class AyarlarEkrani extends ConsumerWidget { const AyarlarEkrani({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final ayarlar = ref.watch(ayarlarProvider); final notifier = ref.read(ayarlarProvider.notifier); return Padding( padding: const EdgeInsets.fromLTRB(12, 10, 12, 8), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Row( children: [ Icon(Icons.settings_rounded, color: FikoRenkler.neonMor, size: 20), SizedBox(width: 8), Text('Ayarlar', style: TextStyle(fontSize: 15, fontWeight: FontWeight.w800)), ], ), const SizedBox(height: 12), ConstrainedBox( constraints: const BoxConstraints(maxWidth: 640), child: Card( child: Padding( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Row( children: [ Expanded( child: TextFormField( key: ValueKey(ayarlar.comfyUrl), initialValue: ayarlar.comfyUrl, decoration: const InputDecoration( labelText: 'ComfyUI Adresi'), onFieldSubmitted: (v) => notifier.guncelle((a) => a.comfyUrl = v.trim()), ), ), const SizedBox(width: 10), _BaglantiTestButonu(), ], ), const SizedBox(height: 14), Row( children: [ Expanded( child: TextFormField( key: ValueKey(ayarlar.ciktiKlasoru), initialValue: ayarlar.ciktiKlasoru, readOnly: true, decoration: const InputDecoration( labelText: 'Çıktı Klasörü'), ), ), const SizedBox(width: 10), OutlinedButton.icon( icon: const Icon(Icons.folder_open, size: 17), label: const Text('Seç'), onPressed: () async { final secim = await FilePicker.platform .getDirectoryPath( dialogTitle: 'Çıktı klasörü seç'); if (secim != null) { notifier .guncelle((a) => a.ciktiKlasoru = secim); } }, ), ], ), const SizedBox(height: 8), SwitchListTile( contentPadding: EdgeInsets.zero, title: const Text('Koyu tema', style: TextStyle(fontSize: 13.5)), value: ayarlar.koyuTema, onChanged: (v) => notifier.guncelle((a) => a.koyuTema = v), ), ], ), ), ), ), ], ), ); } } class _BaglantiTestButonu extends ConsumerStatefulWidget { @override ConsumerState<_BaglantiTestButonu> createState() => _BaglantiTestButonuState(); } class _BaglantiTestButonuState extends ConsumerState<_BaglantiTestButonu> { bool _testEdiliyor = false; @override Widget build(BuildContext context) { return OutlinedButton.icon( icon: _testEdiliyor ? const SizedBox( width: 14, height: 14, child: CircularProgressIndicator(strokeWidth: 2)) : const Icon(Icons.wifi_tethering, size: 17), label: const Text('Test'), onPressed: _testEdiliyor ? null : () async { setState(() => _testEdiliyor = true); final basarili = await ref.read(comfyIstemciProvider).erisilebilirMi(); setState(() => _testEdiliyor = false); if (context.mounted) { ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text(basarili ? 'ComfyUI bağlantısı başarılı ✓' : 'ComfyUI\'ye ulaşılamadı — sunucu açık mı?'), backgroundColor: basarili ? FikoRenkler.neonYesil.withValues(alpha: 0.9) : Theme.of(context).colorScheme.error, )); } }, ); } }