flutter_input_library/lib/src/inputs/text/password.dart

60 lines
1.7 KiB
Dart
Raw Normal View History

2022-11-29 13:16:44 +01:00
// SPDX-FileCopyrightText: 2022 Iconica
//
// SPDX-License-Identifier: BSD-3-Clause
import 'package:flutter/material.dart';
/// Generates a [TextFormField] for passwords. It requires a [FlutterFormInputController]
/// as the [controller] parameter and an optional [Widget] as [label]
class FlutterFormInputPassword extends StatefulWidget {
2022-11-29 13:16:44 +01:00
final Widget? label;
2023-01-11 10:28:25 +01:00
final FocusNode? focusNode;
2022-11-29 13:16:44 +01:00
final String? initialValue;
final Function(String?)? onSaved;
2022-11-29 13:37:58 +01:00
final String? Function(String?)? validator;
2022-11-29 13:16:44 +01:00
final Function(String?)? onChanged;
final Function(String?)? onFieldSubmitted;
const FlutterFormInputPassword({
Key? key,
this.label,
2023-01-11 10:28:25 +01:00
this.focusNode,
2022-11-29 13:16:44 +01:00
this.initialValue,
this.onSaved,
this.validator,
this.onChanged,
this.onFieldSubmitted,
}) : super(key: key);
@override
2023-03-26 12:49:54 +02:00
State<FlutterFormInputPassword> createState() => _PasswordTextFieldState();
2022-11-29 13:16:44 +01:00
}
class _PasswordTextFieldState extends State<FlutterFormInputPassword> {
2022-11-29 13:16:44 +01:00
bool obscured = true;
@override
Widget build(BuildContext context) {
return TextFormField(
initialValue: widget.initialValue,
obscureText: obscured,
2023-01-11 10:28:25 +01:00
focusNode: widget.focusNode,
2022-11-29 13:16:44 +01:00
onSaved: (value) => widget.onSaved?.call(value),
validator: (value) => widget.validator?.call(value),
onChanged: (value) => widget.onChanged?.call(value),
onFieldSubmitted: (value) => widget.onFieldSubmitted?.call(value),
decoration: InputDecoration(
label: widget.label ?? const Text("Password"),
suffixIcon: IconButton(
onPressed: () {
setState(() {
obscured = !obscured;
});
},
icon: Icon(obscured ? Icons.visibility_off : Icons.visibility),
),
),
);
}
}