kode program aplikasi to do list flutter

 


Berikut contoh kode Flutter sederhana untuk aplikasi To-Do List dengan fitur CRUD menggunakan SQLite. Struktur dasar ini mencakup:


Model Task


Database helper


UI untuk menampilkan dan menambahkan tugas



1. Tambahkan dependencies di pubspec.yaml:


dependencies:

  flutter:

    sdk: flutter

  sqflite: ^2.3.0

  path: ^1.8.3


2. Buat model task.dart


class Task {

  int? id;

  String title;


  Task({this.id, required this.title});


  Map<String, dynamic> toMap() {

    return {

      'id': id,

      'title': title,

    };

  }


  factory Task.fromMap(Map<String, dynamic> map) {

    return Task(

      id: map['id'],

      title: map['title'],

    );

  }

}


3. Buat helper database db_helper.dart


import 'package:sqflite/sqflite.dart';

import 'package:path/path.dart';

import 'task.dart';


class DBHelper {

  static final DBHelper _instance = DBHelper._();

  static Database? _database;


  DBHelper._();


  factory DBHelper() => _instance;


  Future<Database> get database async {

    _database ??= await initDB();

    return _database!;

  }


  Future<Database> initDB() async {

    String path = join(await getDatabasesPath(), 'todo.db');

    return openDatabase(

      path,

      version: 1,

      onCreate: (db, version) {

        return db.execute('''

          CREATE TABLE tasks (

            id INTEGER PRIMARY KEY AUTOINCREMENT,

            title TEXT

          )

        ''');

      },

    );

  }


  Future<int> insertTask(Task task) async {

    final db = await database;

    return await db.insert('tasks', task.toMap());

  }


  Future<List<Task>> getTasks() async {

    final db = await database;

    final List<Map<String, dynamic>> maps = await db.query('tasks');

    return List.generate(maps.length, (i) => Task.fromMap(maps[i]));

  }


  Future<int> updateTask(Task task) async {

    final db = await database;

    return await db.update('tasks', task.toMap(), where: 'id = ?', whereArgs: [task.id]);

  }


  Future<int> deleteTask(int id) async {

    final db = await database;

    return await db.delete('tasks', where: 'id = ?', whereArgs: [id]);

  }

}


4. Buat main.dart


import 'package:flutter/material.dart';

import 'task.dart';

import 'db_helper.dart';


void main() {

  runApp(const MyApp());

}


class MyApp extends StatelessWidget {

  const MyApp({super.key});

  

  @override

  Widget build(BuildContext context) {

    return MaterialApp(

      title: 'To-Do List SQLite',

      theme: ThemeData(primarySwatch: Colors.blue),

      home: const TodoListPage(),

    );

  }

}


class TodoListPage extends StatefulWidget {

  const TodoListPage({super.key});


  @override

  State<TodoListPage> createState() => _TodoListPageState();

}


class _TodoListPageState extends State<TodoListPage> {

  final DBHelper _dbHelper = DBHelper();

  final TextEditingController _controller = TextEditingController();

  List<Task> _tasks = [];


  @override

  void initState() {

    super.initState();

    _refreshTasks();

  }


  void _refreshTasks() async {

    final data = await _dbHelper.getTasks();

    setState(() {

      _tasks = data;

    });

  }


  void _addTask(String title) async {

    if (title.isEmpty) return;

    await _dbHelper.insertTask(Task(title: title));

    _controller.clear();

    _refreshTasks();

  }


  void _deleteTask(int id) async {

    await _dbHelper.deleteTask(id);

    _refreshTasks();

  }


  @override

  Widget build(BuildContext context) {

    return Scaffold(

      appBar: AppBar(title: const Text('To-Do List')),

      body: Column(

        children: [

          Padding(

            padding: const EdgeInsets.all(16.0),

            child: Row(

              children: [

                Expanded(child: TextField(controller: _controller, decoration: const InputDecoration(hintText: 'Enter task'))),

                IconButton(

                  icon: const Icon(Icons.add),

                  onPressed: () => _addTask(_controller.text),

                ),

              ],

            ),

          ),

          Expanded(

            child: ListView.builder(

              itemCount: _tasks.length,

              itemBuilder: (context, index) {

                final task = _tasks[index];

                return ListTile(

                  title: Text(task.title),

                  trailing: IconButton(

                    icon: const Icon(Icons.delete),

                    onPressed: () => _deleteTask(task.id!),

                  ),

                );

              },

        

    ),

          ),

        ],

      ),

    );

  }

}



---


Kalau kamu butuh fitur edit (update), halaman detail, atau tampilan lebih estetik, tinggal bilang ya — bisa aku bantu lanjutin.


Komentar

Posting Komentar

Postingan populer dari blog ini

✨ Statement dan Expression dalam Dart (Flutter)