В моем приложении Flutter у меня есть страница, которая загружает веб -сайт с использованием WebView. URL -адрес для веб -просмотра принимается через API, который хранится внутри переменной с именем pageurl . Когда пользователь нажимает на BottomNavbar , чтобы перейти на указанный экран, WebView будет перезагружаться (или повторно, не уверенный в правильной терминологии здесь). Он работает нормально. < /P>
Однако проблема, с которой я возникает, заключается в том, что, когда пользователь переходит на эту страницу, им нужно снова нажать кнопку для повторного повторного использования страницы. Я хочу, чтобы это было так, чтобы всякий раз, когда пользователь нажимает на кнопку для страницы, она просто повторно повторно повторно. Я приложил свой код ниже.class BottomNavbar extends StatelessWidget {
const BottomNavbar({super.key});
@override
Widget build(BuildContext context) {
return GetBuilder(
builder: (controller) => WillPopScope(
onWillPop: () async {
if (controller.tabIndex != 0) {
controller.updateIndex(0);
return false;
} else {
bool closeApp = await showDialog(
context: context,
builder: (context) => AlertDialog(
// Alert Dialog
],
),
);
return closeApp;
}
},
child: Scaffold(
extendBody: true,
appBar: AppbarWidget(tabIndex: controller.tabIndex),
bottomNavigationBar: CurvedNavigationBar(
index: controller.tabIndex,
onTap: (val) {
controller.updateIndex(val);
},
items: const [
Icon(Icons.home_outlined, color: Colors.white),
Icon(Icons.maps_home_work_outlined, color: Colors.white),
Icon(Icons.access_time, color: Colors.white),
],
),
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(),
],
),
),
),
),
),
);
}
}
page2_screen.dart
class PageTwo extends StatefulWidget {
const PageTwo({super.key});
@override
State createState() => _PageTwoState();
}
class _PageTwoState extends State {
late WebViewController webViewController;
String pageUrl = '';
@override
void initState() {
super.initState();
initializeWebView();
fetchData();
}
void initializeWebView() {
webViewController = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setBackgroundColor(const Color(0x00000000))
..setNavigationDelegate(
NavigationDelegate(
onPageFinished: (url) => _injectJavaScript(),
),
);
}
Future fetchData() async {
// Getting URL for the webview
}
void _injectJavaScript() {
String jsCode = """
// Injecting JS
""";
webViewController.runJavaScript(jsCode);
}
@override
Widget build(BuildContext context) {
return GetBuilder(
builder: (bottomNavbarController) {
if (bottomNavbarController.refreshMenuScreen) {
initializeWebView();
fetchData();
bottomNavbarController.refreshMenuScreen = false;
}
return Scaffold(
backgroundColor: const Color(0xFF000000),
body: Padding(
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).size.height * 0.01),
child: SafeArea(
child: WebViewWidget(
controller: webViewController,
),
),
),
);
},
);
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... initialize
Flutter WebView, нуждаясь в двойном щелчке, чтобы повторно обретать ⇐ IOS
Программируем под IOS
-
Anonymous
1738085271
Anonymous
В моем приложении Flutter у меня есть страница, которая загружает веб -сайт с использованием WebView. URL -адрес для веб -просмотра принимается через API, который хранится внутри переменной с именем pageurl . Когда пользователь нажимает на BottomNavbar , чтобы перейти на указанный экран, WebView будет перезагружаться (или повторно, не уверенный в правильной терминологии здесь). Он работает нормально. < /P>
Однако проблема, с которой я возникает, заключается в том, что, когда пользователь переходит на эту страницу, им нужно снова нажать кнопку для повторного повторного использования страницы. Я хочу, чтобы это было так, чтобы всякий раз, когда пользователь нажимает на кнопку для страницы, она просто повторно повторно повторно. Я приложил свой код ниже.class BottomNavbar extends StatelessWidget {
const BottomNavbar({super.key});
@override
Widget build(BuildContext context) {
return GetBuilder(
builder: (controller) => WillPopScope(
onWillPop: () async {
if (controller.tabIndex != 0) {
controller.updateIndex(0);
return false;
} else {
bool closeApp = await showDialog(
context: context,
builder: (context) => AlertDialog(
// Alert Dialog
],
),
);
return closeApp;
}
},
child: Scaffold(
extendBody: true,
appBar: AppbarWidget(tabIndex: controller.tabIndex),
bottomNavigationBar: CurvedNavigationBar(
index: controller.tabIndex,
onTap: (val) {
controller.updateIndex(val);
},
items: const [
Icon(Icons.home_outlined, color: Colors.white),
Icon(Icons.maps_home_work_outlined, color: Colors.white),
Icon(Icons.access_time, color: Colors.white),
],
),
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(),
],
),
),
),
),
),
);
}
}
[b] page2_screen.dart[/b]
class PageTwo extends StatefulWidget {
const PageTwo({super.key});
@override
State createState() => _PageTwoState();
}
class _PageTwoState extends State {
late WebViewController webViewController;
String pageUrl = '';
@override
void initState() {
super.initState();
initializeWebView();
fetchData();
}
void initializeWebView() {
webViewController = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setBackgroundColor(const Color(0x00000000))
..setNavigationDelegate(
NavigationDelegate(
onPageFinished: (url) => _injectJavaScript(),
),
);
}
Future fetchData() async {
// Getting URL for the webview
}
void _injectJavaScript() {
String jsCode = """
// Injecting JS
""";
webViewController.runJavaScript(jsCode);
}
@override
Widget build(BuildContext context) {
return GetBuilder(
builder: (bottomNavbarController) {
if (bottomNavbarController.refreshMenuScreen) {
initializeWebView();
fetchData();
bottomNavbarController.refreshMenuScreen = false;
}
return Scaffold(
backgroundColor: const Color(0xFF000000),
body: Padding(
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).size.height * 0.01),
child: SafeArea(
child: WebViewWidget(
controller: webViewController,
),
),
),
);
},
);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79394688/flutter-webview-needing-double-click-to-reinitialize[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия