これによると: サンプルコード
私は自分の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)
私のコードの何が問題になっていますか?
追加 with TickerProviderStateMixin
をState
のクラス宣言の最後に追加します。
先に回答したように、mixin
を追加すると、TickerProviderStateMixin
が機能します。単一のSingleTickerProviderStateMixin
だけが必要な場合は、Ticker
を使用することもできます。
しかし、
TickerProviders
は実際には何をするのでしょうか。
vsync
はTickerProvider
を引数として受け取ります。これがSingleTickerProviderStateMixin
を使用する理由であり、名前付きの説明ではTickerProvider
はTicker
を提供します。フレームの更新(または画面の更新)についてアプリに通知し、AnimationController
が新しい値を生成し、アニメーションウィジェットを再描画できるようにします。