【发布时间】:2020-11-02 15:53:31
【问题描述】:
我想在 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 个项目之间点击,也应该选择更接近点击的一个)
【问题讨论】:
-
您是否有 ui 设计或表单来直观地表示您想要达到的设计?
-
@naif.mazen 用截图更新了问题
-
您是否尝试过这种模式,具有水平列表视图的行(展开后换行)并且列表的每个子项都是一个用墨水瓶包裹的容器?
标签: flutter flutter-layout flutter-row