fluttercandies / flutter_scrollview_observer

A widget for observing data related to the child widgets being displayed in a ScrollView. Maintainer: @LinXunFeng
https://pub.dev/packages/scrollview_observer
MIT License
451 stars 46 forks source link

[How to use] 实现类似微信的列表滚动效果 #58

Closed ColaQian closed 1 year ago

ColaQian commented 1 year ago

Platforms

dart

Description

想问下,如果想实现类似微信那种唤起键盘或者选择表情列表时,如果当前列表不是在最底部,需要自动滑动到最底部,这个有好的解决方案吗

My code

No response

Try do it

No response

LinXunFeng commented 1 year ago

列表视图倒序显示

ListView.builder(
  ...
  reverse: true,
  ...
)

唤起键盘或者表情面板你自己肯定是能知道的,再手动调一次 jumpTo 滚动到最底部

scrollController.jumpTo(0);
ColaQian commented 1 year ago

列表视图倒序显示

ListView.builder(
  ...
  reverse: true,
  ...
)

唤起键盘或者表情面板你自己肯定是能知道的,再手动调一次 jumpTo 滚动到最底部

scrollController.jumpTo(0);

多谢大佬解惑。我这边注意到 ScrollController scrollController = ScrollController(); ListObserverController observerController = ListObserverController(controller: scrollController)

scrollController和observerController 都有一样的滚动方法(jumpTo, animateTo),尝试了下scrollController 能滚动成功,但是observerController则不行,这两个有啥区别么?什么场景下该用哪个呢?

LinXunFeng commented 1 year ago

区别与关系:

综上,面对上面说的场景,虽然都是传入 0 回到最顶部(倒序),但是如果使用 observerController.jumpTo 的话,它会根据你传入的下标去计算偏移量,其实你知道偏移量就是 0,没必要去计算,这个时候最好是用 scrollController.jumpTo

ColaQian commented 1 year ago

区别与关系:

  • scrollController.jumpTo 传入的是偏移量,observerController.jumpTo 传入的是下标
  • observerController.jumpTo 内部是依赖了 scrollController.jumpTo 去实现的滚动,只是根据开发者传入的下标去找对应的 item 然后计算偏移,所以在使用 observerController.jumpTo 的时候要注意将 scrollController 传递给 ListViewcontroller,否则不会生效!

综上,面对上面说的场景,虽然都是传入 0 回到最顶部(倒序),但是如果使用 observerController.jumpTo 的话,它会根据你传入的下标去计算偏移量,其实你知道偏移量就是 0,没必要去计算,这个时候最好是用 scrollController.jumpTo

嗯嗯了解了,多谢多谢~