You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
312 lines
7.5 KiB
Dart
312 lines
7.5 KiB
Dart
import 'dart:convert';
|
|
import 'dart:io';
|
|
import 'dart:typed_data';
|
|
import 'dart:ui';
|
|
|
|
import 'package:mohem_flutter_app/config/constants.dart';
|
|
import 'package:mohem_flutter_app/theme/colors.dart';
|
|
import 'package:mohem_flutter_app/widgets/txt.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_svg/svg.dart';
|
|
|
|
import 'package:sizer/sizer.dart';
|
|
|
|
Color getColorFromHex(String hexColor) {
|
|
hexColor = hexColor.toUpperCase().replaceAll('#', '');
|
|
|
|
if (hexColor.length == 6) {
|
|
hexColor = 'FF' + hexColor;
|
|
}
|
|
|
|
return Color(int.parse(hexColor, radix: 16));
|
|
}
|
|
|
|
Widget spacerVertical(double v) {
|
|
return Container(
|
|
height: v,
|
|
width: double.infinity,
|
|
);
|
|
}
|
|
Future delay(int millis) async {
|
|
return await Future.delayed(Duration(milliseconds: millis));
|
|
}
|
|
|
|
inkWellCorner({double? r}) {
|
|
return RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(r ?? 4),
|
|
);
|
|
}
|
|
|
|
Widget spacerHorizontal(double v) {
|
|
return Container(
|
|
height: v,
|
|
width: v,
|
|
);
|
|
}
|
|
|
|
Widget mHeight(double f) {
|
|
return Container(
|
|
width: f,
|
|
height: f,
|
|
);
|
|
}
|
|
|
|
Widget mDivider(Color color, {double? h}) {
|
|
return Container(
|
|
width: double.infinity,
|
|
height: h ?? 1,
|
|
color: color,
|
|
);
|
|
}
|
|
|
|
Widget mDivider3({double? h}) {
|
|
return Container(
|
|
width: double.infinity,
|
|
height: h ?? 1,
|
|
color: borderLightColor!.withOpacity(0.7)
|
|
);
|
|
}
|
|
|
|
Widget mDivider2(Color color, double w) {
|
|
return Container(
|
|
width: w,
|
|
height: 1,
|
|
color: color,
|
|
);
|
|
}
|
|
|
|
InputDecoration txtField(String label) {
|
|
return new InputDecoration(
|
|
border: InputBorder.none,
|
|
focusedBorder: InputBorder.none,
|
|
enabledBorder: InputBorder.none,
|
|
errorBorder: InputBorder.none,
|
|
hintText: label,
|
|
hintStyle: TextStyle(color: Colors.grey),
|
|
disabledBorder: InputBorder.none,
|
|
isDense: false,
|
|
contentPadding: EdgeInsets.only(left: 15, right: 15),
|
|
);
|
|
}
|
|
|
|
Widget mWidth(double f) {
|
|
return Container(
|
|
width: f,
|
|
height: f,
|
|
);
|
|
}
|
|
|
|
Widget mFlex(int f) {
|
|
return Flexible(
|
|
flex: f,
|
|
child: Container(
|
|
width: double.infinity,
|
|
height: double.infinity,
|
|
),
|
|
);
|
|
}
|
|
Widget mExp(int f) {
|
|
return Expanded(
|
|
flex: f,
|
|
child: Container(
|
|
width: double.infinity,
|
|
),
|
|
);
|
|
}
|
|
|
|
spacer() {
|
|
return SizedBox(
|
|
height: 8,
|
|
);
|
|
}
|
|
|
|
Widget floatButton(String icon, {Color? color, required Function onClick, String? title}) {
|
|
return Padding(
|
|
padding: const EdgeInsets.only(top: 12, bottom: 12),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
FloatingActionButton(
|
|
onPressed: () {
|
|
onClick();
|
|
},
|
|
heroTag: icon,
|
|
backgroundColor: accentColor,
|
|
elevation: 4,
|
|
child: Container(
|
|
child: SvgPicture.asset(
|
|
categorySvgIcons + icon,
|
|
color: color,
|
|
),
|
|
width: double.infinity,
|
|
height: double.infinity,
|
|
decoration: containerRadius(Colors.white, 200),
|
|
clipBehavior: Clip.antiAlias,
|
|
padding: EdgeInsets.all(15),
|
|
margin: EdgeInsets.all(1),
|
|
),
|
|
),
|
|
if (title != null) mHeight(2.w),
|
|
if (title != null)
|
|
Txt(
|
|
title,
|
|
fontSize: 12.sp,
|
|
bold: true,
|
|
color: headingColor,
|
|
)
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
navigateTo(context, page) {
|
|
Navigator.push(context, MaterialPageRoute(builder: (context) => page));
|
|
}
|
|
|
|
circularImage(String im, double width, double height) {
|
|
return new Container(width: 190.0, height: 190.0, decoration: new BoxDecoration(shape: BoxShape.circle, image: new DecorationImage(fit: BoxFit.fill, image: new AssetImage(im))));
|
|
}
|
|
|
|
circularImage2(String im, double width, double height) {
|
|
return new Container(width: width, height: height, decoration: new BoxDecoration(shape: BoxShape.circle, image: new DecorationImage(fit: BoxFit.fill, image: new AssetImage(im))));
|
|
}
|
|
|
|
cardRadius(double radius) {
|
|
return RoundedRectangleBorder(
|
|
side: BorderSide(color: Colors.transparent, width: 1),
|
|
borderRadius: BorderRadius.circular(radius),
|
|
);
|
|
}
|
|
|
|
cardRadiusWithoutBorder(double radius) {
|
|
return RoundedRectangleBorder(
|
|
side: BorderSide(color: Colors.transparent, width: 1),
|
|
borderRadius: BorderRadius.circular(radius),
|
|
);
|
|
}
|
|
|
|
Image imageFromBase64String(String base64String) {
|
|
return Image.memory(base64Decode(base64String));
|
|
}
|
|
|
|
Uint8List dataFromBase64String(String base64String) {
|
|
return base64Decode(base64String);
|
|
}
|
|
|
|
String base64String(Uint8List data) {
|
|
return base64Encode(data);
|
|
}
|
|
|
|
Widget overLayWidget({double? width, double? height,List<Color>? color}) {
|
|
return Container(
|
|
width: width ?? double.infinity,
|
|
height: height ?? 60,
|
|
decoration: BoxDecoration(
|
|
gradient: LinearGradient(
|
|
colors: color!=null?color:[
|
|
Colors.black.withOpacity(0.2),
|
|
Colors.black.withOpacity(0.1),
|
|
Colors.black.withOpacity(0.004),
|
|
],
|
|
begin: Alignment.topCenter,
|
|
end: Alignment.bottomCenter,
|
|
tileMode: TileMode.clamp,
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
Decoration containerRadius(Color color, double r) {
|
|
return BoxDecoration(
|
|
color: color,
|
|
borderRadius: BorderRadius.all(Radius.circular(r)),
|
|
);
|
|
}
|
|
|
|
Decoration containerRadiusTop({Color? color, double? r}) {
|
|
return BoxDecoration(
|
|
color: color ?? Colors.white,
|
|
borderRadius: BorderRadius.only(topRight: Radius.circular(r ?? 12), topLeft: Radius.circular(r ?? 12)),
|
|
);
|
|
}
|
|
|
|
Decoration containerRadiusBorder(Color color, double r) {
|
|
return BoxDecoration(
|
|
color: Colors.transparent,
|
|
border: Border.all(color: color, width: 1),
|
|
borderRadius: BorderRadius.all(Radius.circular(r)),
|
|
);
|
|
}
|
|
|
|
Decoration containerRadiusBottom(Color color, double r) {
|
|
return BoxDecoration(
|
|
color: color,
|
|
borderRadius: BorderRadius.only(bottomLeft: Radius.circular(r), bottomRight: Radius.circular(r)),
|
|
);
|
|
}
|
|
|
|
ShapeBorder cardRadiusTop(double radius) {
|
|
return RoundedRectangleBorder(
|
|
side: BorderSide(color: Colors.transparent, width: 0),
|
|
borderRadius: BorderRadius.only(topLeft: Radius.circular(radius), topRight: Radius.circular(radius)),
|
|
);
|
|
}
|
|
|
|
Decoration containerColorRadiusBorderWidth(Color background, double radius, Color color, double w) {
|
|
return BoxDecoration(
|
|
color: background,
|
|
border: Border.all(
|
|
width: w, //
|
|
color: color // <--- border width here
|
|
),
|
|
borderRadius: BorderRadius.circular(radius),
|
|
);
|
|
}
|
|
|
|
ShapeBorder cardRadiusTop2(double radius) {
|
|
return RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.only(topLeft: Radius.circular(radius), topRight: Radius.circular(radius)),
|
|
);
|
|
}
|
|
|
|
ShapeBorder cardRadiusBottom(double radius) {
|
|
return RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.only(bottomLeft: Radius.circular(radius), bottomRight: Radius.circular(radius)),
|
|
);
|
|
}
|
|
|
|
Decoration containerColorRadiusBorder(Color background, double radius, Color color) {
|
|
return BoxDecoration(
|
|
color: background,
|
|
border: Border.all(
|
|
width: 1, //
|
|
color: color // <--- border width here
|
|
),
|
|
borderRadius: BorderRadius.circular(radius),
|
|
);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Decoration appGradient = BoxDecoration(
|
|
// gradient: LinearGradient(
|
|
// colors: [
|
|
// Colors.green[200],
|
|
// Colors.green,
|
|
// ],
|
|
// begin: Alignment.topCenter,
|
|
// end: Alignment.bottomCenter,
|
|
// ),
|
|
//);
|
|
// launchURL(String url) async {
|
|
// if (await canLaunch(url)) {
|
|
// await launch(url);
|
|
// } else {
|
|
// throw 'Could not launch $url';
|
|
// }
|
|
// }
|