Skip to content

TextInputFormatter gets wrong old value of a selection #75502

@siqwin

Description

@siqwin

TextInputFormatter gets wrong old value of a selection after character deletion when keyboardType is TextInputType.phone.

Example

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

void main() => runApp(App());

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: SafeArea(
          child: TextField(
            controller: TextEditingController()..text = '123',
            inputFormatters: [SomeFormatter()],
            keyboardType: TextInputType.phone,
          ),
        ),
      ),
    );
  }
}

class SomeFormatter extends TextInputFormatter {
  @override
  TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) {
    print(oldValue);
    return newValue;
  }
}

Steps to reproduce: run example, tap on text field, press backspace ones

Expected result: TextEditingValue(text: ┤123├, selection: TextSelection(baseOffset: 3, extentOffset: 3, affinity: TextAffinity.upstream, isDirectional: false), composing: TextRange(start: -1, end: -1))

Actual result: TextEditingValue(text: ┤123├, selection: TextSelection(baseOffset: 2, extentOffset: 2, affinity: TextAffinity.downstream, isDirectional: false), composing: TextRange(start: -1, end: -1))

Tested on version 1.26, probably reproduced since version 1.23.

Flutter Doctor
[√] Flutter (Channel dev, 1.26.0-17.2.pre, on Microsoft Windows [Version 10.0.19041.746], locale ru-RU)
[√] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
[√] Chrome - develop for the web
[√] Visual Studio - develop for Windows (Visual Studio Community 2019 16.5.2)
[√] Android Studio (version 4.1.0)

Metadata

Metadata

Assignees

Labels

c: regressionIt was better in the past than it is nowf: material designflutter/packages/flutter/material repository.found in release: 1.26Found to occur in 1.26frameworkflutter/packages/flutter repository. See also f: labels.has reproducible stepsThe issue has been confirmed reproducible and is ready to work on

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions