在后续页面上更改AppBar title
时寻求一些帮助,所以我是标签而有些不是。我的应用的身份验证页面上定义了MyApp
。然后我转到一个新页面,其中包含选项卡,然后我有一些选项卡页面上的其他页面,我希望能够做的是,而不是在主要页面下放置另一个AppBar
,我只是想要当我在任何其他页面上时,更改主title
的{{1}}。
任何想法如何做到这一点,我看到一个不适合的例子,因为我的标签设置不同,无法使其适合,想想也许有一种方法来定义标题最初,以便我可以改变状态或东西并改变标题。
有关此的任何想法或想法吗?
答案 0 :(得分:5)
答案 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])),
],
),
);
}
}