gpt4 book ai didi

dart - flutter ScrollController 附加到多个 ScrollView

转载 作者:行者123 更新时间:2023-12-03 02:53:19 25 4
gpt4 key购买 nike

当呈现多个小部件实例并且调用 getValue 方法时,flutter 会抛出附加到多个 ScrollView 的错误 ScrollController。我假设这是因为它们都使用相同的 Controller ,但我不知道解决这个问题的方法,而无需为每次使用创建单独的小部件。有没有更好的方法来解决这个问题?

class NumScroller extends StatelessWidget{
final int max,min;
final double height,width;
final TextAlign alignment;

static ScrollController controller;

NumScroller({this.height,this.width,this.alignment,this.min,this.max, initialOffset}){
controller = new ScrollController(initialScrollOffset: initialOffset);
}

getValue() => (controller.offset~/height) + min;

@override
Widget build(BuildContext context) {
return new Container(
width: width,
height: height,
child: ListView.builder(itemBuilder: (context, index) {
return new Container(height: height, child:Text((max - index).toString(),textAlign: alignment,));
},
itemCount: max - min+1,
controller: controller,
physics: PageScrollPhysics(),
itemExtent: height,
)
);
}

}

最佳答案

不要使用静态 Controller ,您应该为每个小部件实例设置一个 Controller 。

但是,您不能将 Controller 存储在 StatelessWidget 中(即使编译器允许)。

为此,您需要一个 StatefulWidget,否则当您的小部件更新时,您将再次创建一个新 Controller 。导致奇怪的行为。

这里的最终代码:

class NumScroller extends StatefulWidget{
final int max,min;
final double height,width;
final TextAlign alignment;

NumScroller({this.height,this.width,this.alignment,this.min,this.max, initialOffset});

@override
NumScrollerState createState() {
return new NumScrollerState();
}
}

class NumScrollerState extends State<NumScroller> {
final ScrollController controller = ScrollController();

getValue() => (controller.offset~/widget.height) + widget.min;

@override
Widget build(BuildContext context) {
return new Container(
width: widget.width,
height: widget.height,
child: ListView.builder(itemBuilder: (context, index) {
return new Container(height: widget.height, child:Text((widget.max - index).toString(),textAlign: widget.alignment,));
},
itemCount: widget.max - widget.min+1,
controller: controller,
physics: PageScrollPhysics(),
itemExtent: widget.height,
)
);
}
}

关于dart - flutter ScrollController 附加到多个 ScrollView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52484710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com