Merge branch 'main' into splash
This commit is contained in:
@@ -7,7 +7,7 @@ import 'package:traderscircuit/Utils/text.dart';
|
||||
|
||||
class CommonAppbar extends StatelessWidget implements PreferredSizeWidget {
|
||||
@override
|
||||
Size get preferredSize => Size.fromHeight(height);
|
||||
Size get preferredSize => Size.fromHeight(height!);
|
||||
const CommonAppbar(
|
||||
{Key? key,
|
||||
required this.titleTxt,
|
||||
@@ -27,11 +27,11 @@ class CommonAppbar extends StatelessWidget implements PreferredSizeWidget {
|
||||
final String? backPageName;
|
||||
final Widget? customActionWidget;
|
||||
final VoidCallback? onCustomActionPressed;
|
||||
final double height;
|
||||
final double? height;
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return PreferredSize(
|
||||
preferredSize: Size.fromHeight(130),
|
||||
preferredSize: Size.fromHeight(height ?? 130),
|
||||
child: AppBar(
|
||||
scrolledUnderElevation: 0.0,
|
||||
backgroundColor: Colors.black,
|
||||
|
||||
@@ -75,9 +75,9 @@ GlassmorphicContainer bottomnavigationbar(MainController _mainController) {
|
||||
shape: BoxShape.circle,
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
color: Colors.grey.withOpacity(0.4),
|
||||
color: Colors.grey.withOpacity(0.2),
|
||||
spreadRadius: 15,
|
||||
blurRadius: 10,
|
||||
blurRadius: 5,
|
||||
offset: Offset(0, 10),
|
||||
),
|
||||
],
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:glassmorphism/glassmorphism.dart';
|
||||
|
||||
class CustomTextFormField extends StatefulWidget {
|
||||
@@ -145,3 +146,156 @@ class _CustomTextFormFieldState extends State<CustomTextFormField> {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class CustomTextFormField1 extends StatefulWidget {
|
||||
const CustomTextFormField1({
|
||||
Key? key,
|
||||
this.validator,
|
||||
this.textEditingController,
|
||||
this.hintText,
|
||||
this.leadingIcon,
|
||||
this.prefixIconColor = const Color(0xFF737373),
|
||||
this.isInputPassword = false,
|
||||
this.validatorText,
|
||||
this.value,
|
||||
this.readonly = false,
|
||||
this.enabled = true,
|
||||
this.maxlines = 1,
|
||||
this.texttype,
|
||||
this.inputFormatters,
|
||||
this.onInput,
|
||||
this.onTap,
|
||||
this.suffixIcon,
|
||||
}) : super(key: key);
|
||||
|
||||
final dynamic validator;
|
||||
final TextEditingController? textEditingController;
|
||||
final String? hintText;
|
||||
final Widget? leadingIcon;
|
||||
final Color prefixIconColor;
|
||||
final bool isInputPassword;
|
||||
final String? validatorText;
|
||||
final String? value;
|
||||
final bool readonly;
|
||||
final bool enabled;
|
||||
final int maxlines;
|
||||
final TextInputType? texttype;
|
||||
final dynamic inputFormatters;
|
||||
final Function(String)? onInput;
|
||||
final VoidCallback? onTap;
|
||||
final Widget? suffixIcon;
|
||||
|
||||
@override
|
||||
State<CustomTextFormField1> createState() => _CustomTextFormField1State();
|
||||
}
|
||||
|
||||
class _CustomTextFormField1State extends State<CustomTextFormField1> {
|
||||
late bool obscureText;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
obscureText = widget.isInputPassword;
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return GlassmorphicContainer(
|
||||
width: double.infinity,
|
||||
height: 50,
|
||||
borderRadius: 8,
|
||||
blur: 10,
|
||||
alignment: Alignment.bottomCenter,
|
||||
border: 0.8,
|
||||
linearGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
Color(0xFFffffff).withOpacity(0.1),
|
||||
Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
],
|
||||
stops: [
|
||||
0.1,
|
||||
1,
|
||||
]),
|
||||
borderGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
Color(0xff3A3A3A),
|
||||
Color(0xFF3A3A3A),
|
||||
],
|
||||
),
|
||||
child: TextFormField(
|
||||
cursorColor: Colors.red,
|
||||
initialValue: widget.value,
|
||||
readOnly: widget.readonly,
|
||||
onTap: widget.onTap,
|
||||
enabled: widget.enabled,
|
||||
enableInteractiveSelection: false,
|
||||
maxLines: widget.maxlines,
|
||||
autovalidateMode: AutovalidateMode.onUserInteraction,
|
||||
obscureText: obscureText,
|
||||
controller: widget.textEditingController,
|
||||
|
||||
decoration: InputDecoration(
|
||||
hintText: widget.hintText,
|
||||
prefixIconColor: widget.prefixIconColor,
|
||||
|
||||
hintStyle: TextStyle(
|
||||
fontSize: 16.sp,
|
||||
color: Colors.white,
|
||||
fontWeight: FontWeight.w400,
|
||||
fontFamily: 'manrope'),
|
||||
|
||||
// ignore: prefer_null_aware_operators
|
||||
prefixIcon: widget.leadingIcon == null ? null : widget.leadingIcon!,
|
||||
suffixIcon: widget.isInputPassword
|
||||
? GestureDetector(
|
||||
onTap: () => setState(() => obscureText = !obscureText),
|
||||
child: obscureText
|
||||
? const Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.only(right: 20.0),
|
||||
child: Icon(Icons.remove_red_eye),
|
||||
),
|
||||
],
|
||||
)
|
||||
: const Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.only(right: 20.0),
|
||||
child: Icon(
|
||||
Icons.remove_red_eye_outlined,
|
||||
color: Color(0xFF959595),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
: widget.suffixIcon == null
|
||||
? null
|
||||
: widget.suffixIcon!,
|
||||
border: InputBorder.none,
|
||||
contentPadding: EdgeInsets.symmetric(horizontal: 10, vertical: 10),
|
||||
),
|
||||
style: TextStyle(color: Colors.white),
|
||||
keyboardType: widget.texttype,
|
||||
// validator: widget.validator ??
|
||||
// (value) {
|
||||
// if (value == null || value.isEmpty) {
|
||||
// return "Empty value";
|
||||
// }
|
||||
// return null;
|
||||
// },
|
||||
inputFormatters: widget.inputFormatters,
|
||||
onChanged: (value) {
|
||||
widget.onInput?.call(value);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
36
lib/Utils/Common/ImagePicker.dart
Normal file
36
lib/Utils/Common/ImagePicker.dart
Normal file
@@ -0,0 +1,36 @@
|
||||
import 'package:image_cropper/image_cropper.dart';
|
||||
import 'package:image_picker/image_picker.dart';
|
||||
|
||||
class ImagePickerMethod {
|
||||
Future<String> getImage(ImageSource imgSource) async {
|
||||
final ImagePicker picker = ImagePicker();
|
||||
|
||||
final XFile? pickedImg = await picker.pickImage(source: imgSource);
|
||||
if (pickedImg != null) {
|
||||
final croppedImg = await ImageCropper().cropImage(
|
||||
sourcePath: pickedImg.path,
|
||||
aspectRatio: const CropAspectRatio(ratioX: 1, ratioY: 1),
|
||||
compressFormat: ImageCompressFormat.jpg,
|
||||
maxHeight: 512,
|
||||
maxWidth: 512,
|
||||
uiSettings: [
|
||||
IOSUiSettings(
|
||||
rotateButtonsHidden: true,
|
||||
rotateClockwiseButtonHidden: true,
|
||||
)
|
||||
],
|
||||
compressQuality: 100,
|
||||
aspectRatioPresets: [
|
||||
CropAspectRatioPreset.square,
|
||||
],
|
||||
);
|
||||
if (croppedImg != null) {
|
||||
return croppedImg.path;
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:glassmorphism/glassmorphism.dart';
|
||||
import 'package:traderscircuit/Utils/Common/sized_box.dart';
|
||||
import 'package:traderscircuit/Utils/text.dart';
|
||||
|
||||
Widget CommonBtn({void Function()? onTap, required String text}) {
|
||||
return InkWell(
|
||||
@@ -23,3 +26,117 @@ Widget CommonBtn({void Function()? onTap, required String text}) {
|
||||
),
|
||||
));
|
||||
}
|
||||
|
||||
Widget CommonYesNoBtn({
|
||||
void Function()? yesonTap,
|
||||
void Function()? noonTap,
|
||||
}) {
|
||||
return Row(
|
||||
children: [
|
||||
GestureDetector(
|
||||
onTap: yesonTap,
|
||||
child: GlassmorphicContainer(
|
||||
width: 170.w,
|
||||
height: 50.h,
|
||||
borderRadius: 8,
|
||||
blur: 10,
|
||||
alignment: Alignment.center,
|
||||
border: 0.9,
|
||||
linearGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
Colors.white.withOpacity(0.1),
|
||||
Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
],
|
||||
stops: [
|
||||
0.1,
|
||||
1,
|
||||
],
|
||||
),
|
||||
borderGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
Color.fromRGBO(70, 5, 1, 0.8),
|
||||
Color.fromRGBO(102, 102, 102, 0.8),
|
||||
],
|
||||
),
|
||||
child: Center(
|
||||
child: text18W500('Yes'),
|
||||
),
|
||||
),
|
||||
),
|
||||
sizedBoxWidth(10.w),
|
||||
GestureDetector(
|
||||
onTap: noonTap,
|
||||
child: Container(
|
||||
height: 50.h,
|
||||
width: 170.w,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(8.r),
|
||||
border: Border.all(color: Color(0xFF9A0000), width: 1.w),
|
||||
color: Color(0xFF6C0000)),
|
||||
child: Center(child: text18W500('No')),
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
// InkWell(
|
||||
// onTap: onTap,
|
||||
// child: Container(
|
||||
// width: double.infinity,
|
||||
// height: 50.h,
|
||||
// decoration: BoxDecoration(
|
||||
// color: Color(0xff9A0000), borderRadius: BorderRadius.circular(5)),
|
||||
// child: Center(
|
||||
// child: Text(
|
||||
// text,
|
||||
// textAlign: TextAlign.center,
|
||||
// style: TextStyle(
|
||||
// color: Colors.white,
|
||||
// fontSize: 20.sp,
|
||||
// fontFamily: 'Cambria',
|
||||
// fontWeight: FontWeight.w400,
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ));
|
||||
Widget kycBtn({
|
||||
void Function()? onTap,
|
||||
required String text,
|
||||
required Color bgClr,
|
||||
required Color borderClr,
|
||||
}) {
|
||||
return InkWell(
|
||||
onTap: onTap,
|
||||
child: Container(
|
||||
width: 191,
|
||||
height: 50,
|
||||
decoration: ShapeDecoration(
|
||||
color: bgClr,
|
||||
shape: RoundedRectangleBorder(
|
||||
side: BorderSide(
|
||||
width: 1,
|
||||
color: borderClr,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
),
|
||||
child: Center(
|
||||
child: Text(
|
||||
text,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 20.sp,
|
||||
fontFamily: 'Cambria',
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
192
lib/Utils/Common/custom_drop_down.dart
Normal file
192
lib/Utils/Common/custom_drop_down.dart
Normal file
@@ -0,0 +1,192 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../text.dart';
|
||||
|
||||
class CustomDropDownWidget extends StatefulWidget {
|
||||
const CustomDropDownWidget(
|
||||
{super.key, required this.header, required this.listData});
|
||||
final String header;
|
||||
final List<String> listData;
|
||||
|
||||
@override
|
||||
State<CustomDropDownWidget> createState() => _CustomDropDownWidgetState();
|
||||
}
|
||||
|
||||
class _CustomDropDownWidgetState extends State<CustomDropDownWidget> {
|
||||
RxBool onDropTap = false.obs;
|
||||
RxString selectedValue = "".obs;
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Obx(
|
||||
() => SizedBox(
|
||||
width: Get.width,
|
||||
// height: onDropTap.value ? 350 : 55,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
InkWell(
|
||||
onTap: () {
|
||||
onDropTap.value = !onDropTap.value;
|
||||
},
|
||||
child: SizedBox(
|
||||
width: 398,
|
||||
height: 55,
|
||||
child: Stack(
|
||||
children: [
|
||||
Positioned(
|
||||
left: 398,
|
||||
top: 55,
|
||||
child: Opacity(
|
||||
opacity: 0.50,
|
||||
child: Transform(
|
||||
transform: Matrix4.identity()
|
||||
..translate(0.0, 0.0)
|
||||
..rotateZ(-3.14),
|
||||
child: Container(
|
||||
width: 398,
|
||||
height: 55,
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: const Alignment(0.98, -0.21),
|
||||
end: const Alignment(-0.98, 0.21),
|
||||
colors: [
|
||||
Colors.white
|
||||
.withOpacity(0.03999999910593033),
|
||||
Colors.white
|
||||
.withOpacity(0.05999999865889549)
|
||||
],
|
||||
),
|
||||
border: Border(
|
||||
top: onDropTap.value
|
||||
? const BorderSide(
|
||||
width: 0, color: Color(0xFF393939))
|
||||
: const BorderSide(
|
||||
width: 0.50,
|
||||
color: Color(0xFF393939)),
|
||||
bottom: const BorderSide(
|
||||
width: 0.50, color: Color(0xFF393939)),
|
||||
left: const BorderSide(
|
||||
width: 0.50,
|
||||
color: Color(0xFF393939),
|
||||
),
|
||||
right: const BorderSide(
|
||||
width: 0.50,
|
||||
color: Color(0xFF393939),
|
||||
),
|
||||
)),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
left: 14,
|
||||
top: 16,
|
||||
child: Text(
|
||||
selectedValue.isNotEmpty
|
||||
? selectedValue.value
|
||||
: widget.header,
|
||||
style: const TextStyle(
|
||||
color: Color(0xFFADADAD),
|
||||
fontSize: 16,
|
||||
fontFamily: 'Manrope',
|
||||
fontWeight: FontWeight.w400,
|
||||
height: 0,
|
||||
),
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
right: 14,
|
||||
top: 16,
|
||||
child: onDropTap.value
|
||||
? const Icon(
|
||||
Icons.keyboard_arrow_up_rounded,
|
||||
color: Colors.white,
|
||||
)
|
||||
: const Icon(
|
||||
Icons.keyboard_arrow_down_rounded,
|
||||
color: Colors.white,
|
||||
)),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
!onDropTap.value
|
||||
? const SizedBox()
|
||||
: Opacity(
|
||||
opacity: 0.50,
|
||||
child: Container(
|
||||
width: Get.width,
|
||||
// height: 216,
|
||||
decoration: ShapeDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: const Alignment(0.98, -0.21),
|
||||
end: const Alignment(-0.98, 0.21),
|
||||
colors: [
|
||||
Colors.white.withOpacity(0.03999999910593033),
|
||||
Colors.white.withOpacity(0.05999999865889549)
|
||||
],
|
||||
),
|
||||
shape: const RoundedRectangleBorder(
|
||||
side:
|
||||
BorderSide(width: 0.50, color: Color(0xFF393939)),
|
||||
borderRadius: BorderRadius.only(
|
||||
bottomLeft: Radius.circular(8),
|
||||
bottomRight: Radius.circular(8),
|
||||
),
|
||||
),
|
||||
),
|
||||
child: ListView.builder(
|
||||
shrinkWrap: true,
|
||||
itemCount: widget.listData.length,
|
||||
itemBuilder: (context, index) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
selectedValue.value = widget.listData[index];
|
||||
onDropTap.value = !onDropTap.value;
|
||||
},
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Container(
|
||||
margin: EdgeInsets.only(
|
||||
left: 14,
|
||||
top: index == 0 ? 16 : 0,
|
||||
bottom: index ==
|
||||
widget.listData.length - 1
|
||||
? 16
|
||||
: 0),
|
||||
child:
|
||||
text16W400(widget.listData[index])),
|
||||
index == widget.listData.length - 1
|
||||
? const SizedBox()
|
||||
: Container(
|
||||
width: Get.width,
|
||||
margin: const EdgeInsets.only(
|
||||
top: 16, bottom: 16),
|
||||
decoration: const ShapeDecoration(
|
||||
shape: RoundedRectangleBorder(
|
||||
side: BorderSide(
|
||||
width: 0.60,
|
||||
strokeAlign: BorderSide
|
||||
.strokeAlignCenter,
|
||||
color: Color(0xFF393939),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,18 @@ Widget text20W400(String text) {
|
||||
);
|
||||
}
|
||||
|
||||
Widget text20W400_center(String text) {
|
||||
return Text(
|
||||
text,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 20.sp,
|
||||
color: Colors.white,
|
||||
fontWeight: FontWeight.w400,
|
||||
fontFamily: 'manrope'),
|
||||
);
|
||||
}
|
||||
|
||||
Widget text18W800(String text) {
|
||||
return Text(
|
||||
text,
|
||||
@@ -56,6 +68,19 @@ Widget text18W400(String text) {
|
||||
);
|
||||
}
|
||||
|
||||
Widget text24W500(String text) {
|
||||
return Text(
|
||||
text,
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 24.sp,
|
||||
fontWeight: FontWeight.w500,
|
||||
fontFamily: 'manrope'),
|
||||
maxLines: 2,
|
||||
softWrap: true,
|
||||
);
|
||||
}
|
||||
|
||||
Widget text16W400(String text) {
|
||||
return Text(
|
||||
text,
|
||||
@@ -154,6 +179,7 @@ Widget text12W400(String text) {
|
||||
fontFamily: 'manrope'),
|
||||
);
|
||||
}
|
||||
|
||||
Widget text12W500(String text) {
|
||||
return Text(
|
||||
text,
|
||||
@@ -231,8 +257,8 @@ Widget text14W300(String text) {
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Widget text14W400(String text) { return Text(
|
||||
Widget text14W400(String text) {
|
||||
return Text(
|
||||
text,
|
||||
style: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
@@ -243,13 +269,11 @@ Widget text14W400(String text) { return Text(
|
||||
}
|
||||
|
||||
Widget text14W500(String text) {
|
||||
|
||||
return Text(
|
||||
text,
|
||||
style: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
color: Colors.white,
|
||||
|
||||
fontWeight: FontWeight.w500,
|
||||
fontFamily: 'manrope'),
|
||||
);
|
||||
@@ -261,13 +285,11 @@ Widget text16W400_DADADA(String text) {
|
||||
style: TextStyle(
|
||||
fontSize: 16.sp,
|
||||
color: Color(0xFFDADADA),
|
||||
|
||||
fontWeight: FontWeight.w400,
|
||||
fontFamily: 'manrope'),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Widget text14W400_979797(String text) {
|
||||
return Text(
|
||||
text,
|
||||
@@ -313,4 +335,3 @@ Widget text14W500_black(String text) {
|
||||
fontFamily: 'manrope'),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user