#ios #flutter #flutter-layout
Вопрос:
Я создаю приложение, в котором у меня есть полный ручной контроль над каждым нажатием кнопки «Назад».
У меня в основном меняются виджеты/представления в моем приложении вместо того, чтобы навигатор нажимал и открывал новые экраны.
Я создал функцию, в которой я могу отображать представления 1,2 и 3. и вернуться назад с помощью кнопки «Назад» на Android. однако в случае iOS жест назад не работает, и я не могу изменить взгляды.
есть какие-нибудь обходные пути? Помощь была бы признательна
Future<bool> goBackward(){
if(_isButtonPressed) {
if(currentView == 0)
{
return Future<bool>.value(true);
}
else if(currentView == 1)
{
currentView = 0;
notifyListeners();
return Future<bool>.value(false);
}
else
{
currentView = 2;
notifyListeners();
return Future<bool>.value(false);
}
}
}
выше приведена минимальная версия кода. когда я возвращаю true, это означает, что я готов открыть экран при нажатии назад
Комментарии:
1. Вы пробовали использовать кнопку flutter купертино?
2. Кнопка Купертино — это простой виджет кнопок. как это могло бы мне помочь?
3. потому что он поддерживает ios лучше, чем кнопка MaterialApp.
4. Пожалуйста, прочитайте вопрос еще раз, прежде чем отвечать. WillPopScope не имеет ничего общего с кнопкой «Материал» или кнопкой «купертино».
Ответ №1:
После поиска в Интернете и перепробования многочисленных пакетов, таких как cupertino_will_pop_scope и back_button_interceptor, я обнаружил, что ни один из них не работал для моего варианта использования.
cupertino_will_pop_scope был промахом и попаданием, так что иногда это срабатывало, а иногда нет.
вот решение для тех, кто еще не нашел ответа на этот вопрос.
как я уже упоминал ранее, WillPopScope отлично работает на Android, поэтому там не нужно менять функциональность.
однако для IOS я использовал детектор жестов, чтобы обнаружить свайп от левого жеста и выполнять свои действия соответственно.
if(!Platform.isIOS)
{
//When OS is Android return the view as is
return MyView;
}
else{
//When OS is iOS return the view as is wrapped with GestreDetector
return GestureDetector(
onHorizontalDragUpdate: (details) {
//set the sensitivity for your ios gesture anywhere between 10-50 is good
int sensitivity = Integers().iosSwipeSensitivity;
if (details.delta.dx > sensitivity) {
//SWIPE FROM RIGHT DETECTION
goBackward();
}
},
child: MyView;
);
}