フラッターを覚えたばかりで、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);
}
エラーログ:
エラー ログ: I/flutter (19638): TabBarView の TabController がありません。I/flutter (19638): TabBarView を作成するときは、「コントローラー」 I/flutter (19638): プロパティを使用して明示的な TabController を提供するか、TabBarView の上に DefaultTabController があることを確認する必要があります。I/flutter (19638): この場合、明示的なコントローラーもデフォルトのコントローラーもありませんでした。══════════════════════════════════════════════════ ══════════════════════════════════════════════════
I/flutter (19638): 別の例外がスローされました: TabBar の TabController がありません。
そして、私が this:
と this
:leading: Icon(Icons.home),
を変更すると、
常にエラーを返すか、null でしたleading: _handler.leading,
title: new Text("Home"),
title: new Text(_handler.title),
_handler.leading
_handler.title