Как получить элемент / значение из будущего списка - PullRequest
1 голос
/ 07 марта 2019

Я использовал SQLite для кеша. Все работает хорошо. Но я не знаю, как отобразить ценность этого обещания? (display() возвращает Future<List<Token>>)

То, что я хочу, это что-то вроде var value = display().refreshToken

печать выписки со списком значений списка

print(await display());

Database.dart

  // Open the database and store the reference
import 'dart:async';

import 'package:path/path.dart';
import 'package:reborn_next_job02/models/Token.dart';
import 'package:sqflite/sqflite.dart';

databaseToken(
    String tokenModel, String refreshTokenModel, String method) async {
  final database = openDatabase(
    join(await getDatabasesPath(), 'tokenDB.db'),
    onCreate: (db, version) {
      return db.execute(
        "CREATE TABLE tokenTable(id INTEGER PRIMARY KEY, token TEXT, refreshToken TEXT)",
      );
    },
    version: 1,
  );

  Future<void> insert(Token token) async {
    final Database db = await database;
    await db.insert(
      'tokenTable',
      token.toMap(),
      //same use insert multiple times using ConfiictAlgorithm
      conflictAlgorithm: ConflictAlgorithm.replace,
    );
  }

  Future<List<Token>> display() async {
    final Database db = await database;
    final List<Map<String, dynamic>> maps = await db.query('tokenTable');

    return List.generate(maps.length, (i) {
      return Token(
        id: maps[i]['id'],
        token: maps[i]['token'],
        refreshToken: maps[i]['refreshToken'],
      );
    });
  }

  Future<void> update(Token token) async {
    final db = await database;

    await db.update(
      'tokenTable',
      token.toMap(),
      where: "id = ?",
      whereArgs: [token.id],
    );
  }

  Future<void> delete(int id) async {
    final db = await database;

    await db.delete(
      'tokenTable',
      where: "id = ?",
      whereArgs: [id],
    );
  }


  if (method == "insert") {
    var token = Token(
      id: 1,
      token: tokenModel,
      refreshToken: refreshTokenModel,
    );
    await insert(token);
    print(await display());
  } else if (method == "update") {
    var token = Token(
      id: 1,
      token: tokenModel,
      refreshToken: refreshTokenModel,
    );
    await update(token);
    print(await display());
  }
}

Model.dart

class Token {
  int id;
  String token;
  String refreshToken;

  Token({this.id,this.token, this.refreshToken});

  factory Token.fromJson(Map<String, dynamic> json){
    return Token(
      id: json['id'],
      token:json['token'],
      refreshToken: json['refreshToken']
    );
  }
  Map<String, dynamic> toMap() {
    return {
      'id': id,
      'token': token,
      'refreshToken': refreshToken,
    };
  }

  @override
  String toString() {
    return 'Token{id: $id, token: $token, refreshToken: $refreshToken}';
  }
}

1 Ответ

0 голосов
/ 07 марта 2019

Вы можете получить это с print((await display())?.elementAt(0)?.refreshToken);

display() возвращает будущее списка, поэтому вам нужно обернуть (await display()) перед выполнением манипуляции со списком, например, получения элемента из списка. list[0] эквивалентно list.elementAt(0), но list.elementAt(0)? является нулевым и безопасным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...