liqkit_ui
Decoration

Keyboards

LiqKeyboard renders an iOS 26 keyboard surface: a 402×874 rounded-rect light surface with an autocomplete suggestions strip, a key-flow area of 30×40 white pills, and a bottom toolbar with emoji, space bar, and mic glyphs. Pass custom keyRows to swap out the QWERTY layout for any other arrangement.

ParameterDescription
suggestionsList of up to three suggestion strings (default QWERTY suggestions)
keyRowsList of key-label rows (default liqKeyboardQwertyRows)
widthOuter width in logical pixels (default 402)
minHeightMinimum height in logical pixels (default 874)

Qwerty

// 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 keyboardQwertyBuilder(BuildContext context) {  return SnippetFrame(    maxWidth: 360,    child: LayoutBuilder(      builder:          (context, constraints) =>              LiqKeyboard(width: constraints.maxWidth, minHeight: 320),    ),  );}

Numbers

// 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 keyboardNumbersBuilder(BuildContext context) {  return SnippetFrame(    maxWidth: 360,    child: LayoutBuilder(      builder:          (context, constraints) => LiqKeyboard(            width: constraints.maxWidth,            minHeight: 320,            suggestions: const <String>['1', '2', '3'],            keyRows: const <List<String>>[              <String>['1', '2', '3'],              <String>['4', '5', '6'],              <String>['7', '8', '9'],              <String>['0'],            ],          ),    ),  );}

Live Suggestions

// ignore_for_file: file_namesimport 'package:docs_snippets/src/snippet_frame.dart';import 'package:flutter/widgets.dart';import 'package:liqkit_ui/examples.dart';Widget keyboardLiveSuggestionsBuilder(BuildContext context) {  return const SnippetFrame(child: KeyboardLiveSuggestionsExample());}

Alphabetic

// ignore_for_file: file_namesimport 'package:docs_snippets/src/snippet_frame.dart';import 'package:flutter/widgets.dart';import 'package:liqkit_ui/examples.dart';Widget keyboardAlphabeticBuilder(BuildContext context) {  return const SnippetFrame(child: KeyboardAlphabeticExample());}

Numeric

// ignore_for_file: file_namesimport 'package:docs_snippets/src/snippet_frame.dart';import 'package:flutter/widgets.dart';import 'package:liqkit_ui/examples.dart';Widget keyboardNumericBuilder(BuildContext context) {  return const SnippetFrame(child: KeyboardNumericExample());}

Decimal

// ignore_for_file: file_namesimport 'package:docs_snippets/src/snippet_frame.dart';import 'package:flutter/widgets.dart';import 'package:liqkit_ui/examples.dart';Widget keyboardDecimalBuilder(BuildContext context) {  return const SnippetFrame(child: KeyboardDecimalExample());}

Phone

// ignore_for_file: file_namesimport 'package:docs_snippets/src/snippet_frame.dart';import 'package:flutter/widgets.dart';import 'package:liqkit_ui/examples.dart';Widget keyboardPhoneBuilder(BuildContext context) {  return const SnippetFrame(child: KeyboardPhoneExample());}

Email

// ignore_for_file: file_namesimport 'package:docs_snippets/src/snippet_frame.dart';import 'package:flutter/widgets.dart';import 'package:liqkit_ui/examples.dart';Widget keyboardEmailBuilder(BuildContext context) {  return const SnippetFrame(child: KeyboardEmailExample());}

Url

// ignore_for_file: file_namesimport 'package:docs_snippets/src/snippet_frame.dart';import 'package:flutter/widgets.dart';import 'package:liqkit_ui/examples.dart';Widget keyboardUrlBuilder(BuildContext context) {  return const SnippetFrame(child: KeyboardUrlExample());}

Emoji

// ignore_for_file: file_namesimport 'package:docs_snippets/src/snippet_frame.dart';import 'package:flutter/widgets.dart';import 'package:liqkit_ui/examples.dart';Widget keyboardEmojiBuilder(BuildContext context) {  return const SnippetFrame(child: KeyboardEmojiExample());}

Light

// ignore_for_file: file_namesimport 'package:docs_snippets/src/snippet_frame.dart';import 'package:flutter/widgets.dart';import 'package:liqkit_ui/examples.dart';Widget keyboardLightBuilder(BuildContext context) {  return const SnippetFrame(child: KeyboardLightAppearanceExample());}

Dark

// ignore_for_file: file_namesimport 'package:docs_snippets/src/snippet_frame.dart';import 'package:flutter/widgets.dart';import 'package:liqkit_ui/examples.dart';Widget keyboardDarkBuilder(BuildContext context) {  return const SnippetFrame(child: KeyboardDarkAppearanceExample());}

Auto

// ignore_for_file: file_namesimport 'package:docs_snippets/src/snippet_frame.dart';import 'package:flutter/widgets.dart';import 'package:liqkit_ui/examples.dart';Widget keyboardAutoBuilder(BuildContext context) {  return const SnippetFrame(child: KeyboardAutoAppearanceExample());}

No Predictions

// ignore_for_file: file_namesimport 'package:docs_snippets/src/snippet_frame.dart';import 'package:flutter/widgets.dart';import 'package:liqkit_ui/examples.dart';Widget keyboardNoPredictionsBuilder(BuildContext context) {  return const SnippetFrame(child: KeyboardNoPredictionsExample());}