Di tabel sqlite saya memiliki kolom nol. Saya membuat kueri untuk mendapatkan semua data dari kolom tertentu dan memetakan datanya ke List<Map<String, dynamic>>:

List<Map<String, dynamic>> maps = List();
final db = await database;
var result = await db.query('tools_table', where: 'LifeCycle <> 2');
result.forEach((val) {
  maps.add(val);
});

Tetapi kolom null diubah menjadi "null" dan ketika saya ingin menghapus daftar peta menjadi objek:

ToolsModel.fromJson(Map<String, dynamic> json) {
...
    if (json['triggerImagesUrl'] != null) {
      triggerImagesUrl = List<String>();
      var job = jsonDecode(json['triggerImagesUrl']);
      job.forEach((v) {
        triggerImagesUrl.add(v);
      });
    }

Saya mendapatkan kesalahan karena json['TriggerUrl'] adalah nut null, ini adalah "null" dan var job = jsonDecode(json['TriggerUrl']); job menjadi null dan job.forEach menyebabkan pengecualian.

Mengapa kolom nol diubah menjadi "null" dan bagaimana saya bisa mencegah tindakan ini?

1
Cyrus the Great 3 Mei 2020, 12:25

1 menjawab

Jawaban Terbaik

Coba ini di dart pad

import 'dart:convert';
void main() {
  List<String> urls = null;
  var d = jsonEncode(urls);
  print(d  is String);
  print(jsonDecode(d) is String);
}

Anda akan mendapatkan output berikut

true
false

Jadi jsonEncode(urls) mengembalikan null string jika urls adalah null.
Ubah ini

Map<String, Object> mapToCacheActivatedToolItem(LogData.Data item) {
    var newMap = {
      "TriggerImagesUrl": item.triggerImagesUrl == null ? null : jsonEncode(urls)
    };
    return newMap;
  }
1
Sanjay Sharma 3 Mei 2020, 11:47