Как я могу перейти на несколько новых страниц, используя нижнюю панель навигации в flutter?

#android #ios #flutter #dart #flutter-bottomnavigation

#Android #iOS #трепетать #дротик #плавание с флаттер-дном

Вопрос:

Я хочу перейти на несколько новых страниц, используя нижнюю панель навигации в flutter.

Я попробовал несколько методов, чтобы выполнить свое требование. Но все равно ни один из них не сработал для меня. Я приложил весь свой соответствующий исходный код ниже для лучшего понимания.

Заранее благодарю вас. 🙂

Исходный код Dart :

 class dashboard extends StatefulWidget {  @override  _dashboardState createState() =gt; _dashboardState(); }  // ignore: camel_case_types class _dashboardState extends Statelt;dashboardgt; {  @override  Widget build(BuildContext context) {  final authService = Provider.oflt;AuthServicegt;(context);  return Scaffold(  body: SingleChildScrollView(  child: Column(  children: lt;Widgetgt;[  Padding(  padding: const EdgeInsets.only(top: 80.0, right: 250),  child: Center(  child: Container(  width: 200.0,  height: 20.0,  decoration:  BoxDecoration(borderRadius: BorderRadius.circular(15.0)),  child: (const Text(  'Hello',  textAlign: TextAlign.center,  style: TextStyle(  fontWeight: FontWeight.bold, color: Colors.black),  )),  ),  ),  ),  Padding(  padding: const EdgeInsets.only(top: 20.0),  child: MaterialButton(  onPressed: () {  Navigator.push(context,  MaterialPageRoute(builder: (context) =gt; profile()));  },  child: const Text('Test'),  ),  ),  Padding(  padding: EdgeInsets.only(left: 300.0, top: 10.0),  child: IconButton(  icon: new Icon(Icons.notifications),  onPressed: () {  Navigator.push(  context,  MaterialPageRoute(  builder: (context) =gt; Notifications(),  ),  );  },  ),  ),  Padding(  padding: const EdgeInsets.only(top: 1.0),  child: Center(  child: Container(  width: 390,  height: 450,  decoration: BoxDecoration(  color: Colors.green.shade100,  borderRadius: BorderRadius.circular(10.0)),  ),  ),  ),  ],  ),  ),  floatingActionButton: FloatingActionButton(onPressed: () async {  await authService.signOut();  }),  // : _children[_currentIndex],  bottomNavigationBar: BottomNavigationBar(  type: BottomNavigationBarType.fixed,  items: const [  BottomNavigationBarItem(  icon: Icon(Icons.book_online),  label: 'Page 1',  ),  BottomNavigationBarItem(  icon: Icon(Icons.read_more),  label: 'Page 2',  ),  BottomNavigationBarItem(  icon: Icon(Icons.account_circle),  label: 'Page 3',  ),  ],  ),  );  } }  

Ответ №1:

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

 class _dashboardState extends Statelt; dashboard gt; {    int currentIndex = 1;   changeIndex(index) {  setState(() {  currentIndex = index;  });  }   @override  Widget build(BuildContext context) {  return Scaffold(  body: WillPopScope(  child: (currentIndex == 1)  ? HomeScreen()  : (currentIndex == 2)  ? Screen2()  : (currentIndex == 3)  ? Screen3()  : Settings(),  onWillPop: () async {  bool backStatus = onWillPop();  if (backStatus) {  exit(0);  }  return false;  },  ),  

затем свяжите его с кнопкой на панели навигации.

 bottomNavigationBar: BottomNavigationBar(  type: BottomNavigationBarType.fixed,  items: const [  InkWell(  onTap: () =gt; changeIndex(1),  child: BottomNavigationBarItem(  icon: Icon(Icons.book_online),  label: 'Page 1',  ),  .....  ],  ),  

Комментарии:

1. Как я могу связать этот код с моим текущим кодом? Так как у меня есть однократный просмотр в качестве тела моего эшафота?

2. Например, вы можете поместить все виджеты в тело в отдельный класс состояния с именем Рабочий стол … И так далее

3. Я попытался поместить все виджеты в отдельный класс. Но все равно это не сработало. Есть ли какой-либо возможный способ добавить приведенный выше код к моему существующему исходному коду?