背景知识视频教程
Flutter开发训练集 - 国外课栈viadean.com介绍
我们将在本文中构建的Shopping List应用程序由两个屏幕组成。 用户打开应用程序时将看到的第一个屏幕显示购物清单,如以下屏幕截图所示:
列表中的每个项目都有一个优先级,该优先级是您在前面的屏幕截图的左侧看到的数字,名称(面包店,水果等),以及在右侧的编辑按钮。 当您在列表中的任何项目上滑动时,该项目将被删除,而当您点击编辑按钮时,应用程序将显示一个编辑对话框屏幕,允许您编辑购物清单名称和优先级,如图所示。 以下屏幕截图:
当您点击其中一个购物清单时,您将进入应用程序的第二个屏幕,该屏幕显示另一个清单:所选购物清单中包含的商品。 例如,如果您点击“水果”购物清单,则会看到以下项目:桔子和苹果,如以下屏幕截图所示:
列表中的每个项目都会有一个名称,数量和注释。 该屏幕的功能将类似于第一个屏幕:您将能够通过点击浮动操作按钮(FAB)来添加新项目,通过点击编辑按钮来编辑项目,以及通过滑动来从列表中删除项目 列表中的任何元素。
使用SQLite数据库
我们将创建一个新项目,添加sqflite依赖项,并通过SQL原始查询创建数据库。 然后,我们将通过添加一些模拟数据并将其打印在调试控制台中来测试我们创建的数据库。 这将需要一些方法来从数据库中插入和检索数据。
创建模型类
由于sqflite是一个软件包,因此要在我们的项目中使用它,要执行的第一步是在pubspec.yaml文件中添加依赖项。
为了找到依赖的最新版本,请访问 sqflite | Flutter Package。 下面的代码块显示了我们将在该项目中使用的依赖项:
下面的代码块显示了我们将在该项目中使用的依赖项:
dependencies:
flutter:
sdk: flutter
sqflite: ^1.2.0
path: ^1.6.4
在lib文件夹中,创建一个名为util的子文件夹。 在这里,我们将创建一个新文件:dbhelper.dart。 该文件将包含创建数据库以及检索和写入数据的方法。
在文件的顶部,我们将导入sqflite.dart和path.dart。 path.dart是一个库,您可以使用它来处理文件路径。 这在这里很有用,因为每个平台(iOS或Android)都将文件保存在不同的路径中。 通过使用path.dart库,我们不需要知道如何在当前操作系统中保存文件,并且我们仍然可以使用相同的代码访问数据库。 导入dbhelper.dart文件顶部的path和sqflite库,如下所示:
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
创建一个可以从代码其他部分调用的类:可以预见,我们可以将其称为DbHelper,如以下代码片段所示:
class DbHelper {}
在类内部,创建两个变量:一个名为version的整数和一个名为db的数据库。 version包含一个代表数据库版本的数字,开头是1。这将使您在需要更改数据库结构中的内容时更容易更新数据库。 db将包含SQLite数据库本身。 将两个声明放在DbHelper类的顶部,如下所示:
final int version = 1;
Database db;
创建一个将打开数据库(如果存在)的方法,或者创建不存在的数据库; 我们可以称之为openDb
由于数据库操作可能需要一些时间才能执行,尤其是当它们涉及处理大量数据时,它们是异步的。 因此,openDb函数将是异步的,并返回数据库类型的Future。 让我们将以下代码放在DbHelper类的末尾:
</>
在函数内部,首先,我们需要检查db对象是否为null。 这是因为我们要避免不必要地打开数据库的新实例。 在openDb()方法中,添加以下代码:
if (db == null) {}
如果db为null,则需要打开数据库。 sqflite库具有openDatabase方法。 我们将在调用中设置三个参数:要打开的数据库的路径,数据库的版本和onCreate参数。 仅当找不到指定路径的数据库或版本不同时,才会调用onCreate参数。 下面的块中显示了此代码:
</>
onCreate参数中的函数采用两个值:数据库和版本。 在该函数中,我们调用execute()方法,该方法在数据库中执行原始SQL查询。 在这里,我们两次调用它:第一次创建列表表,第二次创建item表。
最后,让我们在openDb()方法末尾返回数据库,如下所示:
return db;