搜尋套件、儲存庫與 APP 分類

widgets_visibility_provider 封面
套件詳情v3.0.1

widgets_visibility_provider

這是一個監聽 ScrollView 內部子項的程式庫。

AndroidiOSWebmacOSWindowsLinux
近 30 天下載
132
喜歡數
24
Pub 分數
120

安裝套件

flutter pub add widgets_visibility_provider

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

widgets_visibility_provider 套件是一個 Flutter 庫,專門用於監控可滾動容器內子組件的可見性。它會監聽 ScrollView 內子項的位置,並在它們變為可見或隱藏時發出通知,進而實現基於使用者滾動的動態行為。非常適合用來實作懶加載、動畫或追蹤使用者對特定內容區段的參與度等功能。此套件支援所有主要平台,包括 Android、iOS、Web、macOS、Windows 和 Linux,讓跨平台應用具有高度的彈性。

適用情境

  • 內容的懶加載
  • 用於分析的追蹤可見性
  • 滾動時觸發動畫
  • 實現無限滾動
  • 基於可見性的動態UI更新

主要特色

  • 即時可見性檢測
  • 跨平台相容性
  • 與 ScrollView 的簡單整合
  • 基於回呼的通知系統
  • 輕量且高效

適合對象

  • 具有長可滾動清單的應用程式
  • 內容密集型介面
  • 互動式滾動驅動體驗
  • 整合分析的使用者介面
  • 注重性能的開發人員

使用建議

  • 如果監控許多小部件,可能會影響效能
  • 需要仔細管理回調
  • 最適合可見子項數量適中的情況
  • 不適合複雜的嵌套滾動結構
  • 需要在不同平台的滾動行為上進行測試

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

widgets_visibility_provider

Pub 996.icu License: 996.icu License: MIT

A library that listens to children inside scrollview

一个监听 scrollview 内部 child 的库

Screenshot

like Instagram show comment

Screenshot

Getting Started

widgets_visibility_provider: ^2.0.2

More info

Flutter 如何在 scrollview 监听子 widget

Flutter 实现类似 ins 的显示评论框效果

How to use

如何使用

First

Use WidgetsVisibilityProvider to wrap scrollview(CustomScrollView, ListView...)

使用 WidgetsVisibilityProvider 包裹 scrollview(CustomScrollview, ListView..)

WidgetsVisibilityProvider(
  // range condition default or return null condition is:
  // 范围判断默认或者返回 null 情况下执行的是:
  // positionData.endPosition >= 0 && positionData.startPosition <= positionData.viewportSize
  condition: (PositionData positionData)=> null,
  // No need to wrap directly
  // 不必直接包裹
  child: SomeWidget(
    child:  ListView.builder(// CustomScrollView, GridView...
      ...some code...
    ),
  ),
)
Second

Use VisibleNotifierWidget to wrap child widget

使用 VisibleNotifierWidget 包裹子 widget

on ListView:

ListView.builder(
  itemCount: itemCount,
  itemBuilder: (context, index) => VisibleNotifierWidget(
    // data type is dynamic, you can set everything or don't set or null
    // data 的类型是 dynamic, 你可以设置任何数据或者为 null 或者不设置
    data: index,
    // you can use builder or child
    // 你可以使用 builder 或者 child
    // positionData and notification is nullable
    // positionData 和 notification 有可能为空
    builder: (context, notification, positionData) => ...,
    // if you use builder, can't use listener and child
    // 如果你使用了 builder, 就不能使用 listener 和 child
    listener: (context, notification, positionData) {
      ...
    },
    child: child(),
    // default buildWhen or return null condition is:
    // 默认判断或者返回 null 情况下执行的是:
    // if (previousPositionData != currentPositionData) return true;
    // if (previousPositionData != null && currentPositionData != null)
    // return previousNotification != currentNotification;
    // return false;
    condition: (
      previousNotification,
     previousPositionData,
     currentNotification,
     currentPositionData,
     )=>...,
  ),
)

on SliverToBoxAdapter

SliverToBoxAdapter(
  child: VisibleNotifierWidget(
    // same to ListView example
    // 和上面一样
    ...
    child: child,
  ),
)

on SliverList

SliverList(
  delegate: SliverChildBuilderDelegate(
    (BuildContext context, int index) => VisibleNotifierWidget(
      // same to ListView example
      // 和上面一样
      ...
      child: child,
    ),
  ),
)
Maybe Third

If you want to watch all widget information

如果你希望一次过获取所有范围内的 widget 信息

Use WidgetsVisibilityBuilder or WidgetsVisibilityListener or WidgetsVisibilityConsumer in WidgetsVisibilityProvider childtree If you use bloc, you can also use WidgetsVisibilityProviderBloc

在 WidgetsVisibilityProvider 的子 widget 使用 WidgetsVisibilityBuilder 或者 WidgetsVisibilityListener或者WidgetsVisibilityConsumer 如果你使用 bloc,也可以使用 WidgetsVisibilityProviderBloc

WidgetsVisibilityBuilder(
  builder: (context, event) => someWidget,
  // Of course, you can also increase the judgment buildWhen
  // 当然你也可以增加条件
  buildWhen: (previous, current)=>...,
)

WidgetsVisibilityListener(
  // Of course, you can also increase the judgment listenWhen
  // 当然你也可以增加条件
  listenWhen: (previous, current)=>...,
  listener: (context, event) {
    ...
  },
  child: child,
)

WidgetsVisibilityConsumer(
  builder: (context, event) => someWidget,
  buildWhen: (previous, current)=>...,
  listenWhen: (previous, current)=>...,
  listener: (context, event) {
)
About data bean

PositionData

class PositionData extends Equatable {
  final double startPosition;
  final double endPosition;
  final double viewportSize;
  final dynamic data;

  ...other code
}

WidgetsVisibilityEvent

class WidgetsVisibilityEvent extends Equatable {
  final ScrollNotification notification;
  final List<PositionData> positionDataList;

  ...other code
}

所屬分類

依賴

依賴清單 3 項

原始碼儲存庫

使用此套件的專案

暫無相關資料。