Database empty flutter

Viewed 28

I'm getting empty string when I trying to get the titles. Please help me. Here's my source code

Here's my task.dart file

    // task.dart
    class Task {
      int? id;
      String? title;
      String? note;
      int? isCompleted;
      String? date;
      String? startTime;
      String? endTime;
      int? color;
      int? remind;
      String? repeat;
    
      Task({
        this.id,
        this.title,
        this.note,
        this.isCompleted,
        this.date,
        this.startTime,
        this.endTime,
        this.color,
        this.remind,
        this.repeat,
      });
    
      Task.fromJson(Map<String, dynamic> json) {
        id = json['id'];
        title = json['title'];
        note = json['note'];
        isCompleted = json['isCompleted'];
        date = json['date'];
        startTime = json['startTime'];
        endTime = json['endTime'];
        color = json['color'];
        remind = json['remind'];
        repeat = json['repeat'];
      }
    
      Map<String, dynamic> toJson() {
        final Map<String, dynamic> data = new Map<String, dynamic> ();
        data['id'] = this.id;
        data['title'] = this.title;
        data['note'] = this.note;
        data['isCompleted'] = this.isCompleted;
        data['date'] = this.date;
        data['startTime'] = this.startTime;
        data['endTime'] = this.endTime;
        data['color'] = this.color;
        data['remind'] = this.remind;
        data['repeat'] = this.repeat;
        return data;
      }
    }

Here's my task_controller.dart file

    import 'package:calendar_app/db/db_helper.dart';
    import 'package:calendar_app/models/task.dart';
    import 'package:get/get.dart';
    // task_controller.dart
    class TaskController extends GetxController {
      @override
      void onReady() {
        getTasks();
        super.onReady();
      }
      var taskList = <Task>[].obs;
      Future<int> addTask({Task? task}) async{
        return await DBHelper.insert(task);
      }
      void getTasks() async {
        List<Map<String, dynamic>> tasks = await DBHelper.query();
        taskList.assignAll(tasks.map((data) => new Task.fromJson(data)).toList());
      }
    }

db_helper.dart

    import 'package:calendar_app/models/task.dart';
    import 'package:sqflite/sqflite.dart';
    import 'package:path_provider/path_provider.dart';
    import 'package:path/path.dart';
    import 'dart:developer' as devtools show log;
    // db_helper.dart    
    class DBHelper {
      static Database? _db;
      static final int _version = 1;
      static final String _tableName = 'Tasks';
          static Future<void> initDb() async {
        if (_db != null) {
          return;
        }
        try {
          String _path = await getDatabasesPath() + 'tasks.db';
          _db = await openDatabase(
            _path,
            version: _version,
            onCreate: (db, version) {
              devtools.log('Creating a new one');
              return db.execute(
                "CREATE TABLE $_tableName("
                "id INTEGER PRIMARY KEY AUTOINCREMENT, "
                "title  STRING, note    TEXT, date  STRING, "
                "startTime  STRING, endTime STRING, "
                "remind INTEGER, repeat STRING, "
                "color  INTEGER, "
                "isCompleted    INTEGER)",
              );
            },
          );
        } catch (e) {
          devtools.log(e.toString());
        }
      }    
      static Future<int> insert(Task? task) async {
        devtools.log('Insert func called');
        return await _db?.insert(_tableName, task!.toJson()) ?? 1;
      }
      static Future<List<Map<String, dynamic>>> query() async {
        devtools.log('Query func called');
        return await _db!.query(_tableName);
      }
    }

When I trying to get a print statement of title it return empty. I have no idea what's happening here. Please help me.

    print(_taskController.taskList[index].note.toString());

I'm following dbstech tutorial. If anyone have the source code please let me know.

1 Answers

First in getTask function try to reset taskList by calling this:

void getTasks() async {
        taskList = [];  // <--- add this
        List<Map<String, dynamic>> tasks = await DBHelper.query();
        taskList.assignAll(tasks.map((data) => new Task.fromJson(data)).toList());
      }

Then I think you issue is your table is empty. After run your code try add something to your table then print it and see the result.

Related