MEMBUAT APLIKASI TO-DO LIST FLUTTER

 

✨ Pendahuluan

Halo sobat developer! 👋
Kali ini kita akan belajar cara membuat aplikasi To-Do List dengan Flutter yang tampilannya aesthetic, minimalis, dan elegan, tanpa perlu menginstal apa pun di komputer kamu.
Cukup buka DartPad.dev, tempelkan kode-nya, dan aplikasi siap dijalankan! 🚀



HASIL:


KODE:  

import 'package:flutter/material.dart';


void main() => runApp(const ToDoApp());


class ToDoApp extends StatelessWidget {

  const ToDoApp({super.key});


  @override

  Widget build(BuildContext context) {

    return MaterialApp(

      title: 'Aesthetic To-Do List',

      debugShowCheckedModeBanner: false,

      theme: ThemeData(

        useMaterial3: true,

        colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xFF9C8CFC)),

        fontFamily: 'Poppins',

      ),

      home: const ToDoPage(),

    );

  }

}


class ToDoPage extends StatefulWidget {

  const ToDoPage({super.key});


  @override

  State<ToDoPage> createState() => _ToDoPageState();

}


class _ToDoPageState extends State<ToDoPage> {

  final TextEditingController _controller = TextEditingController();

  final List<Map<String, dynamic>> _tasks = [];


  void _addTask() {

    if (_controller.text.trim().isEmpty) return;

    setState(() {

      _tasks.add({'text': _controller.text.trim(), 'done': false});

      _controller.clear();

    });

  }


  void _toggleTask(int index) {

    setState(() {

      _tasks[index]['done'] = !_tasks[index]['done'];

    });

  }


  void _deleteTask(int index) {

    setState(() {

      _tasks.removeAt(index);

    });

  }


  @override

  Widget build(BuildContext context) {

    return Scaffold(

      backgroundColor: const Color(0xFFF7F6FB),

      appBar: AppBar(

        title: const Text(

          '✨ To-Do List',

          style: TextStyle(fontWeight: FontWeight.bold, color: Color(0xFF5A4FCF)),

        ),

        centerTitle: true,

        elevation: 0,

        backgroundColor: Colors.transparent,

      ),

      body: Padding(

        padding: const EdgeInsets.all(16),

        child: Column(

          children: [

            // Input field

            Row(

              children: [

                Expanded(

                  child: TextField(

                    controller: _controller,

                    decoration: InputDecoration(

                      hintText: 'Tambahkan tugas...',

                      filled: true,

                      fillColor: Colors.white,

                      contentPadding: const EdgeInsets.symmetric(horizontal: 16),

                      border: OutlineInputBorder(

                        borderRadius: BorderRadius.circular(12),

                        borderSide: BorderSide.none,

                      ),

                    ),

                    onSubmitted: (_) => _addTask(),

                  ),

                ),

                const SizedBox(width: 10),

                FloatingActionButton.small(

                  onPressed: _addTask,

                  backgroundColor: const Color(0xFF7C73E6),

                  child: const Icon(Icons.add, color: Colors.white),

                ),

              ],

            ),

            const SizedBox(height: 20),

            Expanded(

              child: _tasks.isEmpty

                  ? const Center(

                      child: Text(

                        'Belum ada tugas 🌸',

                        style: TextStyle(color: Colors.black54, fontStyle: FontStyle.italic),

                      ),

                    )

                  : ListView.builder(

                      itemCount: _tasks.length,

                      itemBuilder: (context, index) {

                        final task = _tasks[index];

                        return Dismissible(

                          key: ValueKey(task),

                          direction: DismissDirection.startToEnd,

                          onDismissed: (_) => _deleteTask(index),

                          background: Container(

                            alignment: Alignment.centerLeft,

                            padding: const EdgeInsets.only(left: 20),

                            decoration: BoxDecoration(

                              color: Colors.redAccent.shade100,

                              borderRadius: BorderRadius.circular(12),

                            ),

                            child: const Icon(Icons.delete, color: Colors.white),

                          ),

                          child: Container(

                            margin: const EdgeInsets.symmetric(vertical: 6),

                            decoration: BoxDecoration(

                              color: Colors.white,

                              borderRadius: BorderRadius.circular(12),

                              boxShadow: [

                                BoxShadow(

                                  color: Colors.black12,

                                  blurRadius: 5,

                                  offset: const Offset(0, 3),

                                ),

                              ],

                            ),

                            child: ListTile(

                              leading: Checkbox(

                                activeColor: const Color(0xFF9C8CFC),

                                value: task['done'],

                                onChanged: (_) => _toggleTask(index),

                              ),

                              title: Text(

                                task['text'],

                                style: TextStyle(

                                  fontSize: 16,

                                  decoration: task['done']

                                      ? TextDecoration.lineThrough

                                      : TextDecoration.none,

                                  color: task['done']

                                      ? Colors.grey

                                      : const Color(0xFF4B4A6A),

                                ),

                              ),

                              trailing: IconButton(

                                icon: const Icon(Icons.delete_outline,

                                    color: Color(0xFFEB6F92)),

                                onPressed: () => _deleteTask(index),

                              ),

                            ),

                          ),

                        );

                      },

                    ),

            ),

          ],

        ),

      ),

    );

  }

}




💡 Apa itu Flutter?

Flutter adalah framework buatan Google yang digunakan untuk membuat aplikasi mobile, web, dan desktop dari satu basis kode.
Kelebihannya adalah UI cantik, performa cepat, dan mudah dipelajari — cocok banget buat kamu yang suka desain clean dan modern.


🧠 Tentang Proyek Ini

Dalam proyek kecil ini, kita akan membuat aplikasi To-Do List sederhana dengan fitur:

  • Tambah tugas 📝

  • Centang tugas yang sudah selesai ✅

  • Hapus tugas ❌

  • Desain lembut dan elegan 🌸

Aplikasi ini cocok untuk pemula yang ingin belajar dasar StatefulWidget, ListView, dan State Management sederhana di Flutter.


💻 Kode Lengkap

Kamu bisa menyalin dan menjalankan kode ini langsung di dartpad.dev:

// [tempelkan kode Flutter yang sudah kamu buat di sini]

🌈 Hasil Akhir

Setelah dijalankan, kamu akan mendapatkan aplikasi To-Do List yang clean dan cantik.
Kamu bisa menambahkan tugas baru, menandai tugas yang selesai, dan menghapusnya dengan mudah.


📚 Kesimpulan

Dengan Flutter, kamu bisa membuat aplikasi yang menarik hanya dengan beberapa baris kode.
Proyek To-Do List ini adalah langkah awal yang bagus untuk memahami dasar pengembangan aplikasi dengan Flutter.
Jangan lupa kembangkan lagi dengan fitur seperti penyimpanan lokal atau tema gelap ya! 🌙


💬 Penutup

Semoga tutorial ini bermanfaat buat kamu yang ingin belajar Flutter dengan cara yang menyenangkan.
Kalau kamu suka artikel ini, jangan lupa bagikan ke teman-temanmu dan tulis komentar di bawah 💜

Selamat ngoding & tetap semangat belajar! 🚀

Komentar

Postingan populer dari blog ini

ARTIKEL PENGEMBANGAN GIM

Membuat Halaman Data Kelompok Belajar dengan Flutter dan Dart

Eksperimen Layout Dasar Flutter