flutter - 数据仅在我热重载或刷新后才显示
问题描述
在我的数据库中,我有一个用户表,其中存储了用户名和一些标记。当用户转到特定页面时,我想在表格中查看该数据。所以,当我首先进入该页面时,数据(用户名和标记)没有显示。但是,如果我热重载或使用按钮刷新,则数据会正确显示。我的问题是如何在不热重载或使用刷新按钮的情况下做到这一点。这是我的代码:
import 'package:flutter/material.dart';
import 'package:flutter_app/database/db_helper.dart';
import 'package:flutter_app/database/user.dart';
class ViewResult extends StatefulWidget {
@override
_ViewResult createState() => _ViewResult();
}
GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey();
class _ViewResult extends State<ViewResult> {
String tempEmail;
bool check = true;
var dbHelper;
var data = List<User>();
@override
void initState() {
setState(() {
dbHelper = DBHelper();
resultData();
});
super.initState();
}
void resultData() {
dbHelper.getUser().then((users) {
for (User temp in users) {
if (temp.type == "student") data.add(temp);
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text("Result"),
),
body: DataTable(
columnSpacing: 22,
columns: [
DataColumn(label: Text("Username")),
DataColumn(label: Text("Beginner")),
DataColumn(label: Text("Intermediate")),
DataColumn(label: Text("Advanced")),
],
rows: data
.map((user) => DataRow(cells: [
DataCell(Text(user.email)),
DataCell(Text(user.beginnerMark.toString())),
DataCell(Text(user.intermediateMark.toString())),
DataCell(Text(user.advancedMark.toString())),
]))
.toList(),
),
backgroundColor: Color.fromRGBO(130, 178, 220, 1),
);
}
}
解决方案
TLDR:setState()
如果没有从内部调用then()
,它将在一切完成之前执行并且完全没有效果。
getUser().then((response) {
//Your stuff
setState(() {}); //refresh
});
推荐阅读
- python - 为什么 bot.commands 在 discord.py 中不起作用?
- mysql - 具有空值的 MySQL 浮点列错误 1265 (01000):列的数据被截断
- python - Python DataFrame 问题
- visual-studio-code - 如何在 VS Code 中为 .jsx 文件启用自动更漂亮的格式?
- javascript - 如何获得所有动态输入的平均值
- python - 如何将列表(其中包含 1 个项目)转换为变量?
- reactjs - React:获取和显示或获取和存储,最佳实践
- c# - 将日期和/或时间转换为字符串时转换失败
- python - 在 pip install tweepy 之后“没有命名模块”
- php - 如何配置 apache mod_rewrite 以使用一个或另一个项目?