学习笔记:Flutter Dart 之“信号量”

首先明确一点,Dart语言是单线程模型,没有信号量,但是有类似信号的实现Completer

起因

在学习Flutter,在学习Dart。我的学习方式不是那种系统性学习,而是在实践中学习,理论总是要实践,于是自己给自己制造场景。

我自己用Flutter开发一个工具应用,在线/离线查数据表。这个工具应用开发所需常见技能:网络、文件、数据库、UI交互。

扯远了,先说一个场景,应用启动后要打开数据库,并且随时可能出现增删改查的操作

  • A 、应用启动后,我用sqflite打开数据库(异步操作)
  • B 、应用启动后,首页是历史数据列表,触发数据库查询操作(异步操作)

问题来了,A,B都是异步操作,其触发顺序不固定、操作结果都是Futurer,如何保证A、B的逻辑顺序----打开数据库完毕,然后查询数据库 ?

过程 (使用Future)

Future是未来操作的输出,直白的说就是一个结果,但是这个结果来自可能还没有执行的任务,也就是说这个结果未必立即有效。

把数据库操作的那个例子简化为示意代码:

import 'package:sqflite/sqflite.dart';
import 'dart:async';

//数据库句柄
Database g_db = null;

//打开数据库
void openDb() async
{
   
	 g_db =  await openDatabase( "数据库路径",
                  onCreate:(Database db, int version) aysnc {
   
                         await db.execute('CREATE TABLE Offline xxxxx)');
                        },
                  version: 1,
                );
}

//查询数据库
List queryDb() async
{
   
	List result = await g_db.query("Offline
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值