Как перейти на экран, на котором есть BottomNavigationBar, и одновременно изменить вкладку BottomNavigationBar? - PullRequest
0 голосов
/ 28 мая 2020
• 1000 of BottomNavigationBar
....

class _ItemState extends State<ItemPage> {

  ItemScreenArguments _screenArguments;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    _screenArguments = ModalRoute.of(context).settings.arguments;
    final item = _screenArguments.item;

    return BlocBuilder<CartBloc, CartState>(
      builder: (BuildContext context, CartState state) {
        ...

        final cart = (state as LoadCartState);
        return Scaffold(
          extendBodyBehindAppBar: true,
          appBar: AppBar(
          backgroundColor: Colors.transparent,
            title: Text(item.name),
              actions: [
                Basket(
                  count: cart.count,
                  onTap: () {
                   // It should navigate main route and fourth section in bottomNavigationBar
                   Navigator.of(context).popUntil(ModalRoute.withName('/main'))
                  },
                )
              ]
            ),
            body: ItemScreen(),
            ...
        );
      }
    );
  }

Я пытаюсь использовать Blo c, или использовать Blo c?

- плохая идея. Может быть, лучше использовать Router MaterialPageRoute, чем Blo * 1012. * или используя их вместе? Как тебе это сделать? Вы можете помочь выбрать лучший вариант?

1 Ответ

0 голосов
/ 28 мая 2020

Вы можете отправить номер вкладки , который хотите выбрать по умолчанию

Navigate.of(context).pushNamed("/main",arguments:{'tab':3})

Вы можете получить этот номер вкладки, используя ModalRoute и установить _selectedIndex соответственно

Widget build(BuildContext context) {
   final route= ModalRoute.of(context).settings.arguments as Map<String,int>;
   var _selectedIndex = route['tab']

    return Scaffold(
        appBar: selectedAppBar(_selectedIndex),
        body: SafeArea(
          child: _screenOptions.elementAt(_selectedIndex),
        ),
        bottomNavigationBar: BottomNavigation(
          onChangeScreen: _onChangeScreen,
          selectedIndex: _selectedIndex,
        ),
      );
  }
...