Search code examples
jsonflutterdartserialization

Unhandled Exception: type 'int' is not a subtype of type 'String?'


class Task {
  int? id;
  String? title;
  String? description;
  int? isCompleted;
  String? date;
  String? startTime;
  String? endTime;
  int? color;
  int? remind;
  String? repeat;

  Task({
    this.id,
    this.title,
    this.description,
    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'];
    description = json['description'];
    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['date'] = this.date;
    data['description'] = this.description;
    data['isCompleted'] = this.isCompleted;
    data['startTime'] = this.startTime;
    data['endTime'] = this.endTime;
    data['color'] = this.color;
    data['remind'] = this.remind;
    data['repeat'] = this.repeat;
    return data;
  }
}

class TaskController extends GetxController {
  @override
  void onReady() {
    super.onReady();
  }

  var taskList = <Task>[].obs;

  Future<int?> addTask({Task? task}) async {
    return await DatabaseHelper.insert(task!);
  }

  void getTasks() async {
    List<Map<String, dynamic>>? tasks = await DatabaseHelper.query();
    taskList.assignAll(tasks!.map((data) => new Task.fromJson(data)).toList());
  }

  void delete(Task task) {
    DatabaseHelper.delete(task);
    getTasks();
  }

  void updateTask(int id) {
    DatabaseHelper.update(id);
    getTasks();
  }
}

error message

task_model.dart:28 >>> title = json['title'];
task_controller.dart:19 >>> taskList.assignAll(tasks!.map((data) => new Task.fromJson(data)).toList());

This code-block was working yesterday, I don't understand what is the problem and how can I fix it at all. Help me to fix this problem please. Thank you for your time.


Solution

  • class Task {
      Task({
        this.id,
        this.title,
        this.description,
        this.isCompleted,
        this.date,
        this.startTime,
        this.endTime,
        this.color,
        this.remind,
        this.repeat,
      });
    
      Task.fromJson(Map<String, dynamic> json) {
        id = json['id'] as int?;
        title = json['title']?.toString() ?? '';
        description = json['description']?.toString() ?? '';
        isCompleted = json['isCompleted'] as int? ?? 0;
        date = json['date'];
        startTime = json['startTime'];
        endTime = json['endTime'];
        color = json['color'];
        remind = json['remind'];
        repeat = json['repeat'];
      }
      int? id;
      String? title;
      String? description;
      int? isCompleted;
      String? date;
      String? startTime;
      String? endTime;
      int? color;
      int? remind;
      String? repeat;
    
      Map<String, dynamic> toJson() {
        final Map<String, dynamic> data = <String, dynamic>{};
        data['id'] = id;
        data['title'] = title;
        data['date'] = date;
        data['description'] = description;
        data['isCompleted'] = isCompleted;
        data['startTime'] = startTime;
        data['endTime'] = endTime;
        data['color'] = color;
        data['remind'] = remind;
        data['repeat'] = repeat;
        return data;
      }
    }
    
    class TaskController extends GetxController {
      @override
      void onReady() {
        super.onReady();
      }
    
      Rx<List<Task>> taskList = List<Task>.empty(growable: true).obs;
    
      Future<int?> addTask({Task? task}) async {
        return await DatabaseHelper.insert(task!);
      }
    
      Future<void> getTasks() async {
        final List<Map<String, dynamic>>? tasks = await DatabaseHelper.query();
        taskList.assignAll(tasks?.map(Task.fromJson).toList() ?? []);
      }
    
      void delete(Task task) {
        DatabaseHelper.delete(task);
        getTasks();
      }
    
      void updateTask(int id) {
        DatabaseHelper.update(id);
        getTasks();
      }
    }