Как изменить вкладку по умолчанию при навигации во флаттере? - PullRequest
0 голосов
/ 23 октября 2018

У меня есть следующий код для страницы TabBar:

class HomePage extends StatefulWidget {


  static String tag = 'home-page';

  @override
  _homepage createState() => new _homepage();
}

class _homepage extends State<HomePage> with TickerProviderStateMixin{


  AnimationController percentageAnimationController;
  TabController _tabController;


  @override
  void initState() {
    _tabController = new TabController(length: 3, vsync: this);


    super.initState();
  }

  @override
  void dispose() {
    _tabController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {

    return new Scaffold(

        bottomNavigationBar: new Material(
          color: Colors.white,
          child: new TabBar(
              controller: _tabController,
              indicatorColor: Theme.Colors.loginGradientStart,
              labelColor: Theme.Colors.loginGradientStart,
              tabs: <Widget>[
                new Tab(
                  icon: new Icon(wind_icon),
                ),
                new Tab(
                  icon: new Icon(chart_icon),
                ),
                new Tab(
                  icon: new Icon(settings_icon),
                ),
              ]
          ),
        ),
        body:
        new TabBarView(
          children: <Widget>[

            TabOne(),

            TabTwo(),

            TabThree(),

            ],
          controller: _tabController,
        ),
    );
  }
}

Теперь, если я перехожу на эту страницу, она автоматически открывает первую вкладку, но я хочу открыть вторую вкладку вместо первой, то есть индекс вкладки1.

Я могу выяснить, что мы можем добиться этого с помощью _tabController.animateTo (1); , но я хочу знать, как это можно сделать с помощью нажатия кнопок на других страницах.,

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

У меня была похожая проблема.Я создал файл с именем «globals.dart».

my_app / globals.dart

library my_app.globals;

import 'package:flutter/material.dart';

TabController tabController;

И, после того как вы установите контроллер вкладок, скопируйте ссылку на этот.

_homepage Class

import 'package:my_app/globals.dart' as globals;

@override
void initState() {
    _tabController = new TabController(length: 3, vsync: this);

    globals.tabController = _tabController;

    super.initState();
}

other_page Class

import 'package:my_app/globals.dart' as globals;

...(in any function you want)...

globals.tabController.animateTo(2);
0 голосов
/ 23 октября 2018

Вы можете использовать начальный индекс:

_tabController = new TabController(length: 3, vsync: this, initialIndex: 1);
...