flutter - flutter 更改选项卡中显示的内容

标签 flutter dart tabs widget

我目前在为所选的每个标签显示不同的小部件时遇到问题。
点击另一个选项卡时,是否可以通过任何方式更改文本或其他内容?
我尝试在开关内使用tabNames [index]和index,并且为每个页面创建了不同的大小写,但它不起作用。我要在每个选项卡中显示多个小部件,具体取决于我点击的选项卡。

import 'package:flutter/material.dart';

void main() {
  runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Navigation Example',
      home: new MyHomePage(),
    );
  }
}

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

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

const List<String> tabNames = const<String>[
  'foo', 'bar', 'baz', 'quox', 'quuz', 'corge', 'grault', 'garply', 'waldo'
];

class _MyHomePageState extends State<MyHomePage> {

  int _screen = 0;

  @override
  Widget build(BuildContext context) {
    return new DefaultTabController(
      length: tabNames.length,
      child: new Scaffold(
        appBar: new AppBar(
          title: new Text('Navigation example'),
        ),
        body: new TabBarView(
          children: new List<Widget>.generate(tabNames.length, (int index) {
            switch (_screen) {
              case 0: return new Center(
                child: new Text('First screen, ${tabNames[index]}'),
              );
              case 1: return new Center(
                child: new Text('Second screen'),
              );
            }
          }),
        ),
        bottomNavigationBar: new Column(
          mainAxisSize: MainAxisSize.min,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            new AnimatedCrossFade(
              firstChild: new Material(
                color: Theme
                  .of(context)
                  .primaryColor,
                child: new TabBar(
                  isScrollable: true,
                  tabs: new List.generate(tabNames.length, (index) {
                    return new Tab(text: tabNames[index].toUpperCase());
                  }),
                ),
              ),
              secondChild: new Container(),
              crossFadeState: _screen == 0
                              ? CrossFadeState.showFirst
                              : CrossFadeState.showSecond,
              duration: const Duration(milliseconds: 300),
            ),
            new BottomNavigationBar(
              currentIndex: _screen,
              onTap: (int index) {
                setState(() {
                  _screen = index;
                });
              },
              items: [
                new BottomNavigationBarItem(
                  icon: new Icon(Icons.airplanemode_active),
                  title: new Text('Airplane'),
                ),
                new BottomNavigationBarItem(
                  icon: new Icon(Icons.motorcycle),
                  title: new Text('Motorcycle'),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

最佳答案

我认为您不适合将小部件列表传递给TabBarView的方式。不要使用List.generate:相反,尝试像这样包装小部件:

body: TabBarView(
         children: [
          Center(child: Text('First screen')),
          Center(child: Text('Second screen')),
         ]
),
选项卡 Controller 可动态处理页面更改,而无需放置开关盒来选择屏幕。

关于flutter - flutter 更改选项卡中显示的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64098824/

相关文章:

javascript - angularjs bootstrap ng-repeat 在选项卡内不起作用

Android Viewpager 在第一次加载时显示错误数据

user-interface - [FLUTTER]滚动更改选项卡

flutter - Flutter:自定义过渡(PageRouteBuilder)禁用Hero动画

flutter - 如何防止labelText在TextField中分成两行?

ios - 启动时崩溃 - ios 8.1 因为添加了 UIButton 的 subview 。 EXC_BREAKPOINT(SIGTRAP)

java - 创建第一个应用程序时 Flutter 出现错误 :checkDebugDuplicateClasses

flutter - 等待回调在Dart/Flutter中完成

regex - 如何使用正则表达式对反斜杠和 ''进行转义和不转义?

Flutter Bloc 使用 Timer 重新获取数据