sqlite - 我无法在 Flutter 中更新来自 Sqflite 的数据(widget.id 问题)
问题描述
我使用 Sqlite 找到了更新问题的原因。它与widget.id
void 函数有关。因为函数不是小部件,所以widget.id
总是被调用null
。有没有办法解决它或可以用来代替的东西widget.id
?提前致谢。
Widget vocaBuilder() {
return FutureBuilder(
builder: (context, snap) {
return ListView.builder(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemCount: snap.data.length,
scrollDirection: Axis.vertical,
itemBuilder: (context, index) {
Voca voca = snap.data[index];
return GestureDetector(
onTap: () {
editPage(voca.id);
},
...
}
void editPage(String id){
...
Padding(
padding:
EdgeInsets.only(top: 20, left: 270, bottom: 5),
child: FlatButton(
child: Text('update',
style: TextStyle(fontSize: 22,
fontWeight: FontWeight.w800)),
onPressed: () {
setState(() {
updateDB();
});
})),
FutureBuilder<List<Voca>>(
future: loadEditVoca(id),
builder: (BuildContext context,
AsyncSnapshot<List<Voca>> snapshot) {
if (snapshot.data == null ||
snapshot.data == []) {
return Container();
} else {
Voca voca = snapshot.data[0];
word = voca.word;
final TextEditingController tecWord =
TextEditingController();
tecWord.text = voca.word;
final TextEditingController tecMeaning =
TextEditingController();
tecMeaning.text = voca.meaning;
meaning = voca.meaning;
createTime = voca.createTime;
....
)));
});
});
}
}
Future<void> updateDB() async {
DBHelper sd = DBHelper();
var fido = Voca(
id: widget.id,// => always null. need to fix it.
word: this.word,
meaning: this.meaning,
createTime: this.createTime);
await sd.updateVoca(fido);
print(await sd.vocas());
Navigator.pop(_context);
}
解决方案
你可以id
从editPage
到updateDB
。
updateDB(id);
并为您的updateDB
功能
Future<void> updateDB(String id) async {
...
var fido = Voca(
id: id, // => use the id parameter
word: this.word,
meaning: this.meaning,
createTime: this.createTime);
.....
}
推荐阅读
- python - matplotlib:再次单击按钮后删除滑块
- r - 为什么这个 Rvest 没有返回任何值?
- sqlite - SQLite - 防止多次评估缓慢的 CTE
- google-cloud-platform - Terraform:如何使用堆栈驱动程序指标在 GCP 中自动缩放托管实例组
- android - 模拟器:恐慌:缺少“x86”CPU 的模拟器引擎程序。在 Windows10 上
- python - 将距离对转换为距离矩阵以用于层次聚类
- android - 仅针对由 NoclassDefFound 错误引起的特定活动使用 AppcompatTextView 膨胀 exeption
- matlab - 绘制带有孔的不规则 xy 数据的轮廓
- selenium-webdriver - 如何在默认情况下排除一个标签,但在调用另一个标签时也包括这些标签?
- mysql - 前缀最佳匹配 MySQL