Проблема с порханием при печати с отрицательным смещением Y, расположенным в стеке

#flutter

#флаттер

Вопрос:

У меня есть два виджета в стеке. Что показано ниже.

Панель навигации

Второй виджет — это кнопка, и он расположен в позиционированном виджете с отрицательной осью Y.

Проблема переполнена, не кликабельна. Есть ли какой-либо способ исправить эту проблему?

 Stack(
    fit: StackFit.expand,
    overflow: Overflow.visible,
    clipBehavior: Clip.none,
    alignment: AlignmentDirectional.topCenter,
    children: [
      ClipRRect(
        borderRadius: BorderRadius.all(Radius.circular(29)),
        child: ClipPath(
          clipper: NavbarClipper(),
          child: Container(
            color: Colors.white,
          ),
        ),
      ),
      Positioned(
        top: -30,
        child: Container(
          width: context.dynamicHeight(0.16),
          height: context.dynamicWidth(0.16),
          child: FittedBox(
            child: FloatingActionButton(
              onPressed: () {},
              backgroundColor: Colors.orange,
              child: Icon(Icons.ac_unit),
            ),
          ),
        ),
      )
    ],
  )
 

Спасибо.

Ответ №1:

Вы можете обернуть прямоугольник отступом вместо отрицательного поля на кнопку

 class MyHomePage extends StatefulWidget {
  MyHomePage();

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Color color = Colors.orange;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        height: 200,
        padding: EdgeInsets.all(32),
        child: Stack(
          fit: StackFit.expand,
          clipBehavior: Clip.none,
          alignment: AlignmentDirectional.topCenter,
          children: [
            Padding(
              padding: EdgeInsets.only(top: 30),
              child: ClipRRect(
                borderRadius: BorderRadius.all(Radius.circular(20)),
                child: ClipRRect(
                  child: Container(
                    color: Colors.blue,
                  )
                ),
              ),
            ),
            Positioned(
              top: 0,
              child: Container(
                width: 50,
                height: 50,
                child: FittedBox(
                  child: FloatingActionButton(
                    onPressed: () {
                      setState((){
                        color = (color == Colors.red) ? Colors.orange : Colors.red;
                      });
                    },
                    backgroundColor: color,
                    child: Icon(Icons.ac_unit),
                  ),
                ),
              ),
            )
          ],
        ),
      ),
    );
  }
}