Как я могу избежать перехода на текущую страницу из ящика - PullRequest
0 голосов
/ 15 апреля 2020

В моем приложении для флаттера есть ящик для навигации по страницам. Я создаю содержимое этого ящика в классе с именем CustomListTile, используя конструктор. Мой drawer.dart файл выглядит следующим образом:

import 'package:flutter/material.dart';

class CustomListTile extends StatelessWidget {
  final String _name;
  final IconData _icon;
  final Function onTap;

  CustomListTile(this._name, this._icon, this.onTap);

  @override
  Widget build(BuildContext context) {
    return Padding(
        padding: EdgeInsets.fromLTRB(9, 0, 9, 0),
        child: Container(
          decoration: BoxDecoration(
              border: Border(bottom: BorderSide(color: Colors.grey))),
          child: InkWell(
              splashColor: Colors.teal,
              onTap: () => onTap(context),
              child: Container(
                height: 50,
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: <Widget>[
                    Row(
                      children: <Widget>[
                        Icon(
                        _icon,
                        color: Colors.teal,
                        ),
                        Padding(
                          padding: EdgeInsets.all(10),
                          child: Text(
                            _name,
                            style: TextStyle(
                                fontSize: 16, fontFamily: 'Montserrat'),
                          ),
                        )
                      ],
                    )
                  ],
                ),
              )),
        ));
  }
}

addTapped(BuildContext context) async{
  Navigator.of(context).popAndPushNamed("/AddPerson");

}
aboutTapped(BuildContext context) async{
  Navigator.of(context).popAndPushNamed("/About");
}

listTapped(BuildContext context) async {
  Navigator.of(context).popAndPushNamed("/ListDates");
}

statusTapped(BuildContext context) async {
  Navigator.of(context).popAndPushNamed("/Status");
}

symptomsTapped(BuildContext context) async {
  Navigator.of(context).popAndPushNamed("/Symptoms");
}

И я создаю экземпляр этого класса на своих страницах следующим образом:

  drawer: Drawer(
      child: ListView(
        children: <Widget>[
          DrawerHeader(
            decoration: BoxDecoration(
                gradient: LinearGradient(
                    colors: <Color>[Colors.teal, Colors.tealAccent])),
            child: Container(
              child: Column(
                children: <Widget>[
                  Material(
                      elevation: 10,
                      borderRadius: BorderRadius.all(Radius.circular(30.0)),
                      child: GestureDetector(
                        child: Image.asset('images/covid.png',
                            width: 100, height: 100),
                        onTap: () => Navigator.of(context).popAndPushNamed('/HomeScreen'),
                      )
                  )
                ],
              ),
            ),
          ),
          CustomListTile('Add Person', Icons.add, addTapped),
          CustomListTile('View added People', Icons.people, listTapped),
          CustomListTile('View Stats', Icons.show_chart, statusTapped),
          CustomListTile('Symptoms', Icons.check_circle_outline, symptomsTapped),
          CustomListTile('About', Icons.info, aboutTapped),
        ],
      ),
    ),

Это прекрасно работает, и я могу перемещаться по страницам. Я хочу избегать перехода на одну и ту же страницу из ящика, когда пользователь находится на этой странице, чтобы страница не складывалась снова и снова. Можно ли как-нибудь динамически изменить onTap текущей страницы? Спасибо

...