flutter - Flutter GridView.count 在其子项上调用 setState 时缩小
问题描述
我有 4 个可能可见的小部件。它们应该连续显示2个,但我无法提前知道widget1和widget2是否可见,或者widget1和widget4,所以我不知道如何将它们包装在Row中。
我尝试使用 GridView.count,但是当其中一个被标记为脏并重建时我遇到了问题。即使我无条件地对两个小部件进行硬编码,我也会遇到这个问题:
return Container(
child: GridView.count(
shrinkWrap: true,
physics: ScrollPhysics(),
crossAxisCount: 2,
children: [
IncrementDecrementNumber(label: config['optional'][1]['data_value'], value: vel1,
onMinusPressed: (){
setState(() {
if (vel1 > 0)
vel1--;
});
},
onPlusPressed: () {
setState(() {
vel1++;
});
},
),
IncrementDecrementNumber(label: config['optional'][3]['data_value'], value: vel2,
onMinusPressed: (){
setState(() {
if (vel2 > 0)
vel2--;
});
},
onPlusPressed: () {
setState(() {
vel2++;
});
},
)
],
),
);
}
它看起来像这样:
当我单击任何 + 或 - 按钮时,会发生这种情况(并且每次单击小部件都会缩小,直到它们消失):
有没有办法使用 GridView 并防止这种情况发生?
解决方案
我仍然不知道为什么会发生这种情况,但是使用 GridView 代替 GridView.count 似乎可以在没有缩小的情况下工作。
return Container(
child: GridView.count(
shrinkWrap: true,
physics: ScrollPhysics(),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 5.0,
mainAxisSpacing: 5.0,
),
children: [
IncrementDecrementNumber(label: config['optional'][1]['data_value'], value: vel1,
onMinusPressed: (){
setState(() {
if (vel1 > 0)
vel1--;
});
},
onPlusPressed: () {
setState(() {
vel1++;
});
},
),
IncrementDecrementNumber(label: config['optional'][3]['data_value'], value: vel2,
onMinusPressed: (){
setState(() {
if (vel2 > 0)
vel2--;
});
},
onPlusPressed: () {
setState(() {
vel2++;
});
},
)
],
),
);
}
推荐阅读
- python - 输入字符串的长度必须是 16 的倍数 Python pycrypto
- node.js - 如何让 Redactor 所见即所得与 vue.js 一起工作(没有 jQuery)
- wpf - Wpf ListView 分组
- java - using comparable in java for Bubble up in MaxHeap
- html - 上传到 Ghpages 的 Mp3 文件无法播放。我曾尝试使用 rawgit 来托管文件和 githubusercontent,但它仍然无法正常工作?
- angular - RxJs 循环遍历返回的数组
- angular - Typescript - Check if image src has been fetched and call a function
- android - EditText format masks don't appear the % symbol
- javascript - Python烧瓶在javascript文件中使用config.py中的变量
- javascript - 在 HTML5 画布中创建带有棋子的棋盘