Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

getSelectedText on inactive InputConnection flutter

I have this weird problem,When i try to enter value to textfield the keyboard comes up when i try to type the the keyboard goes away , i am also doing fill up Username,Place,mobile that i fetching from sharedprefrence and it's working,but when i try to enter age,height,weight keyboard comes up & goes with in seconds,this is the error/warning i am getting,there is no problem in flutter doctor,

W/IInputConnectionWrapper(23904): getSelectedText on inactive InputConnection
W/IInputConnectionWrapper(23904): getTextAfterCursor on inactive InputConnection
W/IInputConnectionWrapper( 8756): beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper( 8756): endBatchEdit on inactive InputConnection

Code & View

class RegistrationScreenState extends State<RegistrationScreen> {

 TextEditingController mobile = TextEditingController();
  TextEditingController Username = TextEditingController();
  TextEditingController Place = TextEditingController();
  TextEditingController age = TextEditingController();
  TextEditingController height = TextEditingController();
  TextEditingController weight = TextEditingController();

  void initState() {
    getDetails();

  }

  @override
  Widget build(BuildContext context) {
    Size size = MediaQuery
        .of(context)
        .size;
    return Scaffold(
      appBar: AppBar(
        title: Text("Registration", style: TextStyle(color: Colors.black)),
        backgroundColor: Colors.orange,
      ),
      body: SingleChildScrollView(
        child: Stack(
          children: [
            Column(
              children: [
                Container(
                  child: Image.asset('assets/images/gym.png',
                      height: 150,
                      width: double.infinity,
                      fit: BoxFit.fitWidth),
                ),
                SizedBox(
                  height: 50,
                ),
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: <Widget>[
                    Expanded(
                      child: Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: TextField(
                          controller: Username,
                          decoration: InputDecoration(
                            prefixIcon: Icon(Icons.perm_identity),
                          ),
                        ),
                      ),
                    ),
                    Expanded(
                      child: Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: TextField(
                          controller: mobile,
                          decoration: InputDecoration(
                            prefixIcon: Icon(Icons.mobile_screen_share),
                          ),
                        ),
                      ),
                    ),
                  ],
                ),
                Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: Align(
                      alignment: Alignment.centerLeft,
                      child: Text(
                        "User Information",
                        style: TextStyle(
                            fontSize: 15, fontWeight: FontWeight.bold),
                      )),
                ),
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: <Widget>[
                    Expanded(
                      child: Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: TextField(
                          controller: Place,
                          decoration: InputDecoration(),
                        ),

                      ),
                    ),
                    Expanded(
                      child: Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: TextField(
                          controller: age,
                          decoration: InputDecoration(
                            hintText: 'Age',
                          ),
                        ),
                      ),
                    ),
                  ],
                ),
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: <Widget>[
                    Expanded(
                      child: Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: TextField(
                          controller: height,
                          decoration: InputDecoration(
                            hintText: 'Height(in cm)',
                          ),
                        ),
                      ),
                    ),
                    Expanded(
                      child: Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: TextField(
                          controller: weight,
                          decoration: InputDecoration(
                            hintText: 'Weight(in kg)',
                          ),
                        ),
                      ),
                    ),
                  ],
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }


  //  get & fill Shareprefrece data to textfield
  getDetails() async {
    Future user = SharedPrefrence().getUserMobile();
    Future name = SharedPrefrence().getUserName();
    Future place = SharedPrefrence().getUserPlace();

    user.then((data) async {
      var mobile_no = data;
      setState(() {
        if (mobile_no.isNotEmpty) {
          mobile.text = mobile_no;
        }
        else
          {
            mobile.text = "";
          }
      });
    });

    name.then((data) async {
      var user_name = data;
      setState(() {
        if (user_name.isNotEmpty) {
          Username.text = user_name;
        }
      });
    });

    place.then((data) async {
      var user_place = data;
      setState(() {
        if (user_place.isNotEmpty) {
          Place.text = user_place;
        }
      });
    });
  }



}
like image 496
Abhijith Avatar asked May 22 '20 10:05

Abhijith


4 Answers

I am not sure that if this will help you but I was also facing the same issue. I was getting this error when I was using the TextFormField with in Form and the issue was that I created the global form key with in the build method.

class _AddTaskState extends State<AddTask> {
final _formKey = GlobalKey<FormState>(); // <-
String name;
String description;
@override
Widget build(BuildContext context) {
 // first I was using that here.
return Scaffold(
like image 111
Aashar Wahla Avatar answered Nov 05 '22 23:11

Aashar Wahla


In my case I had TextFeild in AnimatedSwitcher. The problem was i had key: UniqueKey() inside my widget that containes the TextFeild. So When ever i touched the text feid UniqueKey() gets called and then the widget tree gets regernated.

like image 21
Abel Tilahun Avatar answered Nov 05 '22 23:11

Abel Tilahun


If you are using form validator, move your form key out of your build context. This should solve your issue.

Instead of -

class SingInScreen extends StatelessWidget {
final _sigInFormKey = GlobalKey<FormState>();
  @override
  Widget build(BuildContext context) {
    Size size = getRelativeSize(context);

Use this-

`final _sigInFormKey = GlobalKey<FormState>();

class SingInScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    Size size = getRelativeSize(context);`
like image 7
Naimul Kabir Avatar answered Nov 05 '22 21:11

Naimul Kabir


Known issue, tracked here,it's still there. There is no explanation on what's causing it.

I did a little bit of digging. It looks like Android is generating these warnings because we are holding the InputConnection incorrectly in the Engine's TextInputPlugin. I haven't really figured out what we're doing wrong, though.

source

like image 7
Abhijith Avatar answered Nov 05 '22 22:11

Abhijith