1

我想在 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 个项目之间点击,应该选择更接近点击的一个)

4

1 回答 1

2

检查,请解决。整个区域都是可点击的。你只需要添加你的项目而不是我的。

与项目的行

@override
  Widget build(BuildContext context) {
    final colors = [Colors.red, Colors.blue, Colors.brown, Colors.cyan];
    return Scaffold(
      body: Container(
        alignment: Alignment.center,
        color: const Color(0xffFAFAFA),
        child: Row(
          children: List.generate(
              colors.length,
              (index) => Expanded(
                    child: GestureDetector(
                        onTap: () => print('Tapped:$index'),
                        child: Container(
                          height: 50,
                          color: Colors.transparent,
                          child: Container(
                            decoration: BoxDecoration(
                              shape: BoxShape.circle,
                              color: colors[index],
                            ),
                          ),
                        )),
                  )),
        ),
      ),
    );
于 2020-07-14T09:38:15.807 回答