aplikasi CRUD di web https://idx.dev/ dengan dart flutter

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class Item {
  String name;

  Item(this.name);
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'CRUD Flutter Web',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: const HomePage(),
      debugShowCheckedModeBanner: false,
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final List<Item> items = [];
  final TextEditingController controller = TextEditingController();
  int? editingIndex;

  void addItem() {
    if (controller.text.isEmpty) return;
    setState(() {
      if (editingIndex == null) {
        items.add(Item(controller.text));
      } else {
        items[editingIndex!] = Item(controller.text);
        editingIndex = null;
      }
      controller.clear();
    });
  }

  void editItem(int index) {
    setState(() {
      controller.text = items[index].name;
      editingIndex = index;
    });
  }

  void deleteItem(int index) {
    setState(() {
      items.removeAt(index);
      if (editingIndex == index) {
        controller.clear();
        editingIndex = null;
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Flutter CRUD Web'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16),
        child: Column(
          children: [
            TextField(
              controller: controller,
              decoration: InputDecoration(
                hintText: 'Masukkan nama item',
                suffixIcon: IconButton(
                  icon: const Icon(Icons.save),
                  onPressed: addItem,
                ),
              ),
              onSubmitted: (_) => addItem(),
            ),
            const SizedBox(height: 20),
            Expanded(
              child: items.isEmpty
                  ? const Center(child: Text('Belum ada data'))
                  : ListView.builder(
                      itemCount: items.length,
                      itemBuilder: (context, index) {
                        return ListTile(
                          title: Text(items[index].name),
                          trailing: Row(
                            mainAxisSize: MainAxisSize.min,
                            children: [
                              IconButton(
                                icon: const Icon(Icons.edit),
                                onPressed: () => editItem(index),
                              ),
                              IconButton(
                                icon: const Icon(Icons.delete),
                                onPressed: () => deleteItem(index),
                              ),
                            ],
                          ),
                        );
                      },
                    ),
            ),
          ],
        ),
      ),
    );
  }
}

Sumber : Chatgpt.com

Komentar

Postingan populer dari blog ini

Arya Kegiatan Praktikum Mapel Kejuruan

aplikasi CRUD Flutter + MockAPI