как синхронизировать c значок нижней панели навигации с текущей страницей во флаттере - PullRequest
0 голосов
/ 01 августа 2020

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

Как я могу это сделать?

это главное class:

import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'Basirat.dart';
import 'Gallery.dart';
import 'MainPage.dart';
import 'BottomNav.dart';
import 'Niko_Kary.dart';
import 'Nohe.dart';

void main() {
  runApp(deldadeganApp());
}

class deldadeganApp extends StatefulWidget {
  @override
  _deldadeganAppState createState() => _deldadeganAppState();
}

class _deldadeganAppState extends State<deldadeganApp> {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: BottomNav(),
    );
  }
}

Это класс нижней панели навигации, в котором я управляю планом маршрута:

import 'package:deldadeganapp/Basirat.dart';
import 'package:deldadeganapp/Gallery.dart';
import 'package:deldadeganapp/MainPage.dart';
import 'package:deldadeganapp/Niko_Kary.dart';
import 'package:deldadeganapp/Nohe.dart';
import 'package:flutter/material.dart';
import 'MainPage.dart';

class BottomNav extends StatefulWidget {
  @override
  _BottomNavState createState() => _BottomNavState();
}

class _BottomNavState extends State<BottomNav> {
  int _curentIndex = 4;
  final List<Widget> _childeren = [
    Niko_kary(),
    Nohe(),
    Gallery(),
    Basirat(),
    MainPage(),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: _childeren[_curentIndex],
      bottomNavigationBar: Container(
        decoration: BoxDecoration(
          borderRadius: BorderRadius.only(
              topRight: Radius.circular(30), topLeft: Radius.circular(30)),
          boxShadow: [
            BoxShadow(color: Colors.black38, spreadRadius: 0, blurRadius: 10),
          ],
        ),
        child: ClipRRect(
          borderRadius: BorderRadius.only(
              topLeft: Radius.circular(30.0), topRight: Radius.circular(30.0)),
          child: BottomNavigationBar(
              currentIndex: _curentIndex,
              selectedItemColor: Colors.green,
              unselectedItemColor: Colors.black87,
              type: BottomNavigationBarType.fixed,
              // backgroundColor: Colors.amberAccent,
              onTap: (index) {
                setState(() {
                  bClickindex(index);
                });
              },
              items: [
                BottomNavigationBarItem(
                  icon: Icon(Icons.payment),
                  title: Text('help'),
                ),
                BottomNavigationBarItem(
                  icon: Icon(Icons.queue_music),
                  title: Text('Nohe'),
                ),
                BottomNavigationBarItem(
                  icon: Icon(Icons.photo),
                  title: Text('gallery'),
                ),
                BottomNavigationBarItem(
                    icon: Icon(Icons.event_note), title: Text('Basirat')),
                BottomNavigationBarItem(
                    icon: Icon(Icons.home), title: Text('khane'))
              ]),
        ),
      ),
    );
  }

  void bClickindex(int index) {
    setState(() {
      _curentIndex = index;
    });
  }
}

1 Ответ

0 голосов
/ 01 августа 2020

Сделал небольшой пример. Пример Dartpad

Вы должны получить объект состояния родителя в дочернем виджете и использовать его для установки состояния родителя. Обязательно проверьте, смонтирован ли родительский элемент, прежде чем вызывать состояние набора, как показано в примере.

Надеюсь, это решит вашу проблему!

...