guru_sdk/guru_ui/packages/guru_widgets/lib/common/divider.dart

102 lines
3.0 KiB
Dart
Raw Normal View History

import 'package:flutter/material.dart';
/// Created by @Haoyi on 4/15/21
class HorizontalDivider extends StatelessWidget {
/// Creates a material design vertical divider.
///
/// The [height], [thickness], [indent], and [endIndent] must be null or
/// non-negative.
const HorizontalDivider({
Key? key,
this.height,
this.thickness,
this.indent,
this.endIndent,
this.color,
this.bgColor,
}) : assert(height == null || height >= 0.0),
assert(thickness == null || thickness >= 0.0),
assert(indent == null || indent >= 0.0),
assert(endIndent == null || endIndent >= 0.0),
super(key: key);
/// The divider's width.
///
/// The divider itself is always drawn as a vertical line that is centered
/// within the width specified by this value.
///
/// If this is null, then the [DividerThemeData.space] is used. If that is
/// also null, then this defaults to 16.0.
final double? height;
/// The thickness of the line drawn within the divider.
///
/// A divider with a [thickness] of 0.0 is always drawn as a line with a
/// width of exactly one device pixel.
///
/// If this is null, then the [DividerThemeData.thickness] is used which
/// defaults to 0.0.
final double? thickness;
/// The amount of empty space on top of the divider.
///
/// If this is null, then the [DividerThemeData.indent] is used. If that is
/// also null, then this defaults to 0.0.
final double? indent;
/// The amount of empty space under the divider.
///
/// If this is null, then the [DividerThemeData.endIndent] is used. If that is
/// also null, then this defaults to 0.0.
final double? endIndent;
/// The color to use when painting the line.
///
/// If this is null, then the [DividerThemeData.color] is used. If that is
/// also null, then [ThemeData.dividerColor] is used.
///
/// {@tool snippet}
///
/// ```dart
/// Divider(
/// color: Colors.deepOrange,
/// )
/// ```
/// {@end-tool}
final Color? color;
final Color? bgColor;
@override
Widget build(BuildContext context) {
final DividerThemeData dividerTheme = DividerTheme.of(context);
final double height = this.height ?? dividerTheme.space ?? 16.0;
final double thickness = this.thickness ?? dividerTheme.thickness ?? 0.0;
final double indent = this.indent ?? dividerTheme.indent ?? 0.0;
final double endIndent = this.endIndent ?? dividerTheme.endIndent ?? 0.0;
final Color bgColor = this.bgColor ?? Colors.transparent;
return SizedBox(
width: double.infinity,
height: height,
child: Center(
child: Container(
height: thickness,
padding: EdgeInsetsDirectional.only(start: indent, end: endIndent),
color: bgColor,
child: Container(
height: thickness,
decoration: BoxDecoration(
border: Border(
top: Divider.createBorderSide(context, color: color, width: thickness),
),
),
),
),
),
);
}
}