gpt4 book ai didi

flutter - 如何使用TabController

转载 作者:行者123 更新时间:2023-12-02 12:09:46 26 4
gpt4 key购买 nike

我刚学flutter,很困惑如何使用TabController,我按照官网的说明进行操作,但出现错误,不知道如何修复。

我只想在更改选项卡时更改应用栏的标题和前导。

final List<ChangeTitleAndLeading> _data = [
new ChangeTitleAndLeading(title: "Home", leading: Icon(Icons.home)),
new ChangeTitleAndLeading(title: "Profile", leading: Icon(Icons.person)),
new ChangeTitleAndLeading(title: "Friends", leading: Icon(Icons.people))
];

ChangeTitleAndLeading _handler;
TabController _controller;

@override
void initState() {
super.initState();

_checkEmailVerification();

_controller = TabController(vsync: this, length: 3);
_handler = _data[0];
_controller.addListener(_handleSelected);
}

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

void _handleSelected() {
setState(() {
_handler = _data[_controller.index];
});
}

return MaterialApp(
theme: new ThemeData(
primarySwatch: Colors.teal,
),
home: new Scaffold(
appBar: new AppBar(
leading: Icon(Icons.home),
title: new Text("Home"),
bottom: new TabBar(
controller: _controller,
tabs: _tabs,
),
),

body: TabBarView(
controller: _controller,
children: _pages,
),

floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
print('Current Index: ${_handler.title}');
}
),

class ChangeTitleAndLeading {
final String title;
final Widget leading;

ChangeTitleAndLeading({
@required this.title,
@required this.leading
}) :
assert(title != null),
assert(leading != null);
}

错误日志:

Error Log: I/flutter (19638): No TabController for TabBarView. I/flutter (19638): When creating a TabBarView, you must either provide an explicit TabController using the "controller" I/flutter (19638): property or you must ensure that there is a DefaultTabController above the TabBarView. I/flutter (19638): In this case, there was neither an explicit controller nor a default controller. ════════════════════════════════════════════════════════════════════════════════════════════════════

I/flutter (19638): Another exception was thrown: No TabController for TabBar.

当我改变这个时: 前导:图标(Icons.home),前导:_handler.leading,和这个: title: new Text("Home"), title: new Text(_handler.title), 总是返回错误 _handler.leading_handler.title 为 null

Image

最佳答案

尝试这个解决方案:-

不要忘记继承

TickerProviderStateMixin

enter image description here

class HomePage extends StatefulWidget {
const HomePage();

@override
_HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> with TickerProviderStateMixin {
late TabController tabController;
@override
void initState() {
super.initState();
tabController = TabController(
initialIndex: 0,
length: 2,
vsync: this,
);
}

@override
Widget build(BuildContext context) {
final theme = Theme.of(context);

return Scaffold(
appBar: AppBar(
title: Row(
children: [
Image.asset(
'assets/images/png/logo.png',
height: 60,
width: 60,
),
Spacer(),
Container(
width: 400,
child: TabBar(
labelColor: Color.fromRGBO(4, 2, 46, 1),
labelStyle: theme.textTheme.headline1,
indicatorColor: Color.fromRGBO(4, 2, 46, 1),
unselectedLabelColor: Colors.grey,
controller: tabController,
tabs: [
Text('الفاتورة'),
Text('دليفري'),
],
),
),
],
),
),
body: Container(
child: TabBarView(
controller: tabController,
children: [
Container(
color: Colors.red,
),
Container(
color: Colors.orange,
),
],
),
),
);
}

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

关于flutter - 如何使用TabController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55380393/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com