我想在 Row 中有更多(在本例中为 4)项目。我尝试使用 Expanded 或 Flexible 或 mainAxisAlignment: MainAxisAlignment.spaceEvenly 来填满屏幕的所有宽度。但是我想将项目设置为特定的宽度和高度 50 像素,并且项目周围的 GestureDetector 是屏幕的 1/4(4 个项目 = 全宽)。所以我在行中点击的任何地方都会选择一些东西。我的问题是,我的每个解决方案都会使项目(圆圈)变形,或者圆圈必须非常大,宽度 = 高度才不会变形。我还尝试将整个 _ratingEmoji 包装在 Expanded 中,并将 ratingItem.ratingIndicator 约束设置为最大宽度,但结果相同。
项目行:
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
for (var ratingItem in editGroceryRatingProvider.foodRatings)
_ratingEmoji(editGroceryRatingProvider, ratingItem, context),
],
),
物品:
Widget _ratingEmoji(EditGroceryRatingProvider editGroceryRatingProvider,
SelectedFoodRating ratingItem, BuildContext context) {
return GestureDetector(
child: ratingItem.selected
? Container(
width: MediaQuery.of(context).size.width / 8,
height: MediaQuery.of(context).size.width / 8,
padding: const EdgeInsets.all(2.0),
decoration: BoxDecoration(
border: Border.all(
color: Color(0xFF312ADB),
width: 3.0,
),
borderRadius: BorderRadius.circular(32.0)),
child: Center(
child: ratingItem.ratingIndicator,
),
)
: ratingItem.ratingIndicator,
onTap: () => editGroceryRatingProvider.updateSelectedRating(ratingItem),
);
}
RatingIndicator 是屏幕上的“圆圈”项目:
Container(
decoration: BoxDecoration(
border: Border.all(
color: color,
width: 1.5,
),
borderRadius: BorderRadius.circular(64.0),
),
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: Colors.white,
width: 3.0,
),
borderRadius: BorderRadius.circular(64.0),
),
child: ClipOval(
child: Container(
width: width ?? MediaQuery.of(context).size.width / 7,
height: height ?? MediaQuery.of(context).size.width / 7,
color: color,
),
),
),
);
非常感谢。
更新:
项目应该保持在屏幕截图上,但是“整个”行应该是可点击的(意味着即使你在 2 个项目之间点击,应该选择更接近点击的一个)