#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:
Вы говорите о добавлении чисел и обратном пробеле внутри числового поля? Что ж, это отлично работает во время моей компиляции. Если нет, не могли бы вы добавить скриншот проблемы.
Комментарии:
1. Здравствуйте, да, я говорю о числе внутри числового поля. Я добавил 2 изображения проблемы.
2. Привет, Рой, приложение работает отлично во время моей компиляции. Если проблема все еще сохраняется. Пожалуйста, проверьте, если: — 1. Обновлена до последней версии библиотеки pinput (я использовал последнюю) или любой библиотеки. 2. Попробуйте запустить приложение на физическом устройстве (это может сработать)
3. Спасибо. Я пробовал загружать на устройство, но оно все то же самое. Я также обновился до последней версии библиотеки, но по-прежнему сталкиваюсь с той же проблемой.
4. В моем коде. Если я все еще удерживаю кнопку backspace, это удаляет только один символ. Я хочу сделать так, чтобы, когда мы удерживаем клавишу backspace, все символы начинают удаляться, но я могу удалить только один символ. как я могу этого добиться?
Ответ №2:
Я исправил эту проблему, изменив свой канал флаттера. Я использовал бета-версию flutter channel, и, по-видимому, это backspace — ошибка. После переключения на стабильный канал flutter все было в порядке.
Чтобы проверить свой канал flutter, введите следующее в terminal flutter —version
Чтобы изменить канал флаттера, введите следующее в главном канале флаттера терминала