Я обновил свой проект до нулевой безопасности, как они описывают здесь дротик мигрировать. Я применил все предложения, но на одном из экранов появляется ошибка. Как я могу это исправить?
Future<bool> systemBackButtonPressed() {
if (navigatorKeys[profileController.selectedIndex.value]!
.currentState!
.canPop()) {
navigatorKeys[profileController.selectedIndex.value]!.currentState!.pop(
navigatorKeys[profileController.selectedIndex.value]!.currentContext);
} else {
SystemChannels.platform.invokeMethod<void>('SystemNavigator.pop');
}
}
Использование здесь:
Widget build(BuildContext context) {
print(":}");
return Obx(
() => AnimatedContainer(
height: Get.height,
width: Get.width,
curve: Curves.bounceOut,
decoration: BoxDecoration(
boxShadow: [
BoxShadow(
color: Color(0xff40000000),
spreadRadius: 0.5,
blurRadius: 20,
),
],
),
transform: Matrix4.translationValues(
drawerOpen.xOffset!.value,
drawerOpen.yOffset!.value,
0,
)..scale(drawerOpen.scaleFactor!.value),
duration: Duration(
milliseconds: 250,
),
child: WillPopScope(
onWillPop: systemBackButtonPressed,
child: InkWell(
onTap: () {
drawerOpen.xOffset!.value = 0;
drawerOpen.yOffset!.value = 0;
drawerOpen.scaleFactor!.value = 1.0;
drawerOpen.isChange(false);
},
child: Scaffold(
backgroundColor: pageBackGroundC,
resizeToAvoidBottomInset: false,
body: GetBuilder<ProfileController>(
init: ProfileController(),
builder: (s) => IndexedStack(
index: s.selectedIndex.value,
children: <Widget>[
// LogInScreen(),
NavigatorPage(
child: WatchListScreen(),
title: "Borsa",
navigatorKey: navigatorKeys[0],
),
NavigatorPage(
child: OrderScreen(),
title: "Halka Arz",
navigatorKey: navigatorKeys[1],
),
NavigatorPage(
child: PortFolioScreen(),
title: "Sermaye Artırımları",
navigatorKey: navigatorKeys[2],
),
NavigatorPage(
child: FundScreen(),
title: "Haberler",
navigatorKey: navigatorKeys[3],
),
NavigatorPage(
child: AccountScreen(),
title: "Hesabım",
navigatorKey: navigatorKeys[4],
),
],
),
),
bottomNavigationBar: SuperFaBottomNavigationBar(),
),
),
),
),
);
}
«Тело может завершиться нормально, что приведет к возврату 'null', но тип возвращаемого значения 'Future<bool>' является потенциально необнуляемым типом» — это ошибка сначала Future<bool> systemBackButtonPressed() {





Обновлено: добавьте ключевое слово async после имени вашей функции, как это Future<bool> systemBackButtonPressed() async {...
Будущее<bool> указывает, что функция возвращает логическое значение, поэтому она не может возвращать нулевое значение. Тем не менее, вы не используете операторы return внутри своей функции, поэтому в основном она возвращает null. Поэтому вы получаете эту ошибку. Чтобы решить эту проблему, просто добавьте операторы возврата в свои функции или просто преобразуйте Будущее<bool> в Будущее <пусто>.
Пример:
Future<bool> systemBackButtonPressed() {
if (navigatorKeys[profileController.selectedIndex.value]!
.currentState!
.canPop()) {
navigatorKeys[profileController.selectedIndex.value]!.currentState!.pop(
navigatorKeys[profileController.selectedIndex.value]!.currentContext);
return true; //You just need to add this line
} else {
SystemChannels.platform.invokeMethod<void>('SystemNavigator.pop');
return false; //You need to add return conditions for all cases.
}
}
Если вы не хотите использовать операторы возврата, просто преобразуйте свою логическую возвращающую будущую функцию в пустую возвращающую будущую функцию.
Вместо
Future<bool> systemBackButtonPressed()
Использовать
Future<void> systemBackButtonPressed()
Спасибо, но оба метода не работают. Если я добавлю «return», как вы описали, я получаю «ошибку: значение типа« bool »не может быть возвращено из метода« systemBackButtonPressed », потому что он имеет возвращаемый тип« Future<bool> »». ошибка
И если я конвертирую в void, я получаю эту ошибку «ошибка: тип аргумента« Future<void> Function () »не может быть назначен типу параметра« Future <bool> Function ()? »».
О, я пропустил тот факт, что вы забыли добавить ключевое слово async в свою функцию.
Ваш systemBackButtonPressed() ничего не возвращает, и он должен возвращать Future логического значения. Вы можете добиться возврата будущего, если отметите его как async, а чтобы вернуть логическое значение, просто добавьте return в конце:
Future<bool> systemBackButtonPressed() async {
if (navigatorKeys[profileController.selectedIndex.value]!
.currentState!
.canPop()) {
navigatorKeys[profileController.selectedIndex.value]!.currentState!.pop(
navigatorKeys[profileController.selectedIndex.value]!.currentContext);
} else {
SystemChannels.platform.invokeMethod<void>('SystemNavigator.pop');
}
return true;
}
В чем ошибка?