hussam

refactor: add RSizedBox widget

import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'size_extension.dart';
class RSizedBox extends SizedBox {
const RSizedBox({
Key? key,
double? height,
double? width,
Widget? child,
}) : _square = false,
super(key: key, child: child, width: width, height: height);
const RSizedBox.square({
Key? key,
double? height,
double? dimension,
Widget? child,
}) : _square = true,
super.square(key: key, child: child, dimension: dimension);
RSizedBox.fromSize({
Key? key,
Size? size,
Widget? child,
}) : _square = false,
super.fromSize(key: key, child: child, size: size);
@override
RenderConstrainedBox createRenderObject(BuildContext context) {
return RenderConstrainedBox(
additionalConstraints: _additionalConstraints,
);
}
final bool _square;
BoxConstraints get _additionalConstraints {
final boxConstraints =
BoxConstraints.tightFor(width: width, height: height);
return _square ? boxConstraints.r : boxConstraints.hw;
}
@override
void updateRenderObject(
BuildContext context, RenderConstrainedBox renderObject) {
renderObject.additionalConstraints = _additionalConstraints;
}
}
... ...
... ... @@ -2,7 +2,7 @@ import 'dart:math';
import 'package:flutter/material.dart';
import '../flutter_screenutil.dart';
import 'screen_util.dart';
extension SizeExtension on num {
///[ScreenUtil.setWidth]
... ... @@ -75,3 +75,21 @@ extension RaduisExtension on Radius {
..x.r
..y.r;
}
extension BoxConstraintsExtension on BoxConstraints {
/// Creates adapt BoxConstraints using r [SizeExtension].
BoxConstraints get r => this.copyWith(
maxHeight: maxHeight.r,
maxWidth: maxWidth.r,
minHeight: minHeight.r,
minWidth: minWidth.r,
);
/// Creates adapt BoxConstraints using h-w [SizeExtension].
BoxConstraints get hw => this.copyWith(
maxHeight: maxHeight.h,
maxWidth: maxWidth.w,
minHeight: minHeight.h,
minWidth: minWidth.w,
);
}
... ...