widgets_visibility_provider 1.0.1 copy "widgets_visibility_provider: ^1.0.1" to clipboard
widgets_visibility_provider: ^1.0.1 copied to clipboard

outdated

This is a library that listens to children inside scrollview.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:widgets_visibility_provider/widgets_visibility_provider.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: Scaffold(
        body: WidgetsVisibilityProvider(
          // range condition default or return null condition is:
          // 范围判断默认或者返回 null 情况下执行的是:
          // positionData.endPosition >= 0 && positionData.startPosition <= positionData.viewportSize
          condition: (PositionData positionData) => null,
          child: Column(
            children: [
//              WidgetVisibilityListener(
//                listener: (context, event) {
//                  print('[WidgetVisibilityListener] event: $event');
//                },
//                condition: (previous, current) => true,
//                child: someWidget,
//              ),
              WidgetsVisibilityBuilder(
                  // if you don't need startPosition end endPosition change, you can use it
                  // 如果你不需要 startPosition 和 endPosition 变化,你可以增加此条件减少 build 次数
//                   condition: (previous, current) => !listEquals(
//                       previous.positionDataList.map((e) => e.data).toList(),
//                       current.positionDataList.map((e) => e.data).toList()),
                  builder: (context, event) => Container(
                        padding: const EdgeInsets.symmetric(vertical: 8),
                        child: Column(
                          children: [
                            Text(
                                '[notification] pixels: ${event.notification?.metrics?.pixels}, minScrollExtent: ${event.notification?.metrics?.minScrollExtent}, maxScrollExtent: ${event.notification?.metrics?.maxScrollExtent}, viewportDimension: ${event.notification?.metrics?.viewportDimension}'),
                            Wrap(
                              children: [
                                Text('display: '),
                                ...event.positionDataList.map(
                                  (e) => Container(
                                    padding: const EdgeInsets.symmetric(
                                        horizontal: 2),
                                    child: Text('${e.data}'),
                                  ),
                                ),
                              ],
                            ),
                          ],
                        ),
                      )),
              Expanded(
                child: ListView.builder(
                  itemBuilder: (context, index) => VisibleNotifierWidget(
                    // data type is dynamic, you can set everything
                    // data 的类型是 dynamic, 你可以设置任何数据
                    data: index,
                    // positionData and notification is nullable
                    // positionData 和 notification 有可能为空
                    builder: (context, notification, positionData) => Container(
                      height: 128,
                      color: index.isEven
                          ? const Color(0xff000000).withOpacity(0.3)
                          : const Color(0xff000000).withOpacity(0.1),
                      padding: EdgeInsets.all(8),
                      child: Center(
                        child: Text(
                            '$index, start: ${positionData?.startPosition}, end: ${positionData?.endPosition}'),
                      ),
                    ),
                    // or use listener and child
//                    listener: (context, notification, positionData) {
//                      print(
//                          '[listener] notification: $notification, positionData: $positionData');
//                    },
//                    child: someWidget,
                  ),
                  itemCount: 64,
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
25
likes
0
pub points
86%
popularity

Publisher

verified publisheryeungkc.com

This is a library that listens to children inside scrollview.

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

bloc, equatable, flutter, flutter_bloc

More

Packages that depend on widgets_visibility_provider