dart - Flutter:使用按钮更改标签栏 View 中的当前标签

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

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

这是我主页的截图。

最佳答案

您需要获取 TabBar Controller 并从按钮 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,您可以从任何地方获取 Controller ,因此您可以从以下位置调用 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(...);

https://stackoverflow.com/questions/50887790/

相关文章:

dart - 如何查看已安装的 Flutter 版本?

testing - Flutter 测试的代码覆盖率数据如何显示?

flutter - 如何在 Flutter 中更改状态栏和应用栏颜色?

google-maps - 如何在 flutter 的谷歌地图自定义标记中添加额外的文本?

visual-studio-code - 如何在vscode中包围 flutter 小部件

flutter - 没有 ScrollView 的刷新指示器

dart - Flutter - FloatingActionButton 中的 SimpleDia

visual-studio-code - Visual Studio 代码中的 Flutter 检查

flutter - 如何在 Flutter 中实现嵌套 ListView?

powershell - flutter 医生不适用于命令提示符或 PowerShell 窗口?