Skip to content

Multiline TextField jumps upon selecting text when cursor is off-screen #131936

Closed

Description

@joshminton

Is there an existing issue for this?

Steps to reproduce

  1. Run the sample code.
  2. Paste a large quantity of text (eg. 5 paragraphs from https://loremipsum.io/) into the TextField. (note the same behaviour occurs with TextFormField)
  3. Scroll to bottom of TextField and place cursor within the text.
  4. Scroll up so cursor is off screen.
  5. Long-press anywhere within the text to select a word.

Expected results

The selected word should be higlighted

Actual results

The TextField jumps down to the bottom where the cursor was in step 3, so highlighted text is now off screen (or a large amount of text may have been highlighted instead of a single word).

Code sample

Code sample
import 'dart:io';

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

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

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

  @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 _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: TextField(
        selectionControls: Platform.isIOS ? CupertinoTextSelectionControls() : MaterialTextSelectionControls(),
        autofocus: true,
        textCapitalization: TextCapitalization.sentences,
        maxLines: null,
      ),
    );
  }
}

Screenshots or Video

Screenshots / Video demonstration

[Upload media here]

text_field_scroll_bug.mov

Logs

Logs
[Paste your logs here]

Flutter Doctor output

Doctor output
[✓] Flutter (Channel stable, 3.10.1, on macOS 13.3.1 22E772610a darwin-arm64, locale en-GB)
    • Flutter version 3.10.1 on channel stable at /opt/homebrew/Caskroom/flutter/3.0.0/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision d3d8effc68 (3 months ago), 2023-05-16 17:59:05 -0700
    • Engine revision b4fb11214d
    • Dart version 3.0.1
    • DevTools version 2.23.1

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/joshminton/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0
    • Java binary at: /Applications/Android Studio 2.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.3.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14E300c
    • CocoaPods version 1.12.0

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)

[✓] Android Studio (version 2022.1)
    • Android Studio at /Applications/Android Studio 2.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)

[✓] Connected device (3 available)
    • Pixel 7 (mobile) • 2B171FDH2008K5 • android-arm64  • Android 13 (API 33)
    • macOS (desktop)  • macos          • darwin-arm64   • macOS 13.3.1 22E772610a darwin-arm64
    • Chrome (web)     • chrome         • web-javascript • Google Chrome 115.0.5790.114

[✓] Network resources
    • All expected network resources are available.

• No issues found!

Activity

  1. danagbemava-nc commented on Aug 7, 2023

    @danagbemava-nc
    Member

    Hi @joshminton, I believe this has been fixed on the master channel. See the recording below.

    screen-20230807-070925.mp4

    Per our triage policy, I'll close this since it has been fixed on the master channel. If you still run into this issue on the master channel, kindly comment below and I will reopen this.

    Thank you

    Sample used
    import 'dart:io';
    
    import 'package:flutter/cupertino.dart';
    import 'package:flutter/material.dart';
    
    const text = """
    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    Cras ac enim quis mi luctus lacinia sit amet in neque.
    Pellentesque eu enim sit amet lorem posuere pretium ac quis ligula.
    Vivamus sit amet erat quis tortor cursus lobortis non tempus elit.
    Nulla ac elementum nisl. Curabitur vehicula, nibh sit amet elementum lacinia, lorem arcu facilisis ex, ut tristique turpis ex in lectus.
    Donec eu fermentum ipsum. Praesent euismod id eros vitae vulputate. Donec lobortis scelerisque augue, vitae vulputate ipsum.
    Aenean sodales, augue hendrerit feugiat posuere, tortor dui tempus risus, et commodo ipsum augue a metus.
    Pellentesque consectetur lacus ut blandit dignissim. In tempus eu felis nec suscipit.
    Mauris viverra felis efficitur mi pellentesque fringilla.
    Sed fermentum eu arcu ac lobortis. Phasellus euismod ante metus, quis rutrum neque iaculis et.
    Sed vel mollis risus. Sed luctus sem id consequat commodo.
    Nulla enim magna, volutpat quis ligula quis, ornare sodales erat.
    Maecenas aliquam diam sit amet urna congue, vel rhoncus elit feugiat.
    Pellentesque ut ante posuere, maximus erat et, viverra quam.
    Aliquam varius sapien quis fringilla convallis. Sed interdum neque ipsum, a porttitor ligula lobortis at. Fusce tempus felis hendrerit dignissim placerat.
    """;
    
    void main() {
      runApp(const MyApp());
    }
    
    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @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 _MyHomePageState extends State<MyHomePage> {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            backgroundColor: Theme.of(context).colorScheme.inversePrimary,
            title: Text(widget.title),
          ),
          body: TextField(
            controller: TextEditingController(text: text * 100) ,
            selectionControls: Platform.isIOS ? CupertinoTextSelectionControls() : MaterialTextSelectionControls(),
            autofocus: true,
            textCapitalization: TextCapitalization.sentences,
            maxLines: null,
          ),
        );
      }
    }
    flutter doctor -v(master)
    [✓] Flutter (Channel master, 3.13.0-17.0.pre.76, on macOS 13.4.1 22F770820d darwin-arm64, locale en-GB)
        • Flutter version 3.13.0-17.0.pre.76 on channel master at /Users/nexus/dev/sdks/flutters
        • Upstream repository https://github.com/flutter/flutter.git
        • Framework revision bfbe79feb2 (5 hours ago), 2023-08-06 21:47:34 -0400
        • Engine revision 15b5707af4
        • Dart version 3.2.0 (build 3.2.0-41.0.dev)
        • DevTools version 2.26.1
    
    [✓] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
        • Android SDK at /Users/nexus/Library/Android/sdk
        • Platform android-33, build-tools 33.0.1
        • Java binary at: /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/223.8836.35.2231.10406996/Android Studio.app/Contents/jbr/Contents/Home/bin/java
        • Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b829.9-10027231)
        • All Android licenses accepted.
    
    [✓] Xcode - develop for iOS and macOS (Xcode 14.3)
        • Xcode at /Applications/Xcode-14.3.0.app/Contents/Developer
        • Build 14E222b
        • CocoaPods version 1.12.1
    
    [✓] Chrome - develop for the web
        • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
    
    [✓] Android Studio (version 2022.2)
        • Android Studio at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/222.4459.24.2221.10121639/Android Studio.app/Contents
        • Flutter plugin can be installed from:
          🔨 https://plugins.jetbrains.com/plugin/9212-flutter
        • Dart plugin can be installed from:
          🔨 https://plugins.jetbrains.com/plugin/6351-dart
        • Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b802.4-9586694)
    
    [✓] Android Studio (version 2022.3)
        • Android Studio at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/223.8836.35.2231.10406996/Android Studio.app/Contents
        • Flutter plugin can be installed from:
          🔨 https://plugins.jetbrains.com/plugin/9212-flutter
        • Dart plugin can be installed from:
          🔨 https://plugins.jetbrains.com/plugin/6351-dart
        • Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b829.9-10027231)
    
    [✓] IntelliJ IDEA Ultimate Edition (version 2023.1.4)
        • IntelliJ at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/231.9225.16/IntelliJ IDEA.app
        • Flutter plugin can be installed from:
          🔨 https://plugins.jetbrains.com/plugin/9212-flutter
        • Dart plugin can be installed from:
          🔨 https://plugins.jetbrains.com/plugin/6351-dart
    
    [✓] IntelliJ IDEA Ultimate Edition (version 2023.2)
        • IntelliJ at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/232.8660.185/IntelliJ IDEA.app
        • Flutter plugin can be installed from:
          🔨 https://plugins.jetbrains.com/plugin/9212-flutter
        • Dart plugin can be installed from:
          🔨 https://plugins.jetbrains.com/plugin/6351-dart
    
    [✓] VS Code (version 1.81.0)
        • VS Code at /Applications/Visual Studio Code.app/Contents
        • Flutter extension version 3.70.0
    
    [✓] Connected device (4 available)
        • Pixel 7 (mobile) • 28291FDH2001SA            • android-arm64  • Android 13 (API 33)
        • Nexus (mobile)   • 00008020-001875E83A38002E • ios            • iOS 16.6 20G75
        • macOS (desktop)  • macos                     • darwin-arm64   • macOS 13.4.1 22F770820d darwin-arm64
        • Chrome (web)     • chrome                    • web-javascript • Google Chrome 115.0.5790.114
    
    [✓] Network resources
        • All expected network resources are available.
    
    • No issues found!
    
  2. added
    r: fixedIssue is closed as already fixed in a newer version
    and removed
    in triagePresently being triaged by the triage team
    on Aug 7, 2023
  3. github-actions commented on Aug 21, 2023

    @github-actions

    This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of flutter doctor -v and a minimal reproduction of the issue.

  4. locked as resolved and limited conversation to collaborators on Aug 21, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    r: fixedIssue is closed as already fixed in a newer version

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions