#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. спасибо, что я решил проблему с этим последним обратным вызовом? Включено; вместо окончательного обратного вызова пустоты включено в описании кнопки с повышенным уровнем