hussam

refactor: add RSizedBox widget

  1 +import 'package:flutter/material.dart';
  2 +import 'package:flutter/rendering.dart';
  3 +
  4 +import 'size_extension.dart';
  5 +
  6 +class RSizedBox extends SizedBox {
  7 + const RSizedBox({
  8 + Key? key,
  9 + double? height,
  10 + double? width,
  11 + Widget? child,
  12 + }) : _square = false,
  13 + super(key: key, child: child, width: width, height: height);
  14 +
  15 + const RSizedBox.square({
  16 + Key? key,
  17 + double? height,
  18 + double? dimension,
  19 + Widget? child,
  20 + }) : _square = true,
  21 + super.square(key: key, child: child, dimension: dimension);
  22 +
  23 + RSizedBox.fromSize({
  24 + Key? key,
  25 + Size? size,
  26 + Widget? child,
  27 + }) : _square = false,
  28 + super.fromSize(key: key, child: child, size: size);
  29 +
  30 + @override
  31 + RenderConstrainedBox createRenderObject(BuildContext context) {
  32 + return RenderConstrainedBox(
  33 + additionalConstraints: _additionalConstraints,
  34 + );
  35 + }
  36 +
  37 + final bool _square;
  38 +
  39 + BoxConstraints get _additionalConstraints {
  40 + final boxConstraints =
  41 + BoxConstraints.tightFor(width: width, height: height);
  42 + return _square ? boxConstraints.r : boxConstraints.hw;
  43 + }
  44 +
  45 + @override
  46 + void updateRenderObject(
  47 + BuildContext context, RenderConstrainedBox renderObject) {
  48 + renderObject.additionalConstraints = _additionalConstraints;
  49 + }
  50 +}
@@ -2,7 +2,7 @@ import 'dart:math'; @@ -2,7 +2,7 @@ import 'dart:math';
2 2
3 import 'package:flutter/material.dart'; 3 import 'package:flutter/material.dart';
4 4
5 -import '../flutter_screenutil.dart'; 5 +import 'screen_util.dart';
6 6
7 extension SizeExtension on num { 7 extension SizeExtension on num {
8 ///[ScreenUtil.setWidth] 8 ///[ScreenUtil.setWidth]
@@ -75,3 +75,21 @@ extension RaduisExtension on Radius { @@ -75,3 +75,21 @@ extension RaduisExtension on Radius {
75 ..x.r 75 ..x.r
76 ..y.r; 76 ..y.r;
77 } 77 }
  78 +
  79 +extension BoxConstraintsExtension on BoxConstraints {
  80 + /// Creates adapt BoxConstraints using r [SizeExtension].
  81 + BoxConstraints get r => this.copyWith(
  82 + maxHeight: maxHeight.r,
  83 + maxWidth: maxWidth.r,
  84 + minHeight: minHeight.r,
  85 + minWidth: minWidth.r,
  86 + );
  87 +
  88 + /// Creates adapt BoxConstraints using h-w [SizeExtension].
  89 + BoxConstraints get hw => this.copyWith(
  90 + maxHeight: maxHeight.h,
  91 + maxWidth: maxWidth.w,
  92 + minHeight: minHeight.h,
  93 + minWidth: minWidth.w,
  94 + );
  95 +}