ts-tat/lib/widgets/custom_text_traveller.dart
2025-03-20 10:29:01 +05:30

80 lines
3.0 KiB
Dart

import 'package:flutter/material.dart';
import 'package:responsive_builder/responsive_builder.dart';
class CustomTextField extends StatelessWidget {
final TextEditingController controller;
final String labelText;
final TextInputType? keyboardType;
final String? Function(String?)? validator;
const CustomTextField({
Key? key,
required this.controller,
required this.labelText,
this.keyboardType,
required this.validator,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return ResponsiveBuilder(
builder: (context, sizingInfo) {
double widthFactor;
if (sizingInfo.deviceScreenType == DeviceScreenType.desktop) {
widthFactor = 0.15; // Reduce width for desktop
} else if (sizingInfo.deviceScreenType == DeviceScreenType.tablet) {
widthFactor = 0.8; // Slightly reduced width for tablets
} else {
widthFactor = 1.0; // Full width for mobile
}
return Center(
child: Container(
height: 35,
width: MediaQuery.of(context).size.width * widthFactor,
child: TextFormField(
controller: controller,
keyboardType: keyboardType,
cursorColor: Colors.blueAccent,
style: TextStyle(fontSize: 12.0),
decoration: InputDecoration(
hintStyle: TextStyle(color: Colors.grey),
floatingLabelStyle: TextStyle(color: Colors.blueAccent,),
floatingLabelBehavior: FloatingLabelBehavior.always,
labelText: labelText,
contentPadding: EdgeInsets.symmetric(vertical: 8, horizontal: 12), // Reduces inner padding
errorStyle: TextStyle(fontSize: 10, height: 0.8, color: Colors.red),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
borderSide: BorderSide(color: Colors.grey, width: 1), // Grey border
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
borderSide: BorderSide(color: Colors.grey, width: 1), // Grey border when not focused
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
borderSide: BorderSide(color: Colors.blueAccent, width: 2), // Blue border when focused
),
errorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
borderSide: BorderSide(color: Colors.grey, width: 1), // Same as normal
),
focusedErrorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
borderSide: BorderSide(color: Colors.blueAccent, width: 2), // Same as focused
),
),
validator: validator,
),
),
);
},
);
}
}