Переход к подэкрану с экрана BottomNavigationBar во FlutterAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Переход к подэкрану с экрана BottomNavigationBar во Flutter

Сообщение Anonymous »

В настоящее время я работаю над своим первым простым флаттер-приложением и пытаюсь найти лучший подход для управления навигацией между экранами.

Уже возможно:
  • Навигация по экранам с помощью BottomNavigationBar + BottomNavigationBarItem
  • Навигация с помощью Navigator.push(context,MaterialPageRoute(builder: (context) => Screen4()),);
Проблема:
  • Наличие подэкранов на экранах BottomNavigationBar
Пример кода:

Я хочу, чтобы три основных экрана Screen1(), Screen2() и Screen3() были доступны из BottomNavigationBar. В Screen1() есть кнопка для перехода к другому экрану, назовем ее Screen4(), где пользователь может выбирать элементы из списка. Затем вы можете добавить все выбранные элементы в список и вернуться обратно к Screen1().

Для этого я создал код ниже. Основной виджет тела будет изменен в соответствии с текущим индексом выбранного BottomNavigationItem.

main.dart

Код: Выделить всё

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
static const String _title = 'Code Sample';

@override
Widget build(BuildContext context) {
return MaterialApp(
title: _title,
home: MyApp(),
);
}
}

class MyApp extends StatefulWidget {
MyApp({Key key}) : super(key: key);

@override
_MyAppState createState() => _MyAppState();
}

class _MyAppState extends State {
int _selectedIndex = 0;

static const List _widgetOptions = [
Screen1(),
Screen2(),
Screen3(),
];

void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Stackoverflow Example'),
),
body: Center(
child: _widgetOptions.elementAt(_selectedIndex),
),
bottomNavigationBar: BottomNavigationBar(
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.home),
title: Text('Screen1'),
),
BottomNavigationBarItem(
icon: Icon(Icons.business),
title: Text('Screen2'),
),
BottomNavigationBarItem(
icon: Icon(Icons.school),
title: Text('Screen3'),
),
],
currentIndex: _selectedIndex,
selectedItemColor: Colors.amber[800],
onTap: _onItemTapped,
),
);
}
}
Проблема в том, что я перемещаюсь внутри Screen1() — виджета Screen4() с помощью

Код: Выделить всё

Navigator.push(context,MaterialPageRoute(builder: (context) => Screen4()),);
навигация будет происходить за пределами MyApp() и поэтому Scaffold отсутствует.

Если у кого-то есть пример, где это достигается, я буду очень рад.
Спасибо за чтение.

Подробнее здесь: https://stackoverflow.com/questions/587 ... in-flutter
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»