import 'package:flutter/material.dart';
class YeniDuzenlePage extends StatefulWidget { final Map<String, dynamic> jsonData; final Function(Map<String, dynamic>) onSave; final String tittle;
YeniDuzenlePage( {required this.tittle, required this.jsonData, required this.onSave});
@override _YeniDuzenlePageState createState() => _YeniDuzenlePageState(); }
class _YeniDuzenlePageState extends State<YeniDuzenlePage> { final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); List<Widget> _inputWidgets = []; Map<String, dynamic> selectedDropdownValues = {}; // Store selected dropdown values
@override void initState() { super.initState(); _initializeInputWidgets(); }
void _initializeInputWidgets() { _inputWidgets = []; widget.jsonData.forEach((key, value) { if (value is List) { // Eğer alan bir liste ise DropdownButtonFormField oluştur List<Map<String, dynamic>> options = value.cast<Map<String, dynamic>>(); String selectedValue = options.isNotEmpty ? options[0]["id"].toString() : "0";
var selectedOption = options.where((element) => element["selected"] == 1).firstOrNull; if (selectedOption != null) { selectedValue = selectedOption["id"].toString(); }
selectedDropdownValues[key] = selectedValue; // Initialize with default value
_inputWidgets.add(DropdownButtonFormField<String>( value: selectedDropdownValues[key], // Use selected value from the map onChanged: (newValue) { setState(() { selectedDropdownValues[key] = newValue!; }); }, items: options.map((option) { return DropdownMenuItem<String>( value: option["id"].toString(), child: Text(option["ad"]), ); }).toList(), decoration: InputDecoration( labelText: key, ), )); } else { // Diğer alanlar için TextFormField oluştur
TextEditingController controller = TextEditingController(text: value.toString());
var inputWidget= TextFormField( controller: controller, decoration: InputDecoration( labelText: key, ), );
if(key == "id"){ inputWidget= TextFormField( controller: controller, enabled: false, decoration: InputDecoration( labelText: key, ), ); }
_inputWidgets.add(inputWidget);
} }); }
@override void dispose() { super.dispose(); }
@override Widget build(BuildContext context) { return AlertDialog( title: Text(widget.tittle), content: Container( height: 500, width: 500, child: Form( key: _formKey, child: GridView.builder( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 4, // Sütun sayısı burada belirlenir ), itemCount: _inputWidgets.length, itemBuilder: (context, index) { return Container( padding: EdgeInsets.only(left: 10), child: _inputWidgets[index], ); }, ), ), ), actions: <Widget>[ TextButton( onPressed: () { Navigator.of(context).pop(); }, child: Text("İptal"), ), TextButton( onPressed: () { if (_formKey.currentState!.validate()) { Map<String, dynamic> newData = {};
for (int index = 0; index < _inputWidgets.length; index++) { String key = widget.jsonData.keys.elementAt(index); Widget inputWidget = _inputWidgets[index];
if (inputWidget is DropdownButtonFormField) { // Eğer alan bir DropdownButtonFormField ise seçilen değeri al newData[key] = int.parse(selectedDropdownValues[key] ?? "0"); } else if (inputWidget is TextFormField) { // Diğer alanlar için değerleri al newData[key] = inputWidget.controller?.text; } }
widget.onSave(newData); Navigator.of(context).pop(); } }, child: Text("Kaydet"), ), ], ); } }
|