input<T> static method
Future<T?>
input<T>(
- BuildContext context, {
- String title = "Input Form",
- String? content,
- bool barrierDismisable = true,
- required List<
PopupWidgetInputModel> data, - required dynamic onOk(),
- String okText = "Confirm",
- Color color = Colors.blue,
- dynamic onTapInput({
- PopupWidgetInputModel inputForm,
Implementation
static Future<T?> input<T>(
BuildContext context, {
String title = "Input Form",
String? content,
bool barrierDismisable = true,
required List<PopupWidgetInputModel> data,
required Function() onOk,
String okText = "Confirm",
Color color = Colors.blue,
Function({PopupWidgetInputModel inputForm})? onTapInput,
}) async {
var size = MediaQuery.of(context).size;
var dialog = Dialog(
backgroundColor: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
child: StatefulBuilder(builder: (context, setState) {
return Container(
width: _isLargeDevice(size) ? 350 : size.width - 40,
constraints: BoxConstraints(
maxHeight: size.height - 80,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Colors.white,
),
child: SingleChildScrollView(
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 20),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const SizedBox(height: 10),
Text(
title,
style: Theme.of(context).textTheme.bodyText1!.copyWith(
fontWeight: FontWeight.bold,
),
),
if (content != null) const Divider(),
if (content != null) Text(content),
const Divider(),
...data.map((e) {
return Container(
padding: const EdgeInsets.only(bottom: 10),
width: double.infinity,
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
e.title,
style:
Theme.of(context).textTheme.bodyText1!.copyWith(
fontWeight: FontWeight.bold,
),
),
const SizedBox(height: 5),
TextFieldWidget(
controller: e.controller,
enabled: e.enable,
hint: e.hint,
keyboardType: e.keyboardType,
obscureText: e.isObsecure,
onTap: () {
if (onTapInput != null) onTapInput(inputForm: e);
},
),
const SizedBox(height: 10),
],
),
);
}).toList(),
const Divider(),
SizedBox(
width: double.infinity,
child: ButtonWidget(
onPressed: () {
onOk();
},
text: okText,
borderColor: color,
background: color,
),
),
const SizedBox(height: 10),
],
),
),
),
);
}),
);
return showDialog(
context: context,
barrierDismissible: barrierDismisable,
builder: (context) {
return dialog;
});
}