嵌套的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']));
});
}
有两种方法:
第一:
在dbhelper定义一个函数,所有收益
dep_id
从 表(getDepartmentIds
和其他功能,对于该特定ID返回一个部门的对象(模型)。(getDepartment
)现在,我
FutureBuilder
彼此之间需要两个,一个用于获取id,另一个用于获取部门模型。
第二个:
- 定义,首先取IDS则该函数的每个ID都是马培德到系车型内部的功能。(
getEmployeeDepartments
) - 所以我需要一个
FutureBuilder
。
哪一个更好??我应该让FutureBuilders处理它还是应该施加压力dbHelper
以应对它?
如果我使用第一种方法,则必须(据我所能想象的那样!)将第二个以后的调用(基于id()获取
Object(model)的那个getDepartment
)放在build
函数上,建议不要这样做所以。
第二个问题是它在中进行了许多嵌套调用dbHelper
。
我用来ListView.builder
表演。
我检查了一些数据,但无法弄清楚哪个更好。我猜这取决于flutter和sqlite(sqflite)。
哪个更好,或者有更好的方法?
回答:
鉴于在此示例中看不到太多代码,我将对您的问题做一个高级回答。
- 马上,这部分内容就突出了:“从Employee表中返回所有dep_id”
- 我想从头开始说,因为“全部返回”通常都不是一个好的解决方案,尤其是因为您提到表中有很多行。
- 由于相同的原因,我不确定与第一种方法相比在性能上有什么不同,这似乎也很糟糕。我认为这只是改变您的UI逻辑而已。
- 您将对 表进行查询,并加入 表。
- 您将在UI上实现分页,并将值从第一步开始传递给查询。
- 从根本上讲,您将需要以下变量:Take,Skip,HasMore
- 取: 请求每个查询的项目数
- 跳过: 下一个查询要跳过的项目数,即当前驱动用户界面的列表中当前拥有的项目数的大小。
- HasMore: 您可以在每个查询的响应中设置此项,以使UI知道是否还有更多项目。
- 向下滚动列表时,到达底部时,您将请求更多物品。
最初发出一个查询,例如:取: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