liqkit_ui
Inputs

Textarea

LiqTextarea is the iOS 26 multi-line text input. It renders a rounded-rectangle surface that grows from minLines up to maxLines before the editor starts to scroll internally.

Distinct from LiqTextField — which is a single-line pill input that hardcodes maxLines: 1. Use LiqTextarea for paragraphs, comments, posts, and any multi-line free-form input; use LiqTextField when the content is a single line (search, email, password, name).

Default

import 'package:docs_snippets/src/snippet_frame.dart';import 'package:flutter/widgets.dart';import 'package:liqkit_ui/liqkit_ui.dart';/// Snippet builder consumed by `apps/docs_snippets/lib/src/routes.g.dart`.Widget textareaDefaultBuilder(BuildContext context) {  return SnippetFrame(maxWidth: 480, child: _Demo());}class _Demo extends StatefulWidget {  @override  State<_Demo> createState() => _DemoState();}class _DemoState extends State<_Demo> {  final TextEditingController _controller = TextEditingController();  @override  void dispose() {    _controller.dispose();    super.dispose();  }  @override  Widget build(BuildContext context) {    return LiqTextarea(      controller: _controller,      placeholder: 'Tell us what you think…',      minLines: 4,    );  }}

With Counter

// ignore_for_file: file_names // hyphenated name required by snippet manifest conventionimport 'package:docs_snippets/src/snippet_frame.dart';import 'package:flutter/widgets.dart';import 'package:liqkit_ui/liqkit_ui.dart';/// Snippet builder consumed by `apps/docs_snippets/lib/src/routes.g.dart`.Widget textareaWithCounterBuilder(BuildContext context) {  return SnippetFrame(maxWidth: 480, child: _Demo());}class _Demo extends StatefulWidget {  @override  State<_Demo> createState() => _DemoState();}class _DemoState extends State<_Demo> {  final TextEditingController _controller = TextEditingController();  @override  void dispose() {    _controller.dispose();    super.dispose();  }  @override  Widget build(BuildContext context) {    return LiqTextarea(      controller: _controller,      placeholder: "What's happening?",      maxLength: 280,      showCounter: true,    );  }}