Selon ceci: exemple de code
J'ai créé ma propre implémentation de 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(),
),
),
);
}
}
En ligne: _tabController = new TabController(vsync: this, length: choices.length);
J'ai reçu une erreur ce message:
erreur: le type d'argument "_MyAppState" ne peut pas être affecté au type de paramètre "TickerProvider". (argument_type_not_assignable dans [swap] lib/main.Dart: 24)
Quel est le problème avec mon code?
Ajouter with TickerProviderStateMixin
à la fin de la déclaration de classe de votre State
.
Comme indiqué précédemment, l'ajout de mixin
, TickerProviderStateMixin
devrait faire le travail ou vous pouvez également utiliser SingleTickerProviderStateMixin
si vous n'avez besoin que d'un seul Ticker
.
Mais qu'est-ce que
TickerProviders
fait vraiment?
vsync
prend un TickerProvider
comme argument, c'est pourquoi nous utilisons SingleTickerProviderStateMixin
et comme le nom l'indique TickerProvider
fournit Ticker
ce qui signifie simplement informe notre application de la mise à jour du cadre (ou de la mise à jour de l'écran), afin que notre AnimationController
puisse générer une nouvelle valeur et que nous puissions redessiner le widget animé.