Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
颤振创建sqlite数据库帮助器,以仅返回1个字符串或任何其他单一对象类型_Sqlite_Dart_Flutter - Fatal编程技术网

颤振创建sqlite数据库帮助器,以仅返回1个字符串或任何其他单一对象类型

颤振创建sqlite数据库帮助器,以仅返回1个字符串或任何其他单一对象类型,sqlite,dart,flutter,Sqlite,Dart,Flutter,在Android(Javabase)中使用sqlite非常简单。我可以使用自定义数据库帮助器以这种方式检索数据列表或单个数据 即: public String getLastNetPrintUrl() { String lastPrintUrl; String lastId = "SELECT * FROM " + TABLE_NET_PRINT + " WHERE " + COL_NETPRINT_ID + " = (SELECT MAX(" +

在Android(Javabase)中使用sqlite非常简单。我可以使用自定义数据库帮助器以这种方式检索数据列表或单个数据

    public String getLastNetPrintUrl() {
    String lastPrintUrl;
    String lastId = "SELECT * FROM " + TABLE_NET_PRINT + " WHERE " + COL_NETPRINT_ID +
            " = (SELECT MAX(" + COL_NETPRINT_ID + ") FROM " + TABLE_NET_PRINT + ")";
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(lastId, null);
    if(cursor.moveToFirst()) {
        lastPrintUrl = cursor.getString(4);
    } else {
        lastPrintUrl = "";
    }
    db.close();
    return lastPrintUrl;
}
在上面的代码中,我只想得到最后记录的URL。然后在活动中,我可以打电话

String netPrintUrl = dbhelper.getLastNetPrintUrl();
如何在Flutter中使用sqflite实现相同的目标

到目前为止我所做的

  Future<String> getLastUrl() async {
var dbClient = await db;
String lastUrlQuery = 'SELECT * FROM device WHERE id = (SELECT MAX( id ) FROM device)';
var dbQuery = await dbClient.rawQuery(lastUrlQuery);
if (dbQuery.length > 0) {
  String lastUrl = dbQuery.first.values.toString();
  return lastUrl;
} else {
  return '192.168.11.17:7700';
}
Future的值类型不能分配给“String”类型的变量

我对弗利特还是个新手,找不到任何关于我上述意图的参考资料。如有任何提示,我们将不胜感激

*编辑:

该“设备”表仅包含2列,即整数唯一id和url(作为文本)

编辑:代码的最后一部分

final\u formKey=new GlobalKey();
final _urlController=新文本编辑控制器();
DatabaseHelper dbhelper=DatabaseHelper();
字符串设备URL;
Future getUrl()异步{
atiDeviceUrl=await dbhelper.getLastUrl();
_urlController.text=atiDeviceUrl;
打印('atiDeviceUrl:$atiDeviceUrl');
}
@凌驾
void initState(){
getUrl();
super.initState();
}

您需要熟悉Dart

当调用异步()函数(如
dbhelper.getLastUrl()
)时,函数体实际上不会立即执行

相反,将向您返回一个对象,并在您调用函数的地方继续执行。异步函数将在稍后的不确定时间执行。这就是为什么结果不能是
字符串
,而是
未来

因此,要真正获得函数的
字符串
结果,并在同步代码中使用它做任何有用的事情,您必须等待
未来
使用的完成。例如:

dbhelper.getLastUrl().then((最后一个字符串lastURL){
打印(“最后一个URL是:$lastURL”);
});
但是,如果从另一个
async
函数调用
dbhelper.getLastUrl()
,只需添加关键字,事情看起来就简单多了:

final String lastURL=await dbhelper.getLastUrl();
打印(“最后一个URL是:$lastURL”);
实际上,这与前面的示例基本相同,但Dart会自动为您生成回调处理程序代码

现在,好消息是,如果您需要从按钮按下回调处理程序调用
async
函数,通常只需将magic
async
关键字添加到回调函数中,一切都非常简单。例如,尝试以下方法:

RaisedButton(
子:文本(“获取最后一个URL”),
onPressed:()异步{
最后一个字符串lastURL=await dbhelper.getLastUrl();
打印(“最后一个URL是:$lastURL”);
},
)

Ah,需要在dart中使用异步深入。很好的暗示。
String lastUrl = dbhelper.getLastUrl;
final _formKey = new GlobalKey<FormState>();
final _urlController = new TextEditingController();

DatabaseHelper dbhelper = DatabaseHelper();
String atiDeviceUrl;

Future getUrl() async{
  atiDeviceUrl = await dbhelper.getLastUrl();
  _urlController.text = atiDeviceUrl;
  print('atiDeviceUrl: $atiDeviceUrl');
}

@override
void initState() {
  getUrl();
  super.initState();
}