Backspace мобильного приложения Flutter удаляет 2 символа вместо 1

#flutter #keyboard

#флаттер #клавиатура

Вопрос:

У меня есть страница, на которой будет отображаться modalbottomsheet, когда я нажимаю на кнопку. В modalbottomsheet у него есть поле ввода, в которое я могу вводить значения. Однако, когда я нажимаю backspace, он удаляет 2 символа вместо 1. Кто-нибудь знает, в чем проблема, поскольку консоль ничего не показывает. Ниже приведены коды для modalbottomsheet

 _showCouponDetails(String coupon, bool couponStatus){
    int shopPinCode;
    int pinCode;
    final FocusNode _pinPutFocusNode = FocusNode();
    final TextEditingController _pinPutController = TextEditingController();

    return showModalBottomSheet(
        isScrollControlled: true,
        context: context,
        builder:(BuildContext context) =>
          GestureDetector(
            onTap: () {
              FocusScope.of(context).requestFocus(FocusNode());
            },
            child: Container(
                width: screenWidth,
                color: Colors.white,
                child: Column(
                  mainAxisSize: MainAxisSize.max,
                  mainAxisAlignment: MainAxisAlignment.start,
                  children: [
                    SizedBox(height: 24),
                    Padding(
                        padding: EdgeInsets.symmetric(horizontal: 10),
                        child: Text(coupon,
                                style: TextStyle(
                                  fontSize: 25,
                                  fontWeight: FontWeight.bold
                                )),
                        ),

                    couponStatus? Text(''):Image.asset('images/Redeemed.png', width: 100, height: 100),
                    Center(child:
                      Text('Expires on 31/12/2020')),
                    Container(
                      height: 100,
                      width: screenWidth*0.8,
                      decoration: BoxDecoration(
                        borderRadius: BorderRadius.circular(15),
                        color: Colors.grey[200]
                      ),
                      child: Padding(
                        padding: EdgeInsets.all(10),
                        child: Center(
                          child: Column(
                            children: [
                              Text('Please ask the workshop to enter pin.'),
                              SizedBox(height: 10),
                              PinPut(
                                fieldsCount: 5,
                                focusNode: _pinPutFocusNode,
                                controller: _pinPutController,
                                eachFieldHeight: 30,
                              eachFieldWidth: 30,
                              selectedFieldDecoration: BoxDecoration(
                                border: Border.all(color: Colors.purple),
                                borderRadius: BorderRadius.circular(15)
                              ),
                              followingFieldDecoration: BoxDecoration(
                                  border: Border.all(color: Colors.purple),
                                  borderRadius: BorderRadius.circular(15),
                              ),
                              submittedFieldDecoration: BoxDecoration(
                                  border: Border.all(color: Colors.purple),
                                  borderRadius: BorderRadius.circular(15),
                              ),
                              onChanged: (_pinPutController){
                                  if (_pinPutController.isNotEmpty)
                                    pinCode = int.parse(_pinPutController);
                                    print (pinCode);
                                  },
                                ),
                            ]
                          )
                        ),
                      ),
                    ),
                    Spacer(),
                    Padding(
                      padding: EdgeInsets.all(10),
                      child: Row(
                        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                        children: [
                          InkWell(
                            onTap: () {
                              
                            },
                            child: Container(
                              height: screenHeight*0.05,
                              width: screenWidth *0.4,
                              decoration: BoxDecoration(
                                  borderRadius: BorderRadius.circular(15),
                                  color: kPrimaryColor
                              ),
                              child: Center(child: Text('Redeem', style: TextStyle(fontWeight: FontWeight.bold,color: Colors.white, fontSize: 15))),
                            ),
                          ),
                          InkWell(
                            onTap: (){
                              Navigator.pop(context);
                            },
                            child: Container(
                              height: screenHeight*0.05,
                              width: screenWidth *0.4,
                              decoration: BoxDecoration(
                                borderRadius: BorderRadius.circular(15),
                                border: Border.all(color: Colors.black),
                                color: Colors.white
                              ),
                              child: Center(child: Text('Cancel', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15))),
                            ),
                          ),
                        ],
                      ),
                    )
                  ],
                ),
              ),
          ),
      );
  }
 

Обновления: изображение включено. На картинке я ввел 1,2 и 3. Всякий раз, когда я нажимаю backspace, он удаляет 2 и 3 (рисунок 2). На рисунке 3 консоль дважды выводит число.

Рисунок 1 Рисунок 2 Рисунок 3

Ответ №1:

Вы говорите о добавлении чисел и обратном пробеле внутри числового поля? Что ж, это отлично работает во время моей компиляции. Если нет, не могли бы вы добавить скриншот проблемы.

Комментарии:

1. Здравствуйте, да, я говорю о числе внутри числового поля. Я добавил 2 изображения проблемы.

2. Привет, Рой, приложение работает отлично во время моей компиляции. Если проблема все еще сохраняется. Пожалуйста, проверьте, если: — 1. Обновлена до последней версии библиотеки pinput (я использовал последнюю) или любой библиотеки. 2. Попробуйте запустить приложение на физическом устройстве (это может сработать)

3. Спасибо. Я пробовал загружать на устройство, но оно все то же самое. Я также обновился до последней версии библиотеки, но по-прежнему сталкиваюсь с той же проблемой.

4. В моем коде. Если я все еще удерживаю кнопку backspace, это удаляет только один символ. Я хочу сделать так, чтобы, когда мы удерживаем клавишу backspace, все символы начинают удаляться, но я могу удалить только один символ. как я могу этого добиться?

Ответ №2:

Я исправил эту проблему, изменив свой канал флаттера. Я использовал бета-версию flutter channel, и, по-видимому, это backspace — ошибка. После переключения на стабильный канал flutter все было в порядке.

Чтобы проверить свой канал flutter, введите следующее в terminal flutter —version

Чтобы изменить канал флаттера, введите следующее в главном канале флаттера терминала