web-dev-qa-db-fra.com

Propriété `vsync` dans le constructeur TabController

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?

19
Kamil Harasimowicz

Ajouter with TickerProviderStateMixin à la fin de la déclaration de classe de votre State.

39
Collin Jackson

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é.

9
Shubham Soni