12

フラッターを覚えたばかりで、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

画像

4

2 に答える 2