如何将 Future<dynamic> 转换为 dart:flutter 中的字符串

how to transform a Future<dynamic> to string in dart:flutter

我正在使用一些 sqflite 对数据库进行查询,并提取 table 的特定名称,例如:我有 3 个名字,Roberto、Ricardo 和 Andres,我想只获取 Roberto 的名字,这就是我正在做的事情:

loginLogic() async {
  var X = 'Roberto';
  final db = await database;
  List<Map> result = await db.rawQuery('SELECT * FROM Usuario WHERE username=?', [X]);

所以现在,我想将此结果与另一个结果进行比较以执行 "if" 函数,就像这样:

if(result==X){
  return 1;
} else {
  return 0;
}

但这就是 flutter 所说的:

List<Map<dynamic, dynamic>> result
Equality operator '==' invocation with references of unrelated

和调试控制台:

type 'Future<dynamic>' is not a subtype of type 'int'

所以我需要一种方法来比较用户列表产生的值与我声明的变量字符串 'X'。

尝试使用

的引用

这是我试过的:

loginLogicpar() async {
  var X = 'Giova';
  final db = await database;
  final result = await db.rawQuery('SELECT * FROM Usuario WHERE username=?', [X]);
  return result;
}

loginLogic() async {
  var X = 'Giova';
  final user = await loginLogicpar();
  if(user==X){
    return 1;
  }
  return 0;
}

与returns完全相同的结果:类型'Future'不是类型'int'

的子类型

添加了the code以便您可以复制它,只要确保您的依赖项上有 sqflite。

这是一条地狱般的道路,但我在你们所有人的帮助下完成了它,但最后一块是@mutantkeyboard,我得到的是 table 中不同元素的列表Sqflite 的,但在用变量和 .first 函数转换它之后,我将它转换为另一个变量!这是我做的:

loginLogic() async {
  final db = await database;
  var table = await db.rawQuery("SELECT MAX(id)+1 as id FROM Usuario");
  int id = table.last["id"];
  for(var i=1; i<id; i++){
    var result = await db.rawQuery('SELECT username FROM Usuario WHERE id=?', [i]);
    String Y = result.first["username"];
    if(Y=='Roberto'){
      return 1;
    }
  }
  return 0;
}

如果你想将它与外部的另一个变量进行比较,例如,本地登录的身份验证(这就是我所做的,只是为了教育目的,我永远不会建议你输入你的用户名和密码在您的本地软件中)并将 textfield.text 与 table 进行比较,然后您可以将代码修改为如下内容:

loginLogic(String field) async {
  final db = await database;
  var table = await db.rawQuery("SELECT MAX(id)+1 as id FROM Usuario");
  int id = table.last["id"];
  for(var i=1; i<id; i++){
    var result = await db.rawQuery('SELECT username FROM Usuario WHERE id=?', [i]);
    String Y = result.first["username"];
    if(Y==field){
      return 1;
    }
  }
  return 0;
}