Skip to content

FleatherField cursor goes behind the keyboard when typing #462

@manudicri

Description

@manudicri

When using FleatherField in a SingleChildScrollView, the cursor consistently goes behind the keyboard as you type, making it difficult to see what you're typing. The view does not automatically scroll to bring the focused FleatherField into view when the cursor moves downwards. This issue happens every time you type, not just when the keyboard appears.

I even tried using the scrollController and scrollable settings, but the behavior is still the same.

Steps to Reproduce

  1. Add multiple FleatherField widgets inside a SingleChildScrollView.
  2. Focus on any FleatherField to bring up the keyboard.
  3. Start typing, and observe that as the cursor moves downward, it gets covered by the keyboard and is no longer visible.

Environment

  • iOS
  • Flutter version 3.24.4
  • Fleather 1.19.0

Code

import 'package:fleather/fleather.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class Section {
  final fleatherController = FleatherController();
  Section();
}

class _MyHomePageState extends State<MyHomePage> {
  final _scrollController = ScrollController();

  final _sections = <Section>[
    for (int i = 0; i < 20; i++) Section(),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: SingleChildScrollView(
        controller: _scrollController,
        child: SizedBox(
          width: double.maxFinite,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              for (final section in _sections) ...[
                const Text(
                  "TITLE",
                  style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
                ),
                const Text("Input:", style: TextStyle(fontSize: 20)),
                FleatherField(
                  //scrollController: _scrollController,
                  //scrollable: false,
                  autofocus: true,
                  showCursor: true,
                  autocorrect: false,
                  enableSuggestions: false,
                  controller: section.fleatherController,
                )
              ]
            ],
          ),
        ),
      ),
    );
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions