В настоящее время я работаю над своим первым простым приложением-флаттером и пытаюсь выяснить наш лучший подход к навигации между экранами.
Уже возможно:
- Навигация по экранам с помощью
BottomNavigationBar
+ BottomNavigationBarItem
- Навигация с помощью
Navigator.push(context,MaterialPageRoute(builder: (context) => Screen4()),);
Проблема:
- Наличие вспомогательных экранов на экранах
BottomNavigationBar
Пример кода:
Я хочу иметь три основных экрана Screen1()
, Screen2()
и Screen3()
доступны из BottomNavigationBar
. В Screen1()
есть кнопка для перехода на другой экран, назовем ее Screen4()
, где пользователь может выбирать из списка элементов. Затем вы можете добавить все выбранные элементы в список и вернуться к Screen1()
.
. Для этого я создал код ниже. Основной Widget
из body
будет изменен в соответствии с текущим индексом выбранного 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<MyApp> {
int _selectedIndex = 0;
static const List<Widget> _widgetOptions = <Widget>[
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>[
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
.
Если у кого-то есть пример, где это достигается, я был бы очень счастлив. Спасибо за чтение.