【问题标题】:Scroll controller is not attached to any scroll views滚动控制器未附加到任何滚动视图
【发布时间】:2019-08-18 20:26:32
【问题描述】:

我将 scrollController 附加到 listView 构建器。我正在使用 Slider 控制滚动。但是我收到错误“滚动控制器未附加到任何滚动视图”。如果我将 Slider 的最大值设置为某个静态值,错误就消失了,但如果我设置 max = scrollController.position.maxScrollExtent 它给出错误。

 scrollController = ScrollController(initialScrollOffset: 0.0);
 scrollController.addListener(scrollListener);
Container(
            decoration: BoxDecoration(color: Colors.black),
            height: MediaQuery.of(context).size.height,
            width: MediaQuery.of(context).size.width,
            child: ListView.builder(
              controller: scrollController,
              scrollDirection: Axis.horizontal,
              itemCount: totalSegments,
              itemBuilder: (BuildContext context, int index) {
                return Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[

                    Container(
                      height: 70.0,
                      width: 148.0,
                      margin: EdgeInsets.only(top: 10.0),
                      decoration: BoxDecoration(
                        color: Colors.grey[800],
                      ),
                      child: Row(
                        children: <Widget>[
                          Container(
                            width: 20.0,
                            decoration: BoxDecoration(color: Colors.grey[900]),
                            child: Column(
                              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                              children: <Widget>[
                                Container(
                                  width: 7.0,
                                  height: 7.0,
                                  decoration:
                                      BoxDecoration(color: Colors.white),
                                ),
                                Container(
                                  width: 7.0,
                                  height: 7.0,
                                  decoration:
                                      BoxDecoration(color: Colors.white),
                                ),
                                Container(
                                  width: 7.0,
                                  height: 7.0,
                                  decoration:
                                      BoxDecoration(color: Colors.white),
                                ),
                              ],
                            ),
                          ),
                          Expanded(
                            child: Container(
                              decoration: BoxDecoration(
                                color: Colors.black,
                                borderRadius: BorderRadius.circular(5.0),
                              ),
                              margin:
                                  new EdgeInsets.only(top: 1.0, bottom: 1.0),
                              child: selectedSegment[index] != null
                                  ? SizedBox(
                                      height: double.infinity,
                                      width: double.infinity,
                                      child: Center(
                                          child: Container(
                                        decoration: BoxDecoration(
                                          image: DecorationImage(
                                            fit: BoxFit.fill,
                                            image: NetworkImage(
                                                selectedSegment[index]
                                                    ['segmentUrl']),
                                          ),
                                        ),
                                      )),
                                    )
                                  : Container(),
                            ),
                          ),
                        ],
                      ),
                    ),
                    Container(
                      width: 148.0,
                      height: MediaQuery.of(context).size.height - 130.0,
                      child: ListView(
                        scrollDirection: Axis.vertical,
                        children: buildSegmentList(index),
                      ),
                    ),
                  ],
                );
              },
            ),
          ),

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    试试这段代码,我在列表视图中得到了底部和向上事件状态..

    class ScrollViewDemo extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
      home: ScrollViewTest(),
    );
    }
    }
    
    class ScrollViewTest extends StatefulWidget {
    @override
    State<StatefulWidget> createState() {
    // TODO: implement createState
    return ScrollViewState();
    }
    }
    
    class ScrollViewState extends State<ScrollViewTest> {
    ScrollController _controller;
    String message = "";
    
    _scrollListener() {
    if (_controller.offset >= _controller.position.maxScrollExtent &&
        !_controller.position.outOfRange) {
      setState(() {
        message = "reach the bottom";
      });
    }
    if (_controller.offset <= _controller.position.minScrollExtent &&
        !_controller.position.outOfRange) {
      setState(() {
        message = "reach the top";
      });
     }
    }
    
    @override
    void initState() {
    _controller = ScrollController();
    _controller.addListener(_scrollListener);
    super.initState();
    }
    
    @override
    Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      appBar: AppBar(
        title: Text("Scrollview Demo"),
      ),
      body: Column(
        children: <Widget>[
          Container(
            height: 50.0,
            color: Colors.green,
            child: Center(
              child: Text(message),
            ),
          ),
          Expanded(
            child: ListView.builder(
              controller: _controller,
              itemCount: 30,
              itemBuilder: (context, index) {
                return ListTile(title: Text("Index : $index"));
              },
            ),
          ),
        ],
      ),
    );
    }
    }
    

    【讨论】:

    • 那你的问题呢。
    • 我正在连接滚动条和滑块小部件。当我给 Slider 的 max 参数一个值 max = scrollController.position.maxScrollExtent 上面提到的错误来了。
    猜你喜欢
    • 2020-02-24
    • 2019-02-06
    • 1970-01-01
    • 2019-07-30
    • 2019-02-17
    • 1970-01-01
    • 2020-01-27
    • 2021-12-31
    • 2019-10-30
    相关资源
    最近更新 更多