Main Menu

Membuat Aplikasi To-Do List dengan Flutter dan Supabase #7: Membuat Fungsi Insert Data ke Database


👍 0 ❤️ 0 💡 0 🔥 0 🙌 0 🥳 0
Membuat Aplikasi To-Do List dengan Flutter dan Supabase #7: Membuat Fungsi Insert Data ke Database

Halo teman-teman pada tutorial sebelumnya kita sudah bisa menampilkan data dari database supaase, sekarang kita akan membuat fungsi untuk insert data ke dalam database.

Membuat Fungsi Insert Data

Sekarang teman-teman buka file todo_screen.dart, lalu kita tambahkan kode berikut atau rubah keseluruhan kode menjadi berikut:

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:todo_list_supabase/cubit/todo_cubit.dart';
import 'package:todo_list_supabase/model/todo_model.dart';

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

  @override
  State<TodoScreen> createState() => _TodoScreenState();
}

class _TodoScreenState extends State<TodoScreen> {
  final TextEditingController titleController = TextEditingController();
  @override
  void initState() {
    context.read<TodoCubit>().fetchTodos(); // Fetch todos on init
    super.initState();
  }

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Todo List')),
      body: Column(
        children: [
          Padding(
            padding: const EdgeInsets.all(16),
            child: Row(
              children: [
                Expanded(
                  child: TextField(
                    controller: titleController,
                    decoration: const InputDecoration(
                      hintText: 'Tambahkan tugas baru',
                      border: OutlineInputBorder(),
                    ),
                    onSubmitted: (value) {
                      _addTodo(); // Call the method to add todo
                    },
                  ),
                ),
                const SizedBox(width: 8),
                ElevatedButton(
                  onPressed: () {
                    _addTodo(); // Call the method to add todo
                  },
                  child: const Text('Tambah'),
                ),
              ],
            ),
          ),
          Expanded(
            child: RefreshIndicator(
              onRefresh: () async {
                // TODO: Refresh Data Todo List
              },
              child: BlocBuilder<TodoCubit, List<TodoModel>>(
                builder: (context, state) {
                  final todos = state;
                  if (todos.isEmpty) {
                    return const Center(
                      child: Text(
                        'Belum ada tugas',
                        style: TextStyle(fontSize: 18),
                      ),
                    );
                  }
                  return ListView.builder(
                    itemCount: todos.length, // TODO: Ganti dengan jumlah todo
                    itemBuilder: (context, index) {
                      final todo = todos[index];
                      return ListTile(
                        title: Text(
                          todo.title,
                          style: TextStyle(
                            decoration: todo.isDone
                                ? TextDecoration.lineThrough
                                : null,
                          ),
                        ), // TODO: Ganti dengan data todo
                        leading: Checkbox(
                          value: todo.isDone,
                          onChanged: (_) {
                            // TODO: Update status todo
                          },
                        ),
                        trailing: IconButton(
                          icon: const Icon(Icons.delete, color: Colors.red),
                          onPressed: () {
                            // TODO: Hapus data todo
                          },
                        ),
                      );
                    },
                  );
                },
              ),
            ),
          ),
        ],
      ),
    );
  }

  void _addTodo() {
    if (titleController.text.trim().isNotEmpty) {
      context.read<TodoCubit>().addTodo(titleController.text.trim());
      titleController.clear();
      FocusScope.of(context).unfocus();
    }
  }
}

Perubahan kode di atas yang pertama yaitu kita membuat variable titleController untuk controller pada widget TextField(),

final TextEditingController titleController = TextEditingController();

Lalu kita juga membuat sebuah method dengan nama _addTodo, method ini digunakan untuk memanggil method addTodo yang ada di TodoCubit.

 void _addTodo() {
    if (titleController.text.trim().isNotEmpty) {
      context.read<TodoCubit>().addTodo(titleController.text.trim());
      titleController.clear();
      FocusScope.of(context).unfocus();
    }
  }

lalu method _addTodo tersebut kita panggil di widget ElevatedButton() pada parameter onPressed:

Padding(
	padding: const EdgeInsets.all(16),
  child: Row(
  children: [
  	Expanded(
  		child: TextField(
  			controller: titleController,
  			decoration: const InputDecoration(
  			hintText: 'Tambahkan tugas baru',
  			border: OutlineInputBorder(),
  			),
  			onSubmitted: (value) {
  				_addTodo(); // Call the method to add todo
  			},
  		),
  	),
  	const SizedBox(width: 8),
  	ElevatedButton(
  		onPressed: () {
  			_addTodo(); // Call the method to add todo
  		},
  		child: const Text('Tambah'),
			),
		],
	),
),

Langkah selanjutnya kita coba jalan kan, dan coba kita isi form, jika berhasil nanti akan muncul data baru dari daftar todo list. Kurang lebih seperti berikut:

Kesimpulan

Pada tutorial kali ini kita sudah paham bagaimana cara insert todo List ke dalam database dan langsung menampilkan data tersebut. Langkah selanjutnya kita akan membuat fungsi centang pada daftar Todo List.

Ebook Premium

Membangun Dashboard dan Aplikasi Android Food Store Dengan Laravel Filament, Flutter dan Payment Gateway

Membangun Aplikasi Donasi Online dengan Laravel, Flutter dan Payment Gateway


Faisal Mahadi
Mobile Apps Developer | Android Enthusiast | Keep Learning | Android Dev Serta Owner Hariankoding.com

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami