flutter - Flutter 小部件未在热重载中显示其显示
问题描述
我按循环显示小部件问题是当我使用 HotReload 时它不显示小部件然后它显示列表小部件
class _CartPageState extends State<CartPage> {
void navigateToAddressPage() {
Get.to(AddressPage());
}
@override
void initState() {
this._query();
}
List<Widget> textWidgetList = List<Widget>();
void _query() async {
print('cart');
final dbHelper = DatabaseHelper.instance;
final allRows = await dbHelper.queryAllRows();
print(allRows);
print('query all rows:');
allRows.forEach((row) => print(row));
for (int i = 0; i < allRows.length; i++) {
textWidgetList.add(Card(
elevation: 5.0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12.0),
),
margin: EdgeInsets.symmetric(vertical: 8.0),
child: Container(
width: double.infinity,
height: 120.0,
padding: EdgeInsets.all(12.0),
child: Row(
children: [
ClipRRect(
borderRadius: BorderRadius.circular(12.0),
// child: CachedNetworkImage(
// imageUrl:
// 'https://i.pinimg.com/564x/7f/0f/dc/7f0fdc10a9cb26e78d8e6257e1b06fb6.jpg',
// height: 100.0,
// width: 100.0,
// ),
child: Image.asset(
allRows[i]['image'],
height: 100,
width: 100,
)),
SizedBox(width: 12.0),
Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 10.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Text(
allRows[i]['title'],
textAlign: TextAlign.start,
maxLines: 3,
overflow: TextOverflow.ellipsis,
),
),
SizedBox(width: 5.0),
Row(
children: [
GestureDetector(
onTap: () {},
child: Icon(
FlutterIcons.delete_outline_mco,
),
)
],
)
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Text(
allRows[i]['price'],
),
),
// Counter(),
],
),
],
),
),
)
],
),
),
));
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: buildAppBar(context),
body: Container(
child: SingleChildScrollView(
padding: EdgeInsets.symmetric(horizontal: 18.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
SizedBox(height: 12.0),
Column(children: textWidgetList),
],
),
),
),
);
}
}
您可以在代码中看到我在 for 循环中显示数据,然后显示小部件,但不知道为什么当我使用热重载时它不显示小部件。我正在从 sqllite 获取数据,所以我认为这不是问题屏幕首先加载然后数据加载
解决方案
那是因为您setState((){});
在方法的末尾错过了 a _query()
。发生的情况是,它_query()
会在创建小部件后立即调用,然后填充textWidgetList
,但您实际上从未告诉 Flutter 它需要刷新 UI。
当您按下热重载时,它实际上会这样做,重建所有小部件(或其状态),以便您可以实际看到textWidgetList
更改。
例如,要解决您的问题,请不要忘记setState((){})
在方法结束时调用_query()
。
推荐阅读
- python-3.x - reg.coef_ 两次返回相同的值
- javascript - 如何遍历子元素并创建嵌套的对象数组?
- javascript - 三.JS渲染.stp文件
- javascript - 持续刷新 HTML 表格 (SPA) 的最佳选择
- python-3.x - Python - 反转 .tif 二进制图像
- unit-testing - ABAP 单元测试 - 本地测试类测试其他全局类的代码
- ruby-on-rails - 在 Ruby Rails 上将数据导出到 CSV 文件
- javascript - 如何循环保存对象数组到mongodb
- c# - 如何在 C# 中对同步方法进行异步调用
- java - 使用自定义 Getter/Setter 访问 Thymeleaf 中的字段