import 'package:flutter/material.dart'; import 'package:flutter_code_editor/flutter_code_editor.dart'; class WrappedCodeField extends StatefulWidget { final CodeController controller; final bool expands; final bool wrap; final TextStyle? textStyle; final Color? cursorColor; final EdgeInsets padding; final bool readOnly; final FocusNode? focusNode; const WrappedCodeField({ super.key, required this.controller, this.expands = false, this.wrap = true, // ✅ Enable wrapping by default this.textStyle, this.cursorColor, this.padding = EdgeInsets.zero, this.readOnly = false, this.focusNode, }); @override _WrappedCodeFieldState createState() => _WrappedCodeFieldState(); } class _WrappedCodeFieldState extends State { late FocusNode _focusNode; @override void initState() { super.initState(); _focusNode = widget.focusNode ?? FocusNode(); _focusNode.attach(context, onKeyEvent: _onKeyEvent); } KeyEventResult _onKeyEvent(FocusNode node, KeyEvent event) { return widget.controller.onKey(event); } @override void dispose() { _focusNode.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Container( padding: widget.padding, child: TextField( focusNode: _focusNode, controller: widget.controller, expands: widget.expands, minLines: widget.expands ? null : 1, maxLines: widget.expands ? null : null, // Allows text to grow dynamically scrollPhysics: widget.wrap ? const NeverScrollableScrollPhysics() : null, style: widget.textStyle ?? const TextStyle(fontSize: 16), cursorColor: widget.cursorColor ?? Colors.white, decoration: const InputDecoration( isCollapsed: true, border: InputBorder.none, contentPadding: EdgeInsets.symmetric(vertical: 16), ), readOnly: widget.readOnly, ), ); } }