Как получить значения из Future <List>во Flutter - PullRequest
0 голосов
/ 21 июня 2020

Я хочу получить значение из базы данных sqflite в список во флаттере. Вот мой класс модели.


class Task {
  final int id;
  final String title;
  final String description;
  final String dateTime;

  Task({this.id, this.title, this.description, this.dateTime});

  
  Map<String, dynamic> toMap() {
    return {
      'id':id,
      'title': title,
      'description': description,
      'dateTime': dateTime,
    };
  }

Это класс databaseHelper для вставки и извлечения данных.


class DatabaseHelper {
  DatabaseHelper._();
  static final DatabaseHelper db = DatabaseHelper._();

  Database _database;

  Future<Database> get database async {
    if (_database != null) return _database;
    _database = await _createDatabase();
    return _database;
  }

  Future<Database> _createDatabase() async {
    return await openDatabase(join(await getDatabasesPath(), 'task.db'),
        onCreate: (db, version) {
      return db.execute(
        "CREATE TABLE tasks(id INTEGER PRIMARY KEY AUTO_INCREMENT , title TEXT, description TEXT, dateTime TEXT)",
      );
    }, version: 1);
  }


Future<List<Task>> tasks() async {
 
  final Database db = await database;

  final maps = await db.query('tasks');

  return List.generate(maps.length, (i) {
    return Task(
      id: maps[i]['id'],
      title: maps[i]['title'],
      description: maps[i]['description'],
      dateTime: maps[i]['dateTime']
    );
  });
}



Future<void> insertTask(Task task) async {
  final db = await database;


  await db.insert(
    'tasks',
    task.toMap(),
    conflictAlgorithm: ConflictAlgorithm.replace,
  );
}
}

Когда я использую print (await tasks ()), он показывает [Instance of 'Task ', Экземпляр' Задачи '] в консоли. это ошибка ?. Я хочу знать, как получить значения из базы данных с помощью функции task () в классе DatabaseHelper.

Ответы [ 2 ]

1 голос
/ 21 июня 2020

Когда я использую print (await tasks ()), в консоли отображается [Экземпляр «Задачи», Экземпляр «Задачи»]. это ошибка?

Это происходит потому, что вы не переопределили toString(). Без toString() вы просто получите преобразование строки по умолчанию « Экземпляр XXX »:

class Example {}

void main() async {
  print(Example());  // Instance of 'Example'
}

Переопределив toString(), вы можете настроить вывод:

class Example {
  @override
  String toString() => "My custom Example!";
}

void main() async {
  print(Task());  // My custom Example!
}

Я хочу знать, как получить значения из базы данных с помощью task ()

Самый распространенный способ ожидания Future<T> во Flutter - использовать FutureBuilder<T> виджет. Это очень удобно, потому что может отображать индикатор выполнения (чтобы пользователь знал, что что-то происходит в фоновом режиме), который позже будет заменен фактическими данными

1 голос
/ 21 июня 2020

использовать конструктор future, который требует future и будет строить всякий раз, когда объект future изменяется.

...