feat: add useful extensions and RPadding Widget
add r Extension to EdgeInsets, BorderRadius and Radius
Showing
2 changed files
with
109 additions
and
0 deletions
lib/src/r_padding.dart
0 → 100644
1 | +import 'package:flutter/material.dart'; | ||
2 | +import 'package:flutter/rendering.dart'; | ||
3 | +import 'package:flutter_screenutil/src/size_extension.dart'; | ||
4 | + | ||
5 | +import 'size_extension.dart'; | ||
6 | + | ||
7 | +class RPadding extends SingleChildRenderObjectWidget { | ||
8 | + /// Creates a adapt widget that insets its child. | ||
9 | + /// | ||
10 | + /// The [padding] argument must not be null. | ||
11 | + const RPadding({ | ||
12 | + Key? key, | ||
13 | + required Widget child, | ||
14 | + required this.padding, | ||
15 | + }) : super(key: key, child: child); | ||
16 | + | ||
17 | + /// The amount of space by which to inset the child. | ||
18 | + final EdgeInsets padding; | ||
19 | + | ||
20 | + @override | ||
21 | + RenderPadding createRenderObject(BuildContext context) { | ||
22 | + return RenderPadding( | ||
23 | + padding: padding is REdgeInsets ? padding : padding.r, | ||
24 | + textDirection: Directionality.maybeOf(context), | ||
25 | + ); | ||
26 | + } | ||
27 | +} | ||
28 | + | ||
29 | +class REdgeInsets extends EdgeInsets { | ||
30 | + /// Creates adapt insets from offsets from the left, top, right, and bottom. | ||
31 | + REdgeInsets.fromLTRB(double left, double top, double right, double bottom) | ||
32 | + : super.fromLTRB(left.r, top.r, right.r, bottom.r); | ||
33 | + | ||
34 | + /// Creates adapt insets where all the offsets are `value`. | ||
35 | + /// | ||
36 | + /// {@tool snippet} | ||
37 | + /// | ||
38 | + /// Adapt height-pixel margin on all sides: | ||
39 | + /// | ||
40 | + /// ```dart | ||
41 | + /// const REdgeInsets.all(8.0) | ||
42 | + /// ``` | ||
43 | + /// {@end-tool} | ||
44 | + REdgeInsets.all(double value) : super.all(value.r); | ||
45 | + | ||
46 | + /// Creates adapt insets with symmetrical vertical and horizontal offsets. | ||
47 | + /// | ||
48 | + /// {@tool snippet} | ||
49 | + /// | ||
50 | + /// Adapt Eight pixel margin above and below, no horizontal margins: | ||
51 | + /// | ||
52 | + /// ```dart | ||
53 | + /// const REdgeInsets.symmetric(vertical: 8.0) | ||
54 | + /// ``` | ||
55 | + /// {@end-tool} | ||
56 | + REdgeInsets.symmetric({ | ||
57 | + double vertical = 0, | ||
58 | + double horizontal = 0, | ||
59 | + }) : super.symmetric(vertical: vertical.r, horizontal: horizontal.r); | ||
60 | + | ||
61 | + /// Creates adapt insets with only the given values non-zero. | ||
62 | + /// | ||
63 | + /// {@tool snippet} | ||
64 | + /// | ||
65 | + /// Adapt left margin indent of 40 pixels: | ||
66 | + /// | ||
67 | + /// ```dart | ||
68 | + /// const REdgeInsets.only(left: 40.0) | ||
69 | + /// ``` | ||
70 | + /// {@end-tool} | ||
71 | + REdgeInsets.only({ | ||
72 | + double bottom = 0, | ||
73 | + double right = 0, | ||
74 | + double left = 0, | ||
75 | + double top = 0, | ||
76 | + }) : super.only( | ||
77 | + bottom: bottom.r, | ||
78 | + right: right.r, | ||
79 | + left: left.r, | ||
80 | + top: top.r, | ||
81 | + ); | ||
82 | +} |
@@ -48,3 +48,30 @@ extension SizeExtension on num { | @@ -48,3 +48,30 @@ extension SizeExtension on num { | ||
48 | Widget get verticalSpacingRadius => | 48 | Widget get verticalSpacingRadius => |
49 | ScreenUtil().setVerticalSpacingRadius(this); | 49 | ScreenUtil().setVerticalSpacingRadius(this); |
50 | } | 50 | } |
51 | + | ||
52 | +extension EdgeInsetsExtension on EdgeInsets { | ||
53 | + /// Creates adapt insets using r [SizeExtension]. | ||
54 | + EdgeInsets get r => copyWith( | ||
55 | + top: top.r, | ||
56 | + bottom: bottom.r, | ||
57 | + right: right.r, | ||
58 | + left: left.r, | ||
59 | + ); | ||
60 | +} | ||
61 | + | ||
62 | +extension BorderRaduisExtension on BorderRadius { | ||
63 | + /// Creates adapt BorderRadius using r [SizeExtension]. | ||
64 | + BorderRadius get r => copyWith( | ||
65 | + bottomLeft: bottomLeft.r, | ||
66 | + bottomRight: bottomLeft.r, | ||
67 | + topLeft: topLeft.r, | ||
68 | + topRight: topRight.r, | ||
69 | + ); | ||
70 | +} | ||
71 | + | ||
72 | +extension RaduisExtension on Radius { | ||
73 | + /// Creates adapt Radius using r [SizeExtension]. | ||
74 | + Radius get r => this | ||
75 | + ..x.r | ||
76 | + ..y.r; | ||
77 | +} |
-
Please register or login to post a comment