Повышенная кнопка, которую можно нажать только один раз-Трепещите

#flutter

#трепетать

Вопрос:

у меня есть повышенная кнопка для анонимного входа. Когда я нажимаю кнопку, она автоматически создает идентификатор пользователя и перенаправляет его на домашнюю страницу, но если я отправляю спам, пока домашняя страница не появится на экране, она создает множество разных идентификаторов пользователей. я хочу, чтобы кнопка была недоступна после одного нажатия, как я могу это сделать? Когда я пытаюсь таким образом, я получаю ошибку, тип аргумента «Функция будущего ()?» не может быть присвоен типу параметра » Функция пустоты ()», потому что «Функция будущего ()?» может быть обнулена, а «Функция пустоты ()» — нет.

 MyElevatedButton(  child: Text('Sign In Anonymously'),  color: Colors.yellowAccent,  onPressed: _isLoading  ? null  : () async {  setState(() {  _isLoading = true;  });  final user =  await Provider.oflt;Authgt;(context, listen: false)  .signInAnonymously();  },  ),  

Ответ №1:

Создайте bool , чтобы отслеживать событие щелчка в классе состояния

bool _isClicked = false;

Если пользователь нажмет на нее, сделайте ее истинной и продолжите операцию.

 ElevatedButton(  onPressed: _isClicked  ? null  : () {  setState(() {  _isClicked = true;  });  //rest code  },  child: Text(""),  ),  

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

1. я получил эту ошибку, когда я делаю это Ошибка: тип аргумента «Будущая функцияlt;voidgt; ()?» не может быть присвоен типу параметра » Функция void ()», потому что «Будущая функцияlt;voidgt;lt;voidgt; ()?» может быть обнулена, а «Функция void ()» — нет. — «Будущее» происходит от «dart:асинхронность». ? нулевой

2. Можете ли вы включить MyElevatedButton класс или сделать его недействительным.

3. onPressed функция , сделайте ее недействительной на MyElevatedButton

4. спасибо, я решил эту проблему с помощью окончательного обратного вызова? Нажата

Ответ №2:

Если вы используете виджет с отслеживанием состояния, просто добавьте переменную для проверки обработки.

 Awidget Stateful... {  bool isProcessing = false;   ...  MyElevatedButton(  ...  onPressed: isProcessing ? null : () async {  setState(() {  isProcessing = true;  });  final user = await Provider.oflt;Authgt;(context, listen: false)  .signInAnonymousle();  setState(() {  isProcessing = false;  });  ... }  

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

1. я получил эту ошибку, когда я делаю это Ошибка: тип аргумента «Будущая функцияlt;voidgt; ()?» не может быть присвоен типу параметра » Функция void ()», потому что «Будущая функцияlt;voidgt;lt;voidgt; ()?» может быть обнулена, а «Функция void ()» — нет. — «Будущее» происходит от «dart:асинхронность». ? нулевой

2. Пожалуйста, дайте мне знать определение MyElevatedButton. Я хочу знать, какой тип нажат.

3. спасибо, что я решил проблему с этим последним обратным вызовом? Включено; вместо окончательного обратного вызова пустоты включено в описании кнопки с повышенным уровнем