如何在Flutter的BottomNavigation栏中设置默认标签?

时间:2019-12-10 03:50:08

标签: flutter flutter-layout flutter-dependencies

我目前有5个标签,启动应用程序时如何设置默认标签?可以说,我希望在打开应用程序时将“帐户”标签设为默认标签。

我该怎么做?顺便说一句,我使用WebView插件显示网站内容。

下面是我的main.dart文件的代码。我已经尝试搜索,但我发现的所有解决方案都对我不起作用(我认为我搜索错误的单词。此外,我还是不习惯)

import 'package:syncshop/widgets/cart_page.dart';
import 'package:syncshop/widgets/categories_page.dart';
import 'package:syncshop/widgets/home_page.dart';
import 'package:syncshop/widgets/profile_account.dart';
import 'package:syncshop/widgets/search_page.dart';


void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return MyAppState();
  }
}

class MyAppState extends State<MyApp> {
int _selectedPage = 0;
final _pageOptions = [
  HomeScreen(),
  CategoriesPage(),
  SearchPage(),
  CartPage(),
  ProfileAccount(),
];

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Sync Shop',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
      body: _pageOptions[_selectedPage],
      bottomNavigationBar: BottomNavigationBar(
          type: BottomNavigationBarType.fixed,
          currentIndex: _selectedPage,
          onTap: (int index) {
            setState((){
      _selectedPage = index;
            });
          },
          items: [
          BottomNavigationBarItem(icon: Icon(Icons.home), title: Text("Home"),
          ),
          BottomNavigationBarItem(icon: Icon(Icons.category), title: Text("Categories"),
          ),
          BottomNavigationBarItem(icon: Icon(Icons.search), title: Text("Search"),
          ),
          BottomNavigationBarItem(icon: Icon(Icons.shopping_cart), title: Text("Cart"),
          ),
          BottomNavigationBarItem(icon: Icon(Icons.account_circle), title: Text("Profile"),
          ),
          ],
          ),
      ),
      );
  }
}

5 个答案:

答案 0 :(得分:0)

在这里初始化默认标签

int _selectedPage = 0;

您可以将其更改为所需的任何标签,如果需要个人资料

int _selectedPage = 4;

答案 1 :(得分:0)

import 'package:flutter/material.dart';
import 'package:syncshop/widgets/cart_page.dart';
import 'package:syncshop/widgets/categories_page.dart';
import 'package:syncshop/widgets/home_page.dart';
import 'package:syncshop/widgets/profile_account.dart';
import 'package:syncshop/widgets/search_page.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return MyAppState();
  }
}

class MyAppState extends State<MyApp> {
  int _selectedPage = 4;

  final _pageOptions = [
    HomeScreen(),
    CategoriesPage(),
    SearchPage(),
    CartPage(),
    ProfileAccount(),
  ];

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Sync Shop',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        body: _pageOptions[_selectedPage],
        bottomNavigationBar: BottomNavigationBar(
          type: BottomNavigationBarType.fixed,
          currentIndex: _selectedPage,
          onTap: (int index) {
            setState(() {
              _selectedPage = index;
            });
          },
          items: [
            BottomNavigationBarItem(
              icon: Icon(Icons.home),
              title: Text("Home"),
            ),
            BottomNavigationBarItem(
              icon: Icon(Icons.category),
              title: Text("Categories"),
            ),
            BottomNavigationBarItem(
              icon: Icon(Icons.search),
              title: Text("Search"),
            ),
            BottomNavigationBarItem(
              icon: Icon(Icons.shopping_cart),
              title: Text("Cart"),
            ),
            BottomNavigationBarItem(
              icon: Icon(Icons.account_circle),
              title: Text("Profile"),
            ),
          ],
        ),
      ),
    );
  }
}

答案 2 :(得分:0)

您必须使用制表符控制器。

首先,您需要在课堂上扩展TickerProviderStateMixin

class MyAppState extends State<MyApp> with TickerProviderStateMixin {

}

然后定义TabController之类的

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

最后在您的TabBarView

中设置控制器
controller: _tabController,

答案 3 :(得分:0)

您可以覆盖initState的{​​{1}}功能,并可以在其中放置一些初始代码。

因此,以您的示例为例,

...

State

...

答案 4 :(得分:0)

创建BottomNavigationBar时,将this.currentindex设置为所需索引

bottomNavigationBar: BottomNavigationBar(
          currentindex=1,//This line, it's default 0
          type: BottomNavigationBarType.fixed,
          currentIndex: _selectedPage,
          onTap: (int index) {
            setState(() {
              _selectedPage = index;
            });
          },