ARTICLE AD BOX
I am building a custom keyboard in Flutter for Android. The keyboard works partially, but when I set it as the default keyboard and try to open it on a real Android device, it does not appear like a keyboard.
Instead of showing as a keyboard at the bottom, it opens as a white full-screen view.
I tried this
Keyboard_main.dart
import 'package:flutter/material.dart'; @pragma('vm:entry-point') void keyboardMain() { runApp(const KeyboardRoot()); } class KeyboardRoot extends StatelessWidget { const KeyboardRoot({super.key}); @override Widget build(BuildContext context) { return const Directionality( textDirection: TextDirection.ltr, child: SimpleKeyboard(), ); } } class SimpleKeyboard extends StatelessWidget { const SimpleKeyboard({super.key}); @override Widget build(BuildContext context) { return Container( width: double.infinity, height: 280, // Standard keyboard height color: Colors.indigoAccent, child: Column( children: [ // Top row with actions Padding( padding: const EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ _actionButton("Rewrite"), _actionButton("Fix"), _actionButton("Shorten"), _actionButton("Tone"), ], ), ), // Suggestions row (optional) SizedBox( height: 120, child: Container( color: Colors.white, child: ListView.builder( scrollDirection: Axis.horizontal, itemCount: 5, itemBuilder: (context, index) { return Padding( padding: const EdgeInsets.symmetric(horizontal: 4.0), child: Chip(label: Text("Suggestion ${index + 1}")), ); }, ), ), ), // Standard keyboard bottom area Container( height: 50, color: Colors.grey[200], child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ _iconButton(Icons.arrow_back), _iconButton(Icons.space_bar), _iconButton(Icons.keyboard_hide), ], ), ), ], ), ); } Widget _actionButton(String text) { return ElevatedButton( onPressed: () { // Handle keyboard actions }, child: Text(text), ); } Widget _iconButton(IconData icon) { return IconButton( onPressed: () { // Handle icon actions }, icon: Icon(icon), ); } }RewriterKeyboardService.kt
package com.arleven.rephraseplus import android.inputmethodservice.InputMethodService import android.view.View import android.widget.FrameLayout import android.graphics.Color import io.flutter.embedding.android.FlutterView import io.flutter.embedding.engine.FlutterEngine import io.flutter.embedding.engine.dart.DartExecutor import io.flutter.FlutterInjector class RewriteKeyboardService : InputMethodService() { private lateinit var engine: FlutterEngine override fun onCreate() { super.onCreate() engine = FlutterEngine(this) engine.dartExecutor.executeDartEntrypoint( DartExecutor.DartEntrypoint( FlutterInjector.instance() .flutterLoader() .findAppBundlePath(), "keyboardMain" ) ) } override fun onCreateInputView(): View { // 🔥 Container is REQUIRED val container = FrameLayout(this) val heightDp = 280 val density = resources.displayMetrics.density val heightPx = (heightDp * density).toInt() container.layoutParams = FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, heightPx ) container.setBackgroundColor(Color.TRANSPARENT) val flutterView = FlutterView(this) flutterView.layoutParams = FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT ) flutterView.setBackgroundColor(Color.WHITE) flutterView.attachToFlutterEngine(engine) container.addView(flutterView) return container } // 🔥 ABSOLUTELY REQUIRED override fun onEvaluateFullscreenMode(): Boolean { return false } override fun onDestroy() { engine.destroy() super.onDestroy() } }keyboard_config.xml
<?xml version="1.0" encoding="utf-8"?> <input-method xmlns:android="http://schemas.android.com/apk/res/android" android:settingsActivity="com.arleven.rephraseplus.MainActivity" android:isDefault="false" />please let me know if anything missing and help in this
Thankyou
