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