feat : new text input with fixed hint
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../../common/app_color.dart';
|
||||
import '../../common/app_fonts.dart' show AppFonts;
|
||||
|
||||
enum InputType { text, number, email, password }
|
||||
|
||||
class TextFiledFixedHint extends StatefulWidget {
|
||||
const TextFiledFixedHint({
|
||||
super.key,
|
||||
required this.hintText,
|
||||
required this.onChanged,
|
||||
this.inputType = InputType.text,
|
||||
this.initialValue,
|
||||
this.controller,
|
||||
this.keyboardType,
|
||||
this.textInputAction,
|
||||
this.enabled,
|
||||
this.readOnly,
|
||||
this.maxLines,
|
||||
this.minLines,
|
||||
});
|
||||
|
||||
final String hintText;
|
||||
final InputType inputType;
|
||||
|
||||
final ValueChanged<String>? onChanged;
|
||||
final String? initialValue;
|
||||
final TextEditingController? controller;
|
||||
final TextInputType? keyboardType;
|
||||
final TextInputAction? textInputAction;
|
||||
final bool? enabled;
|
||||
final bool? readOnly;
|
||||
final int? maxLines;
|
||||
final int? minLines;
|
||||
|
||||
@override
|
||||
State<TextFiledFixedHint> createState() => _TextFiledFixedHintState();
|
||||
}
|
||||
|
||||
class _TextFiledFixedHintState extends State<TextFiledFixedHint> {
|
||||
TextEditingController? tmpController;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
if (widget.controller == null) {
|
||||
tmpController = TextEditingController(text: widget.initialValue);
|
||||
if (widget.initialValue != null) {
|
||||
tmpController?.text = widget.initialValue!;
|
||||
}
|
||||
} else {
|
||||
tmpController = widget.controller;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
height: 40,
|
||||
width: MediaQuery.of(context).size.width,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12),
|
||||
decoration: BoxDecoration(
|
||||
border: Border.all(color: AppColor.darkGreyLight),
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 3),
|
||||
child: Text(widget.hintText, style: AppFonts.yekan14.copyWith(color: AppColor.darkGreyNormalActive)),
|
||||
),
|
||||
Expanded(
|
||||
child: TextField(
|
||||
controller: tmpController,
|
||||
keyboardType: widget.inputType == InputType.number ? TextInputType.number : widget.keyboardType,
|
||||
textInputAction: widget.textInputAction,
|
||||
onChanged: widget.onChanged,
|
||||
enabled: widget.enabled,
|
||||
readOnly: widget.readOnly ?? false,
|
||||
maxLines: widget.maxLines ?? 1,
|
||||
minLines: widget.minLines ?? 1,
|
||||
cursorHeight: 25,
|
||||
textAlignVertical: TextAlignVertical.top,
|
||||
obscureText: widget.inputType == InputType.password,
|
||||
textAlign: widget.inputType == InputType.number ? TextAlign.start : TextAlign.start,
|
||||
textDirection: widget.inputType == InputType.number ? TextDirection.ltr : TextDirection.rtl,
|
||||
style: AppFonts.yekan14.copyWith(color: AppColor.darkGreyNormalActive),
|
||||
decoration: InputDecoration(border: InputBorder.none),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user