// ignore_for_file: public_member_api_docs

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:prasule/pw/platformwidget.dart';

/// A [PlatformWidget] implementation of a text field
class PlatformField extends PlatformWidget<TextField, CupertinoTextField> {
  const PlatformField({
    super.key,
    this.controller,
    this.enabled,
    this.labelText,
    this.obscureText = false,
    this.autocorrect = false,
    this.keyboardType,
    this.inputFormatters = const [],
    this.onChanged,
    this.autofillHints,
    this.textStyle,
    this.textAlign = TextAlign.start,
    this.maxLines = 1,
    this.focusNode,
    this.inputBorder = const OutlineInputBorder(),
    this.suffix,
    this.prefix,
  });
  final TextEditingController? controller;
  final bool? enabled;
  final bool obscureText;
  final String? labelText;
  final bool autocorrect;
  final TextInputType? keyboardType;
  final List<TextInputFormatter> inputFormatters;
  final void Function(String)? onChanged;
  final List<String>? autofillHints;
  final TextStyle? textStyle;
  final TextAlign textAlign;
  final int? maxLines;
  final InputBorder inputBorder;
  final FocusNode? focusNode;
  final Widget? suffix;
  final Widget? prefix;

  @override
  TextField createAndroidWidget(BuildContext context) => TextField(
        textAlign: textAlign,
        controller: controller,
        enabled: enabled,
        obscureText: obscureText,
        decoration: InputDecoration(
          labelText: labelText,
          border: inputBorder,
          suffix: suffix,
          prefix: prefix,
        ),
        autocorrect: autocorrect,
        keyboardType: keyboardType,
        focusNode: focusNode,
        style: textStyle,
        inputFormatters: inputFormatters,
        onChanged: onChanged,
        autofillHints: autofillHints,
        maxLines: maxLines,
      );

  @override
  CupertinoTextField createIosWidget(BuildContext context) =>
      CupertinoTextField(
        textAlign: textAlign,
        controller: controller,
        enabled: enabled ?? true,
        obscureText: obscureText,
        placeholder: labelText,
        autocorrect: autocorrect,
        keyboardType: keyboardType,
        inputFormatters: inputFormatters,
        onChanged: onChanged,
        focusNode: focusNode,
        maxLines: maxLines,
        style: textStyle,
        prefix: prefix,
        suffix: suffix,
      );
}
