showInputDialog function

Future<String?> showInputDialog(
  1. BuildContext context, {
  2. Widget? title,
  3. Widget? text,
  4. String? initialValue,
  5. Widget? prefixIcon,
  6. String? labelText,
  7. TextInputType? keyboardType,
})

彈出一個文本輸入框 以便用戶輸入文本

Implementation

Future<String?> showInputDialog(
  BuildContext context, {
  Widget? title,
  Widget? text,
  String? initialValue,
  Widget? prefixIcon,
  String? labelText,
  TextInputType? keyboardType,
}) {
  final controller = TextEditingController(text: initialValue);
  final decoration = prefixIcon == null && labelText == null
      ? null
      : InputDecoration(
          prefixIcon: prefixIcon,
          labelText: labelText,
        );
  return showDialog<String>(
    context: context,
    builder: (BuildContext context) {
      final textFormField = TextFormField(
        controller: controller,
        decoration: decoration,
      );
      return AlertDialog(
        title: title,
        content: SingleChildScrollView(
          child: text == null
              ? textFormField
              : Column(
                  children: [
                    text,
                    textFormField,
                  ],
                ),
        ),
        actions: <Widget>[
          TextButton(
            child: Text(MaterialLocalizations.of(context).okButtonLabel),
            onPressed: () => Navigator.of(context).pop(controller.text),
          ),
          TextButton(
            child: Text(MaterialLocalizations.of(context).cancelButtonLabel),
            onPressed: () => Navigator.of(context).pop(null),
          ),
        ],
      );
    },
  );
}