颤动sliding_up_panel插件如何在关闭时跳转到面板顶部?

问题描述

我正在使用 Flutter 的 sliding_up_panel 并且我的应用出现故障。

我有一个 Googlemap 作为后面板,当您从应用程序抽屉中选择一个位置时,它会将地图相机动画化为标记,并且向上滑动的面板“窥视”,显示面板顶部,使用面板的 { {1}} 属性。如果对 peek 感兴趣,则用户可以选择拉起以显示 ListView 中包含的标记位置的更多详细信息。

如果用户从应用程序抽屉中选择一个新位置,就会出现问题。面板关闭,地图相机为新标记设置动画,然后面板为新位置提供 200 像素的面板透视,但滚动位置保留了先前面板的详细信息。所以我可以偷看一下,它应该显示标记位置的标题,但实际上在面板中间显示了一张图片或文本。

我试过使用 minHeight: 要将面板 ListView 跳到顶部,但 Android Studio Logcat 说

slideUpPanelScrollController.jumpTo(0);

显然,我不明白如何将 SlidingPanel 的 ScrollController 附加到面板的 ListView。我对控制器的理解有待提高。

感谢帮助。

ScrollController not attached to any scroll views.
'package:Flutter/src/widgets/scroll_controller.dart':
Failed assertion: line 171 pos 12: '_positions.isNotEmpty'

在这里将 ScrollController 附加到 ListView:

SlidingUpPanel(
        key: Key("slidingUpPanelKey"),borderRadius: new BorderRadius.vertical(top: Radius.circular(8)),parallaxEnabled: true,controller: slidingPanelController,onPanelOpened: () async {
          setState(() {
            panelMinHeight = 0;
          });
          },onPanelClosed: () {
          slideUpPanelScrollController.jumpTo(0);
        },minHeight: panelMinHeight,maxHeight: MediaQuery.of(context).size.height - AppBar().preferredSize.height,panelBuilder: (slideUpPanelScrollController) => _scrollingList(slideUpPanelScrollController,presentLocation),body: Animarker(
          // Other properties
          curve: Curves.ease,//markers: animatedMarkerMap.values.toSet(),isActiveTrip: false,//rippleAnimationActive,rippleRadius: 0.1,//[0,1.0] range,how big is the circle
          rippleColor: myColorSwatch.gold,// Colors.teal Color of fade ripple circle
          rippleduration: Duration(milliseconds: 2600),//pulse ripple duration
          shouldAnimateCamera: false,// Todo stops weird camera centering movement?
          mapId: _mapController.future.then<int>((value) => value.mapId),child: GoogleMap(
            key: Key("myGoogleMap"),mapType: MapType.hybrid,initialCameraPosition: _initialCameraPosition,//Todo markers: _markers,markers: animatedMarkerMap.values.toSet(),circles: mapCircles,// used for highlighting a location selected from the drawer
            myLocationEnabled: true,zoomControlsEnabled: false,// Todo would prefer them on screen,but 1/2 off!
            onMapCreated: (GoogleMapController controller) {
              print("GoogleMaps onMapCreated fired");
              _mapController.complete(controller);
            },),

滑动面板应显示其 ListView 的顶部,带有可拖动的指示器、标题、副标题,如下所示

enter image description here

但是,如果我从应用程序抽屉中打开一个新位置,将新位置的数据喷射到面板中,它不会重置面板的 ScrollPosition,而是保持它,将用户信息显示一半:

enter image description here

解决方法

您是否将 slideUpPanelScrollController 附加到 ListView:

ListView(
  controller: slideUpPanelScrollController