#flutter #dart #bluetooth-lowenergy
#трепетать #дротик #bluetooth-низкое энергопотребление
Вопрос:
Эй, я совершенно новичок в flutter, и в последнее время я работаю над мобильным приложением, которое получает данные от ESP32 через BLE, но у меня возникла проблема, если я хочу попросить пользователя отключиться от устройства, как это:
Futurelt;boolgt; _onWillPop() { return showDialog( context: context, builder: (context) =gt; new AlertDialog( title: Text('Are you sure?'), content: Text('Do you want to disconnect device and go back?'), actions: lt;Widgetgt;[ new ElevatedButton( onPressed: () =gt; Navigator.of(context).pop(false), child: new Text('No')), new ElevatedButton( onPressed: () { disconnectFromDevice(); Navigator.of(context).pop(true); }, child: new Text('Yes')), ], ) ?? false); }
Это дает мне предупреждения об ошибках:
A value of type 'Futurelt;dynamicgt;' can't be returned from the method '_onWillPop' because it has a return type of 'Futurelt;boolgt;'. The return type 'Object' isn't a 'Widget', as required by the closure's context.
Но с моими нынешними знаниями я не знаю, как решить свою проблему. Я был бы чрезвычайно благодарен, если бы кто-нибудь мог мне помочь 🙂 и приношу извинения за любые грамматические ошибки
Ответ №1:
Ошибка говорит о том, что return
тип showDialog
не является bool. Вместо этого вы можете просто заменить на ожидание, а затем вернуть bool.
Ниже приведен код, который вы можете разместить.
Futurelt;boolgt; _onWillPop(BuildContext context) async { bool shouldPop = false; await showDialog( context: context, builder: (context) =gt; AlertDialog( title: const Text('Are you sure?'), content: const Text('Do you want to disconnect device and go back?'), actions: lt;Widgetgt;[ ElevatedButton( onPressed: () { // shouldPop is already false }, child: const Text('No')), ElevatedButton( onPressed: () async { await disconnectFromDevice(); Navigator.of(context).pop(); shouldPop = true; }, child: const Text('Yes')), ], )); return shouldPop; }
Я немного изменил код, чтобы он возвращал значение false, если вы не хотите всплывать, и возвращал значение true, если вы хотите всплывать. Вы можете просто изменить код в соответствии с вашими требованиями.
Комментарии:
1. Большое вам спасибо, теперь это работает!
2. Добро пожаловать, пожалуйста, можете ли вы принять ответ и проголосовать за него, если сочтете его полезным. Это поможет другим, у кого может возникнуть та же проблема. Спасибо.
Ответ №2:
Будущееlt;T?gt; ShowDialog
Futurelt;T?gt; showDialoglt;Tgt;( {required BuildContext context, required WidgetBuilder builder, bool barrierDismissible = true,
нет необходимости в return