textField static method

String textField()

Implementation

static String textField() => r'''
import 'package:flutter/material.dart';

import '../styles/design_style_config.dart';
import '../tokens/app_colors.dart';
import '../tokens/app_radius.dart';
import '../tokens/app_spacing.dart';
import 'app_surface.dart';

class AppTextField extends StatelessWidget {
const AppTextField({
  super.key,
  this.controller,
  this.label,
  this.hint,
  this.prefix,
  this.suffix,
  this.errorText,
  this.enabled = true,
  this.obscureText = false,
  this.keyboardType,
  this.onChanged,
  this.focusNode,
});

final TextEditingController? controller;
final String? label;
final String? hint;
final Widget? prefix;
final Widget? suffix;
final String? errorText;
final bool enabled;
final bool obscureText;
final TextInputType? keyboardType;
final ValueChanged<String>? onChanged;
final FocusNode? focusNode;

@override
Widget build(BuildContext context) {
  final isDark = Theme.of(context).brightness == Brightness.dark;
  const radius = AppStyleConfig.usesHardOffsetShadow
      ? AppRadius.none
      : AppRadius.md;

  final field = TextField(
    controller: controller,
    focusNode: focusNode,
    enabled: enabled,
    obscureText: obscureText,
    keyboardType: keyboardType,
    onChanged: onChanged,
    style: Theme.of(context).textTheme.bodyMedium,
    decoration: InputDecoration(
      labelText: label,
      hintText: hint,
      prefixIcon: prefix,
      suffixIcon: suffix,
      errorText: errorText,
      filled: true,
      fillColor: Colors.transparent,
      border: InputBorder.none,
    ),
  );

  return Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: <Widget>[
      AppSurface(
        depth: enabled ? AppSurfaceDepth.inset : AppSurfaceDepth.flat,
        radius: radius,
        padding: const EdgeInsets.symmetric(horizontal: AppSpacing.sm),
        child: field,
      ),
      if (errorText != null) ...<Widget>[
        const SizedBox(height: AppSpacing.xs),
        Row(
          children: <Widget>[
            Icon(
              Icons.error_outline,
              size: 16,
              color: isDark ? AppColorsDark.error : AppColors.error,
            ),
            const SizedBox(width: AppSpacing.xs),
            Expanded(
              child: Text(
                errorText!,
                style: TextStyle(
                  color: isDark ? AppColorsDark.error : AppColors.error,
                ),
              ),
            ),
          ],
        ),
      ],
    ],
  );
}
}
''';