web-dev-qa-db-fra.com

Erreur de flottement: "ScrollController non attaché à une vue de défilement." sur le rouleau

Chaque fois que je fais défiler dans ma listeView, je reçois cette erreur spammée dans la console:

ScrollController not attached to any scroll views.
'package:flutter/src/widgets/scroll_controller.Dart':
Failed assertion: line 110 pos 12: '_positions.isNotEmpty'

J'essaie de résoudre ce problème toute la journée et j'aimerais que quelqu'un d'autre, jetez un coup d'œil à cela. Il y a plus de problèmes avec ce code, mais je suis principalement intéressé par la correction de cette erreur.

J'ai essayé d'utiliser ListView.Builder, vérifiant HController.hasclients et beaucoup plus de petites choses. Ils ne semblaient pas changer quoi que ce soit

class MyHome extends StatefulWidget {
  @override
  MyHomeState createState() => new MyHomeState();
}

class MyHomeState extends State<MyHome> with SingleTickerProviderStateMixin {
  ScrollController hController;
  ScrollController tController;
  ScrollController fController;
  ScrollController bController;

  @override
  void initState() {
    super.initState();
    hController = new ScrollController()..addListener(_scrollListener);
    tController = new ScrollController()..addListener(_scrollListener);
    fController = new ScrollController()..addListener(_scrollListener);
    bController = new ScrollController()..addListener(_scrollListener);
  }

  @override
  void dispose() {
    super.dispose();
    hController.removeListener(_scrollListener);
    tController.removeListener(_scrollListener);
    fController.removeListener(_scrollListener);
    bController.removeListener(_scrollListener);
  }
  @override
  Widget build(BuildContext context) {
    return new DefaultTabController(
        length: 4,
        child: new Scaffold(
          //Removed AppBar for readability
          body: new TabBarView(
            children: [
              new Container(// hot
                child: ListView(
                    controller: hController,
                    children: <Widget>[
                      Utils.show("hot")
                    ],
                ),
              ),
              new Container( //Trending
                child: ListView(
                  controller: tController,
                  children: <Widget>[
                    Utils.show("trending")
                  ],
                ),
              ),
              new Container( //Fresh
                child: ListView(
                  controller: fController,
                  children: <Widget>[
                    Utils.show("fresh")
                  ],
                ),
              ),
              new Container( //Best
                child: ListView(
                  controller: bController,
                  children: <Widget>[
                    Utils.show("best")
                  ],
                ),
              ),
            ],
          ),
        ));
  }
  void _scrollListener() {
    if (hController.position.extentAfter == 0.0) {
      setState(() {
        Utils.show("hot");
      });
    }else if (tController.position.extentAfter == 0.0) {
      setState(() {
        Utils.show("trending");
      });
    } else if (fController.position.extentAfter == 0.0) {
      setState(() {
        Utils.show("fresh");
      });
    } else if (bController.position.extentAfter == 0.0) {
      setState(() {
        Utils.show("best");
      });
    }
  }

}

EDIT: Pour une certaine clarté, la première fois que j'ai posté ce code, j'ai utilisé TController deux fois. C'était une erreur, mais n'a pas résolu l'erreur. L'erreur se produit lors du défilement dans chacun des quatre ListVoyages.

6
Karsten

Si vous collez votre code correctement - il semble y avoir une erreur:

new Container(// hot
  child: ListView(
    controller: tController,
    children: <Widget>[
      Utils.show("hot")
    ],
  ),
),
new Container( //Trending
  child: ListView(
    controller: tController,
    children: <Widget>[
      Utils.show("trending")
    ],
  ),
),

Vous avez utilisé tController deux fois et vous n'avez pas utilisé hController

0
Andrey Turkovsky