Flutter在其他页面上更改主appbar标题

时间:2017-10-23 14:30:30

标签: dart flutter

在后续页面上更改AppBar title时寻求一些帮助,所以我是标签而有些不是。我的应用的身份验证页面上定义了MyApp。然后我转到一个新页面,其中包含选项卡,然后我有一些选项卡页面上的其他页面,我希望能够做的是,而不是在主要页面下放置另一个AppBar,我只是想要当我在任何其他页面上时,更改主title的{​​{1}}。

任何想法如何做到这一点,我看到一个不适合的例子,因为我的标签设置不同,无法使其适合,想想也许有一种方法来定义标题最初,以便我可以改变状态或东西并改变标题。

有关此的任何想法或想法吗?

2 个答案:

答案 0 :(得分:5)

您可以添加clock_gettime(CLOCK_MONOTONIC)并向其添加TabController,以便在listen之间切换时拨打setState,然后更改Tab相应的标题。

enter image description here

AppBar

答案 1 :(得分:0)

在上述答案的帮助下,我可以编写一个简单且对初学者友好的代码。

  • 这个概念很简单,可以获取当前的标签索引并通过设置状态更改标题。当活动选项卡更改时,您需要“检测”。这就是为什么我们添加侦听器(检测CHANGE AND ACTS的人)的原因

  • 如果下面的代码没有意义,请在注释中告诉我

import 'package:flutter/material.dart';

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

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {
  TabController _tcontroller;
  final List<String> titleList = ["Home Page", "List Page", "Message Page"];
  String currentTitle;

  @override
  void initState() {
    currentTitle = titleList[0];
    _tcontroller = TabController(length: 3, vsync: this);
    _tcontroller.addListener(changeTitle); // Registering listener
    super.initState();
  }

  // This function is called, every time active tab is changed
  void changeTitle() {
    setState(() {
      // get index of active tab & change current appbar title
      currentTitle = titleList[_tcontroller.index];
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(currentTitle),
        centerTitle: true,
        bottom: TabBar(
          controller: _tcontroller,
          tabs: <Widget>[
            Icon(Icons.home),
            Icon(Icons.format_list_bulleted),
            Icon(Icons.message),
          ],
        ),
      ),
      body: TabBarView(
        controller: _tcontroller,
        children: <Widget>[
          Center(child: Text(titleList[0])),
          Center(child: Text(titleList[1])),
          Center(child: Text(titleList[2])),
        ],
      ),
    );
  }
}