'Flutter TextField "Changing the content within the the composing region may cause the input"

I created a new Flutter app and I'm trying to set an initial value in a TextField widget using a process I've used before in several apps. Whenever I edit content in the field, the Android Studio Run window displays:

W/TextInputPlugin(18696): Changing the content within the the composing region may cause the input method to behave strangely, and is therefore discouraged. See https://github.com/flutter/flutter/issues/78827 for more details
W/IInputConnectionWrapper(18696): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper(18696): getSelectedText on inactive InputConnection
W/IInputConnectionWrapper(18696): getTextAfterCursor on inactive InputConnection
W/IInputConnectionWrapper(18696): beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper(18696): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper(18696): endBatchEdit on inactive InputConnection

When I look at the referenced link, I don't see anything there that describes the solution.

To test this, I made a new, clean app with just a Text widget and the TextEdit widget and I still get the same issue. I'm not doing anything except setting the default value. Ultimately I want to capture changes to the input field and write the value to local storage, but I thought I'd fix this input error first.

Here's the code for my test app:

import 'package:flutter/material.dart';

const appName = 'TextField Test';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: appName,
      debugShowCheckedModeBanner: false,
      theme: ThemeData.light(),
      darkTheme: ThemeData.dark(),
      home: HomePage(title: appName),
    );
  }
}

class HomePage extends StatefulWidget {
  HomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  late TextEditingController textEditingController;
  String _inputValue = '';

  @override
  void initState() {
    super.initState();
    textEditingController = TextEditingController(text: _inputValue);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text(widget.title),
        ),
        body: Padding(
          padding: const EdgeInsets.all(10.0),
          child:
              Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
            Text('This is some content in a Text widget'),
            SizedBox(height: 10),
            TextField(
              autofocus: true,
              decoration: InputDecoration(
                  border: OutlineInputBorder(),
                  hintText: 'Enter some text here'),
              controller: textEditingController,
            ),
          ]),
        ));
  }
}

Can someone please tell me what I'm doing wrong?

When I add a listener to the controller, I noticed that its firing multiple times for every character I type:

I/flutter (18696): Listener fired the e
I/flutter (18696): Listener fired the e
I/flutter (18696): Listener fired the en
I/flutter (18696): Listener fired the en

Here's the listener code:

 @override
  void initState() {
    super.initState();
    textEditingController = TextEditingController(text: _inputValue);
    textEditingController.addListener(() {
      print('Listener fired ${textEditingController.text}');
    });
  }


Solution 1:[1]

Unfortunately, this looks like a longstanding issue that has yet to be resolved by the Flutter team according to this thread: https://github.com/flutter/flutter/issues/9471. I'm running into the same issue.

Solution 2:[2]

This is just a warning. ?f it bothers you don't use computer keyboard, instead use virtual keyboard on the simulator.

Solution 3:[3]

try add static keyword .

 static late TextEditingController textEditingController;

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 johnnycopes
Solution 2 Arif Ömer Karaçuha
Solution 3 Eslam Shaban