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

时间:2019-10-30 06:54:58

标签: flutter dart sqflite

我正在使用一些sqflite对数据库进行查询,并提取表的特定名称,例如:我有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;
}

但这就是扑扑所说的:

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

和调试控制台:

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

因此,我需要一种将用户列表中的值与带有我声明为'X'的变量的字符串进行比较的方法。

尝试使用this problem的引用

这是我尝试过的:

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;
}

并返回完全相同的结果:类型'Future'不是类型'int'的子类型

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

1 个答案:

答案 0 :(得分:0)

这是一条路的地狱,但是我在大家的帮助下成功了,但是最后一块是@mutantkeyboard,我得到的是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与表进行比较,然后您可以将代码修改为如下形式:

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;
}