我正在创建一个应用程序,其中包含在其主页上的选项卡栏.我希望能够navigate到其中一个标签using我的FloatingActionButton.此外,我希望保留导航到该选项卡的默认方法,即通过在屏幕上滑动或通过单击该选项卡.

我还想知道如何将该选项卡链接到其他按钮.

这是我主页的截图.

带有导航选项卡和浮动操作按钮的主页

推荐答案

您需要获取TabBar控制器,并从按钮onPressed()句柄调用其animateTo()方法.

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      home: new MyTabbedPage(),
    );
  }
}

class MyTabbedPage extends StatefulWidget {
  const MyTabbedPage({Key key}) : super(key: key);

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

class _MyTabbedPageState extends State<MyTabbedPage> with SingleTickerProviderStateMixin {
  final List<Tab> myTabs = <Tab>[
    new Tab(text: 'LEFT'),
    new Tab(text: 'RIGHT'),
  ];

  TabController _tabController;

  @override
  void initState() {
    super.initState();
    _tabController = new TabController(vsync: this, length: myTabs.length);
  }

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

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("Tab demo"),
        bottom: new TabBar(
          controller: _tabController,
          tabs: myTabs,
        ),
      ),
      body: new TabBarView(
        controller: _tabController,
        children: myTabs.map((Tab tab) {
          return new Center(child: new Text(tab.text));
        }).toList(),
      ),
      floatingActionButton: new FloatingActionButton(
        onPressed: () => _tabController.animateTo((_tabController.index + 1) % 2), // Switch tabs
        child: new Icon(Icons.swap_horiz),
      ),
    );
  }
}

如果MyTabbedPageState使用GlobalKey,你可以从任何地方获得控制器,因此你可以从任何按钮调用animateTo().

class MyApp extends StatelessWidget {
  static final _myTabbedPageKey = new GlobalKey<_MyTabbedPageState>();

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      home: new MyTabbedPage(
        key: _myTabbedPageKey,
      ),
    );
  }
}

你可以在任何地方打电话,做以下事情:

MyApp._myTabbedPageKey.currentState._tabController.animateTo(...);

Flutter相关问答推荐

创建多个具有适当填充和对齐的按钮的最佳方法

如何防止alert 对话框在收到通知时出现在某个flutter页面中

为什么我不能看到类音频源在flutter?'

如何让一个名为ONTAP的回调函数、另一个名为onTapDown的回调函数和另一个名为onTapUp的回调函数不重叠?

无法让Riverpod Stream发出新值

Flutter 动画列表一次构建所有项目,而不是仅构建可见的项目

无效参数(S):隔离消息中的非法参数:try 旋转图像时对象不可发送

Android上火焰瓷砖之间的线条飘动

缩短经常使用的行Theme.of(context).colorScheme

在Flutter 小部件测试中找不到框中的AssetImage装饰

Flutter为什么不;没有ListView.iterable()构造函数?

请求已在 flutter 中发送到 django 服务器,并且已返回响应,但条件仍然为 false

flutter Listview构建器溢出

当键盘隐藏表单时该怎么办?

flutter - 无法解析 JSON 消息:文档为空

如何在 Flutter 中创建 Facebook 创建帖子屏幕?

Flutter 如何要求用户在应用程序中设置电话密码?

如何在 SingleChildScrollView 小部件中管理自定义小部件状态

Flutter:滚动一个ListWheelScrollView,无法获取选中项的状态

在 Flutter Bloc 中具有称为 status 的属性的一种状态或不同的状态,哪个更可取?