Возврат недопустимого типа, но не знаете почему? Флаттер/Дротик

#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