Flutter Navigator.pushNamed с параметрами возвращает ноль - PullRequest
0 голосов
/ 23 апреля 2020

В именованной маршрутной навигации мне нужно передать несколько аргументов, но в пункте назначения значение равно нулю Вот мой код:

onSelected: (value){
    Navigator.pushNamed(context, '${value['namedRoute']}', arguments: '${value['apiUrl']}');
  },

На экране назначения у меня есть:

class DetailList extends StatefulWidget {
  final String apiUrl;

  DetailList({Key key, @required this.apiUrl,}) : super(key: key);

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

class _DetailList extends State<DetailList> {
  final Color bgcolor = HexToColor('#ffffff');

  ApiResponse<List<Detail>> detailList;
  int countDetails = 0;

  DetailListBloc _detailListBloc;

  @override
  void initState() {
    print('init=${widget.apiUrl}');

    super.initState();
    _detailListBloc = DetailListBloc(widget.apiUrl);
  }
  .....

Здесь вывод на печать 'init = null'. Я не знаю, где проблема, как я следовал по этой ссылке . Будем благодарны за любую помощь.

РЕДАКТИРОВАТЬ

Спасибо за вашу помощь. Я нашел эту ссылку , которая точно описывает то, что я искал, и она работает как брелок.

1 Ответ

0 голосов
/ 23 апреля 2020

Это не то, как вы извлекаете аргумент, вот как:

  @override
  void initState() {
    print('init=${ModalRoute.of<String>(context).settings.arguments}');

    super.initState();
    _detailListBloc = DetailListBloc(widget.apiUrl);
  }

см. ссылка

Редактировать: , поскольку контекст может не быть готовым мгновенно в initState() и в соответствии с этим вы можете использовать:

@override
  void initState(){
    Future.delayed(Duration.zero,(){//you can await it if you want
      print('init=${ModalRoute.of<String>(context).settings.arguments}');
      _detailListBloc = DetailListBloc(widget.apiUrl);  
    });
    super.initState();
  }
...