【发布时间】:2019-02-28 06:47:09
【问题描述】:
当呈现多个小部件实例并调用 getValue 方法时,flutter 会抛出错误 ScrollController 附加到多个滚动视图。我假设这是因为它们都使用相同的控制器,但我不知道如何解决此问题,而无需在每次使用时创建单独的小部件。有没有更好的方法来解决这个问题?
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,
)
);
}
}
【问题讨论】:
-
你应该使用有状态的小部件而不是无状态的。
-
嗨@Remi,为什么应该是
Stateful?。 -
因为您可以为每个小部件实例拥有一个控制器。没有一个静态控制器随处使用。
-
对不起,我不明白。即使使用
Stateless,我们也可以为每个小部件实例拥有一个控制器 -
@DineshBalasubramanian 应该保留控制器。每次 props 更改时重新创建一个新的(使用 StatelessWidget 时会发生这种情况)会产生不良影响。