web-dev-qa-db-ja.com

TabControllerコンストラクターの `vsync`プロパティ

これによると: サンプルコード

私は自分のTabControllerの実装を作成しました。

_void main() {
  runApp(new MyApp());
}

class MyApp extends StatefulWidget {

  @override
  _MyAppState createState() => new _MyAppState();
}

class _MyAppState extends State<MyApp> {

  TabController _tabController;

  @override
  void initState() {
    super.initState();
    _tabController = new TabController(vsync: this, length: choices.length);
  }

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

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new Scaffold(
        bottomNavigationBar: new Material(
          color: Colors.blue,
          child: new TabBar(
            controller: _tabController,
            isScrollable: false,
            tabs: choices.map((Choice choice) {
              return new Tab(
                text: null,
                icon: new Icon(choice.icon),
              );
            }).toList(),
          ),
        ),
        appBar: new AppBar(
          title: const Text('Swap'),
        ),
        body: new TabBarView(
          controller: _tabController,
          children: choices.map((Choice choice) {
            return new Padding(
              padding: const EdgeInsets.all(16.0),
              child: new ChoiceCard(choice: choice),
            );
          }).toList(),
        ),
      ),
    );
  }
}
_

行:_tabController = new TabController(vsync: this, length: choices.length);このメッセージでエラーが発生しました:

エラー:引数タイプ '_MyAppState'をパラメータータイプ 'TickerProvider'に割り当てることができません。 ([swap] lib/main.Dart:24でargument_type_not_assignable)

私のコードの何が問題になっていますか?

19

追加 with TickerProviderStateMixinStateのクラス宣言の最後に追加します。

39
Collin Jackson

先に回答したように、mixinを追加すると、TickerProviderStateMixinが機能します。単一のSingleTickerProviderStateMixinだけが必要な場合は、Tickerを使用することもできます。

しかし、TickerProvidersは実際には何をするのでしょうか。

vsyncTickerProviderを引数として受け取ります。これがSingleTickerProviderStateMixinを使用する理由であり、名前付きの説明ではTickerProviderTickerを提供します。フレームの更新(または画面の更新)についてアプリに通知し、AnimationControllerが新しい値を生成し、アニメーションウィジェットを再描画できるようにします。

9
Shubham Soni