颤振导航到其他页面中的特定选项卡

时间:2019-11-22 13:47:49

标签: flutter dart

我正在尝试从一个页面导航到另一页面并设置选项卡栏的索引。

这是我在第一页中的代码:

GestureDetector(
onTap: () { Navigator.push(
context,
MaterialPageRoute(builder: (context) => ProductPage()),
); },
child: Container(
color: Colors.blueGrey,
)),

在另一页(ProductPage)中:

class ProductPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
return DefaultTabController(
    length: 3,
    child: Scaffold(
      appBar: AppBar(
    backgroundColor: Color.fromRGBO(65,102,60,1,
    ),
        bottom: TabBar(
          isScrollable: true,
          indicatorColor: Colors.white,
          tabs: [
            Tab(icon: Text('First')),
            Tab(icon: Text('Second')),
            Tab(icon: Text('Third')),
          ],
        ),
      ),
      body: TabBarView(
        children: [
          FirstTab(),
          SecondTab(),
          ThirdTab(),
        ],
      ),
    ),
);
  }
}

现在,它总是打开第一个选项卡,但我希望它打开SecondTab。

我已经尝试过了:

MaterialPageRoute(builder: (context) => ProductPage(SecondTab)),

但这不起作用。我该如何解决?

1 个答案:

答案 0 :(得分:3)

您可以将索引作为参数传递,然后在defaultTabController的initialindex中使用它。

尝试这样的事情:

GestureDetector(
    onTap: () { Navigator.push(context,
        MaterialPageRoute(builder: (context) => ProductPage(0))); 
    },
    child: Container(color: Colors.blueGrey)
)

在另一页(ProductPage)中:

class ProductPage extends StatelessWidget {
  int selectedPage;
  ProductPage(this.selectedPage);

  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      initialIndex:selectedPage,
      length: 3,
      child: Scaffold(
        appBar: AppBar(
          backgroundColor: Color.fromRGBO(65,102,60,1),
        ),
        bottom: TabBar(
          isScrollable: true,
          indicatorColor: Colors.white,
          tabs: [
            Tab(icon: Text('First')),
            Tab(icon: Text('Second')),
            Tab(icon: Text('Third')),
          ],
        ),
        body: TabBarView(
          children: [
            FirstTab(),
            SecondTab(),
            ThirdTab(),
          ],
        ),
      ),
    );
  }
}

现在,您只需传递0,1或2作为选定索引即可。