Я работаю над приложением Flutter, которое использует WebView для загрузки определенной веб-страницы. Я хочу использовать кнопку «Назад», чтобы, если пользователь переходит на другую страницу веб-сайта из WebView, он переходил на предыдущую страницу, как в браузере, в противном случае он переходил на главный экран приложения. WebView находится на странице Page3, которая находится под индексом 2. Но если пользователь не может вернуться на другие страницы внутри WebView, он должен перевести пользователя на страницу Page1, которая является главным экраном для приложение.
Я внедрил PopScope. Однако при нажатии кнопки «Назад» вместо этого я получаю черный экран в приложении.
Ниже приведены мои коды.
WebView Страница
@override
Widget build(BuildContext context) {
return PopScope(
canPop: true,
onPopInvokedWithResult: (didPop, result) async {
if (await controller.canGoBack()) {
await controller.goBack();
} else {
SystemNavigator.pop();
}
},
child: Scaffold(
backgroundColor: const Color(0xFF000000),
body: Padding(
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).size.height * 0.01),
child: SafeArea(
child: WebViewWidget(
controller: controller,
),
),
),
),
);
}
navbar_widget.dart
class BottomNavbar extends StatelessWidget {
const BottomNavbar({super.key});
@override
Widget build(BuildContext context) {
return GetBuilder(
builder: (controller) => Scaffold(
extendBody: true,
appBar: AppbarWidget(tabIndex: controller.tabIndex),
bottomNavigationBar: CurvedNavigationBar(
index: controller.tabIndex,
onTap: (val) {
controller.updateIndex(val);
},
items: const [
Icon(Icons.page_1),
Icon(Icons.page_2),
Icon(Icons.page_3),
Icon(Icons.page_4),
Icon(Icons.page_5),
],
),
body: Padding(
padding:
EdgeInsets.only(top: MediaQuery.of(context).size.height * 0.018),
child: SafeArea(
bottom: false,
child: IndexedStack(
index: controller.tabIndex,
children: const [
PageOne(),
PageTwo(),
PageThree(),
PageFour(),
PageFive(),
],
),
),
),
),
);
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... ack-screen