textfield
unknown
dart
3 years ago
7.5 kB
3
Indexable
import 'package:base_architecture/presentation/notifiers/theme_notifier.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart';
class ArabTextField extends StatelessWidget {
const ArabTextField(
{Key? key,
required this.hintText,
required this.labelText,
required this.isRequired,
this.verifyEmail = false,
this.onIconPressed,
this.onEditingComplete,
this.onSaved,
this.textInputAction,
this.validator,
this.keyboardType,
this.initialValue,
this.iconData,
this.obscureText,
this.suffixIcon,
this.prefixIcon,
this.isFirst,
this.isLast,
this.style,
this.textAlign,
this.onChanged,
this.borderRadius,
this.controller,
this.isRaduis,
this.maxLengthEnforced,
this.maxLength,
this.maxLines,
this.svgpath = '',
this.onFieldSubmitted,
this.formatter})
: super(key: key);
final int? maxLines;
final bool isRequired;
final bool verifyEmail;
final TextInputAction? textInputAction;
final ValueChanged<String>? onFieldSubmitted;
final VoidCallback? onEditingComplete;
final ValueChanged<String?>? onSaved;
final FormFieldValidator<String?>? validator;
final TextInputType? keyboardType;
final String? initialValue;
final String hintText;
final TextAlign? textAlign;
final String labelText;
final TextStyle? style;
final IconData? iconData;
final String? svgpath;
final bool? obscureText;
final bool? isFirst;
final bool? isLast;
final Widget? suffixIcon;
final Widget? prefixIcon;
final void Function(String)? onChanged;
final BorderRadius? borderRadius;
final bool? isRaduis;
final bool? maxLengthEnforced;
final int? maxLength;
final List<TextInputFormatter>? formatter;
final VoidCallback? onIconPressed;
final TextEditingController? controller;
@override
Widget build(BuildContext context) {
Size mediaQuery = MediaQuery.of(context).size;
final themeNotifier = Provider.of<ThemeNotifier>(context, listen: true);
return Column(
children: [
SizedBox(
width: mediaQuery.width,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Semantics(
container: true,
label: labelText.tr(),
child: ExcludeSemantics(
excluding: true,
child: RichText(
text: TextSpan(
text: labelText.tr(),
style: themeNotifier
.getTheme()
.textTheme
.headline4!
.copyWith(
fontSize: 16,
color: themeNotifier.getTheme().hoverColor,
),
children: [
isRequired == true
? TextSpan(
text: " *",
style: GoogleFonts.tajawal(
color: themeNotifier.getTheme().canvasColor,
fontSize: 13,
),
)
: const TextSpan(text: ""),
],
),
),
),
),
],
),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 8),
child: TextFormField(
inputFormatters: formatter ?? [],
textInputAction: textInputAction,
initialValue: initialValue,
controller: controller,
keyboardType: keyboardType ?? TextInputType.text,
onSaved: onSaved,
onFieldSubmitted: onFieldSubmitted,
onEditingComplete: onEditingComplete,
onChanged: onChanged,
validator: validator,
cursorColor: themeNotifier.getTheme().canvasColor,
style: GoogleFonts.tajawal(
fontWeight: FontWeight.normal,
color: themeNotifier.getTheme().hoverColor,
fontSize: 15,
),
obscureText: obscureText ?? false,
decoration: InputDecoration(
counterText: "",
contentPadding:
const EdgeInsets.symmetric(horizontal: 15, vertical: 14),
fillColor: const Color(0xFFAEB4BF).withOpacity(0.1),
errorStyle: GoogleFonts.tajawal(
fontSize: 12,
),
disabledBorder: OutlineInputBorder(
borderRadius: const BorderRadius.all(
Radius.circular(10),
),
borderSide: BorderSide(
color: themeNotifier.getTheme().shadowColor,
),
),
enabledBorder: OutlineInputBorder(
borderRadius: const BorderRadius.all(
Radius.circular(10),
),
borderSide: BorderSide(
color: themeNotifier.getTheme().shadowColor,
),
),
focusedBorder: OutlineInputBorder(
borderRadius: const BorderRadius.all(
Radius.circular(10),
),
borderSide: BorderSide(
color: themeNotifier.getTheme().shadowColor,
),
),
hintText: hintText.tr(),
alignLabelWithHint: true,
hintStyle: GoogleFonts.tajawal(fontSize: 15, color: Colors.grey),
border: const OutlineInputBorder(
borderRadius: BorderRadius.all(
Radius.circular(10),
),
),
suffixIconConstraints: const BoxConstraints(
maxWidth: 81,
maxHeight: 50,
minHeight: 30,
minWidth: 30,
),
prefixIcon: prefixIcon,
suffixIcon: Visibility(
visible: svgpath != "" || svgpath != null,
child: Container(
child: suffixIcon,
)),
),
maxLines: maxLines ?? 1,
maxLength: maxLength,
),
),
],
);
}
BorderRadius get buildBorderRadius {
if (isFirst != null && isFirst!) {
return const BorderRadius.vertical(
top: Radius.circular(10),
);
}
if (isLast != null && isLast!) {
return const BorderRadius.vertical(
bottom: Radius.circular(10),
);
}
if (isFirst != null && !isFirst! && isLast != null && !isLast!) {
return const BorderRadius.all(
Radius.circular(10),
);
}
return const BorderRadius.all(
Radius.circular(10),
);
}
double get topMargin {
if ((isFirst != null && isFirst!)) {
return 0;
} else if (isFirst == null) {
return 0;
} else {
return 0;
}
}
double get bottomMargin {
if ((isLast != null && isLast!)) {
return 10;
} else if (isLast == null) {
return 10;
} else {
return 0;
}
}
}
Editor is loading...