6 простых способов перемещения контейнера по панели приложений во Flutter

Во Flutter AppBar — это часто используемый виджет, который обеспечивает единообразную панель приложений на разных экранах. По умолчанию AppBar занимает фиксированное положение в верхней части экрана. Однако могут возникнуть ситуации, когда вы захотите переместить контейнер поверх AppBar для более индивидуального макета. В этой статье мы рассмотрим шесть простых способов добиться этого во Flutter, а также приведем примеры кода.

Метод 1: Виджет «Стек»
Виджет «Стек» позволяет размещать несколько виджетов друг на друге. Чтобы переместить контейнер поверх AppBar, вы можете обернуть и AppBar, и контейнер внутри виджета «Стек» и настроить их расположение с помощью виджета «Позиционировано».

Stack(
  children: [
    AppBar(
      title: Text('My App'),
    ),
    Positioned(
      top: kToolbarHeight, // Adjust the top padding as needed
      child: Container(
        // Your container content here
      ),
    ),
  ],
)

Метод 2: позиционированный виджет
Если вы предпочитаете более простой подход, вы можете использовать позиционированный виджет непосредственно внутри стека, чтобы расположить контейнер над панелью приложений.

Stack(
  children: [
    AppBar(
      title: Text('My App'),
    ),
    Positioned(
      top: kToolbarHeight, // Adjust the top padding as needed
      left: 0,
      right: 0,
      child: Container(
        // Your container content here
      ),
    ),
  ],
)

Метод 3: пользовательская панель приложений
Другой способ переместить контейнер поверх панели приложений — создать собственный виджет AppBar и отрегулировать его высоту в соответствии с размером контейнера. Затем вы можете разместить контейнер внутри пользовательского виджета AppBar.

PreferredSize(
  preferredSize: Size.fromHeight(kToolbarHeight + containerHeight), // Adjust the height as needed
  child: AppBar(
    title: Text('My App'),
    flexibleSpace: Container(
      // Your container content here
    ),
  ),
)

Метод 4: SliverAppBar
Если вы используете SliverAppBar, вы можете добиться желаемого эффекта, обернув его CustomScrollView и используя SliverOverlapAbsorber вместе с SliverOverlapInjector.

CustomScrollView(
  slivers: [
    SliverOverlapInjector(
      handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
    ),
    SliverAppBar(
      title: Text('My App'),
      pinned: true,
      expandedHeight: appBarHeight, // Adjust the height as needed
      flexibleSpace: FlexibleSpaceBar(
        background: Container(
          // Your container content here
        ),
      ),
    ),
    // Other sliver widgets here
  ],
)

Метод 5: позиционированное перекрытие
Вы также можете использовать виджет позиционированный с панелью приложений и контейнером, чтобы перекрывать их. Этот метод требует ручной настройки положения и размера контейнера.

Scaffold(
  appBar: AppBar(
    title: Text('My App'),
  ),
  body: Stack(
    children: [
      Positioned(
        top: -containerTopOffset, // Adjust the top offset as needed
        left: containerLeftOffset, // Adjust the left offset as needed
        width: containerWidth, // Adjust the width as needed
        height: containerHeight, // Adjust the height as needed
        child: Container(
          // Your container content here
        ),
      ),
    ],
  ),
)

Метод 6: Виджет Clipper
Если вы хотите закрепить контейнер по форме AppBar, вы можете использовать виджет CustomClipper вместе с ClipPath.

ClipPath(
  clipper: CustomShapeClipper(), // Implement your custom clipper
  child: Stack(
    children: [
      AppBar(
        title: Text('My App'),
      ),
      Container(
        // Your container content here
      ),
    ],
  ),
)

В этой статье мы рассмотрели шесть простых способов перемещения контейнера по панели приложений во Flutter. В зависимости от ваших конкретных требований вы можете выбрать метод, который соответствует вашим потребностям. Поэкспериментируйте с этими методами, чтобы создать уникальные и визуально привлекательные макеты приложений.