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), ), ), ), ), ), ); } }