嵌套的FutureBuilder与嵌套调用以从数据库进行延迟加载

我需要在可以遵循的两种方法之间选择最佳方法。

我有一个Flutter应用程序,用于sqflite保存数据,在数据库内部,我有两个表:

+-------------+-----------------+------+

| employee_id | employee_name |dep_id|

+-------------+-----------------+------+

| e12 | Ada Lovelace | dep1 |

+-------------+-----------------+------+

| e22 | Albert Einstein | dep2 |

+-------------+-----------------+------+

| e82 | Grace Hopper | dep3 |

+-------------+-----------------+------+

CREATE TABLE Employee(

employee_id TEXT NOT NULL PRIMARY KEY,

employee_name TEXT NOT NULL ,

dep_id TEXT,

FOREIGN KEY(dep_id) REFERENCES Department(dep_id)

ON DELETE SET NULL

);

+--------+-----------+-------+

| dep_id | dep_title |dep_num|

+--------+-----------+-------+

| dep1 | Math | dep1 |

+--------+-----------+-------+

| dep2 | Physics | dep2 |

+--------+-----------+-------+

| dep3 | Computer | dep3 |

+--------+-----------+-------+

CREATE TABLE Department(

dep_id TEXT NOT NULL PRIMARY KEY,

dep_title TEXT NOT NULL ,

dep_num INTEGER,

);

我需要显示ListGrid存储在 表中的部门。我应该查看

表并从中获取部门ID,这很容易,但是在获取后,dep_id我需要从这些ID中制作一张卡,因此我需要 表中的信息。我从

表中获取的那些ID的完整信息位于 表中。

每个表中有数千行。

我有一个数据库助手类可以连接到数据库:

DbHelper 是这样的:

Future<List<String>> getDepartmentIds() async{

'fetch all dep_id from Employee table'

}

Future<Department> getDepartment(String id) async{

'fetch Department from Department table for a specific id'

}

Future<List<Department>> getEmployeeDepartments() async{

'''1.fetch all dep_id from Employee table

2.for each id fetch Department records from Department table'''

var ids = await getDepartmentIds();

List<Departments> deps=[];

ids.forEach((map) async {

deps.add(await getDepartment(map['dep_id']));

});

}

有两种方法:

第一:

  1. 在dbhelper定义一个函数,所有收益dep_id从 表(getDepartmentIds和其他功能,对于该特定ID返回一个部门的对象(模型)。( getDepartment

  2. 现在,我FutureBuilder彼此之间需要两个,一个用于获取id,另一个用于获取部门模型。

第二个:

  1. 定义,首先取IDS则该函数的每个ID都是马培德到系车型内部的功能。( getEmployeeDepartments
  2. 所以我需要一个FutureBuilder

哪一个更好??我应该让FutureBuilders处理它还是应该施加压力dbHelper以应对它?

如果我使用第一种方法,则必须(据我所能想象的那样!)将第二个以后的调用(基于id()获取

Object(model)的那个getDepartment)放在build函数上,建议不要这样做所以。

第二个问题是它在中进行了许多嵌套调用dbHelper

我用来ListView.builder表演。

我检查了一些数据,但无法弄清楚哪个更好。我猜这取决于flutter和sqlite(sqflite)。

哪个更好,或者有更好的方法?

回答:

鉴于在此示例中看不到太多代码,我将对您的问题做一个高级回答。

  1. 马上,这部分内容就突出了:“从Employee表中返回所有dep_id”
  2. 我想从头开始说,因为“全部返回”通常都不是一个好的解决方案,尤其是因为您提到表中有很多行。

  1. 由于相同的原因,我不确定与第一种方法相比在性能上有什么不同,这似乎也很糟糕。我认为这只是改变您的UI逻辑而已。

  1. 您将对 表进行查询,并加入 表。
  2. 您将在UI上实现分页,并将值从第一步开始传递给查询。
  3. 从根本上讲,您将需要以下变量:Take,Skip,HasMore
  4. 取: 请求每个查询的项目数
  5. 跳过: 下一个查询要跳过的项目数,即当前驱动用户界面的列表中当前拥有的项目数的大小。
  6. HasMore: 您可以在每个查询的响应中设置此项,以使UI知道是否还有更多项目。
  7. 向下滚动列表时,到达底部时,您将请求更多物品。

最初发出一个查询,例如:取:10,跳过:0按下UI底部时的下一个查询:取:10,跳过:10等。

示例SQL查询:

SELECT * 

FROM Employees E

JOIN Departments D on D.id = E.dept_id

order by E.employee_name

offset {SKIP#} rows

FETCH NEXT {TAKE#} rows only

希望这会有所帮助,就代码而言,我不确定您实际上要做什么。

以上是 嵌套的FutureBuilder与嵌套调用以从数据库进行延迟加载 的全部内容, 来源链接: utcz.com/qa/412747.html

回到顶部