5 способов настроить границу панели приложений во Flutter

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

Метод 1: использование BoxDecoration
Один из способов настройки границы панели приложений — использование класса BoxDecoration. Вы можете обернуть виджет AppBar контейнером и применить к нему BoxDecoration. Например:

AppBar(
  title: Text('My App'),
  backgroundColor: Colors.blue,
  bottom: PreferredSize(
    preferredSize: Size.fromHeight(4.0),
    child: Container(
      decoration: BoxDecoration(
        border: Border(
          bottom: BorderSide(
            color: Colors.red,
            width: 2.0,
          ),
        ),
      ),
    ),
  ),
),

Метод 2: использование AppBarTheme
Другой способ настроить границу панели приложений — использовать AppBarTheme. Вы можете определить собственную AppBarTheme и установить цвет и ширину границы. Вот пример:

AppBar(
  title: Text('My App'),
  backgroundColor: Colors.blue,
  theme: ThemeData(
    appBarTheme: AppBarTheme(
      color: Colors.blue,
      elevation: 0,
      border: Border(
        bottom: BorderSide(
          color: Colors.red,
          width: 2.0,
        ),
      ),
    ),
  ),
),

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

class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
  @override
  Widget build(BuildContext context) {
    return AppBar(
      title: Text('My App'),
      backgroundColor: Colors.blue,
      bottom: PreferredSize(
        preferredSize: Size.fromHeight(4.0),
        child: Container(
          decoration: BoxDecoration(
            border: Border(
              bottom: BorderSide(
                color: Colors.red,
                width: 2.0,
              ),
            ),
          ),
        ),
      ),
    );
  }
  @override
  Size get preferredSize => Size.fromHeight(kToolbarHeight);
}

Метод 4: использование пользовательского виджета панели приложений
Если вы предпочитаете иметь многоразовый пользовательский виджет панели приложений, вы можете создать отдельный виджет и передать свойства границы в качестве параметров. Вот пример:

class CustomAppBar extends StatelessWidget {
  final Color backgroundColor;
  final Color borderColor;
  final double borderWidth;
  CustomAppBar({
    required this.backgroundColor,
    required this.borderColor,
    required this.borderWidth,
  });
  @override
  Widget build(BuildContext context) {
    return AppBar(
      title: Text('My App'),
      backgroundColor: backgroundColor,
      bottom: PreferredSize(
        preferredSize: Size.fromHeight(borderWidth),
        child: Container(
          decoration: BoxDecoration(
            border: Border(
              bottom: BorderSide(
                color: borderColor,
                width: borderWidth,
              ),
            ),
          ),
        ),
      ),
    );
  }
}

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

class CustomAppBar extends StatelessWidget {
  final Widget title;
  final Color backgroundColor;
  final BorderSide borderSide;
  CustomAppBar({
    required this.title,
    required this.backgroundColor,
    required this.borderSide,
  });
  @override
  Widget build(BuildContext context) {
    return AppBar(
      title: title,
      backgroundColor: backgroundColor,
      bottom: PreferredSize(
        preferredSize: borderSide.width,
        child: Container(
          decoration: BoxDecoration(
            border: Border(
              bottom: borderSide,
            ),
          ),
        ),
      ),
    );
  }
  CustomAppBar withBorder(Color color, double width) {
    return CustomAppBar(
      title: title,
      backgroundColor: backgroundColor,
      borderSide: BorderSide(
        color: color,
        width: width,
      ),
    );
  }
}
// Usage example:
CustomAppBar myAppBar = CustomAppBar(
  title: Text('My App'),
  backgroundColor: Colors.blue,
  borderSide: BorderSide(
    color: Colors.red,
    width: 2.0,
  ),
).withBorder(Colors.green, 4.0);

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