簡體   English   中英

我將 ScrollController 附加到多個滾動視圖

[英]I'm getting ScrollController attached to multiple scroll views

我在其中有一個scrollController ,它是一個自定義小部件,在初始化后我在其中傳遞了scrollController 並且還有一些功能可以從該小部件操作 scrollController ,但是每當它到達運行操作部分時,它就會給我這個錯誤。

Unhandled Exception: 'package:flutter/src/widgets/scroll_controller.dart': Failed assertion: line 109 pos 12: '_positions.length == 1': ScrollController attached to multiple scroll views.

代碼

class WeekView<T> extends StatefulWidget {
@override
  WeekViewState<T> createState() => WeekViewState<T>();
}
class WeekViewState<T> extends State<WeekView<T>> {
late ScrollController _scrollController;
late PageController _pageController;
@override
  void initState() {
    super.initState();
_pageController = PageController(initialPage: _currentIndex);
    _scrollController = ScrollController();
  }

@override
  void didChangeDependencies() {
    super.didChangeDependencies();
  if (widget.enableScrollToEvent) {
      if (widget.scrollToEvent == ScrollToEvent.currentTime &&
          _controller.events.last.endTime != null) {
        _controller.addListener(() {
          scrollToCurrentTime(_controller.events.last.endTime!);
        });
      } else {
        _controller.addListener(scrollToEvent);
      }
    }
}

 @override
  Widget build(BuildContext context) {
       return PageView.builder(
                    itemCount: _totalWeeks,
                    controller: _pageController,
                    onPageChanged: _onPageChange,
                    itemBuilder: (_, index) {                      return InternalWeekViewPage<T>(
                     scrollController: _scrollController,
                      );
                    },
                  ),
}

功能,

void scrollToEvent() {
    if (_pageController.hasClients) {
      _pageController
          .animateToPage(
        _pageController.initialPage +
            ((_controller.events.last.date.getDayDifference(DateTime.now())) /
                    7)
                .floor(),
        curve: widget.pageTransitionCurve,
        duration: widget.pageTransitionDuration,
      )
          .then((value) {
        if (_scrollController.hasClients) {//<<<<<<<<<<< scrollController 
          if (_controller.events.last.endTime != null) { 
            _scrollController.animateTo(
              math.max(
                  _controller.events.last.endTime!.hour * _hourHeight -
                      _scrollController.position.viewportDimension +
                      _hourHeight,
                  0),
              duration: widget.scrollTransitionDuration,
              curve: widget.scrollToEventCurve,
            );
          }
        }
      });
    }
  }

自定義小部件,

class InternalWeekViewPage<T> extends StatelessWidget {
 const InternalWeekViewPage({
    required this.scrollController,
  });
@override
  Widget build(BuildContext context) {
    return  Expanded(
            child: SingleChildScrollView(
              controller: scrollController,
                child:(...)
               ),);
}
}

注意-:我刪除了一些不必要的部分以提高可讀性

當我手動滾動然后我進行操作時,它不會給我任何錯誤,但直接給我錯誤。

那么為什么即使我只在一個地方使用它,我也會收到此錯誤任何人都可以幫助我

從這個代碼

  itemBuilder: (_, index) {      
                 return InternalWeekViewPage<T>(
                     scrollController: _scrollController,
                );

項目構建器返回InternalWeekViewPage列表並具有相同的_scrollController

而不是傳遞_scrollController ,而是使InternalWeekViewPage statefullWidgte 並在initState上創建和初始化。

它解決了你的問題嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM