Files
sf-app-platform/packages/design_system/lib/src/inputs/textfields.dart

93 lines
2.6 KiB
Dart
Raw Normal View History

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class CustomTextField extends StatefulWidget {
final bool? showPassword;
final bool numeric;
final String hint;
final String label;
final int? lines;
final ValueChanged<String>? onChanged;
final int? length;
final TextEditingController? controller;
const CustomTextField({
super.key,
this.showPassword,
this.numeric = false,
this.hint = '',
this.label = '',
this.lines,
this.length,
this.onChanged,
this.controller,
});
@override
State<CustomTextField> createState() => CustomTextFieldState();
}
class CustomTextFieldState extends State<CustomTextField> {
late bool _showPassword;
@override
void initState() {
super.initState();
_showPassword = widget.showPassword ?? true;
}
@override
Widget build(BuildContext context) {
return Column(
spacing: 8,
children: [
if (widget.label.isNotEmpty)
Align(
alignment: Alignment.bottomLeft,
child: Text(
widget.label,
style: const TextStyle(fontSize: 14, letterSpacing: 0),
),
),
TextFormField(
controller: widget.controller,
keyboardType: widget.numeric
? TextInputType.number
: TextInputType.text,
obscureText: !_showPassword,
enableSuggestions: _showPassword,
autocorrect: !_showPassword,
style: const TextStyle(color: Color(0xFF4B4B4B)),
inputFormatters: widget.numeric
? <TextInputFormatter>[FilteringTextInputFormatter.digitsOnly]
: const <TextInputFormatter>[],
decoration: InputDecoration(
counterText: "",
hintText: widget.hint,
border: const OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(12)),
borderSide: BorderSide(color: Color(0xFF4B4B4B)),
gapPadding: 16,
),
suffixIcon: widget.showPassword != null
? IconButton(
icon: Icon(
_showPassword ? Icons.visibility_off : Icons.visibility,
),
onPressed: () {
setState(() {
_showPassword = !_showPassword;
});
},
)
: null,
),
minLines: widget.lines ?? 1,
maxLines: widget.lines ?? 1,
maxLength: widget.length,
onChanged: widget.onChanged,
),
],
);
}
}