https://pub.dev/packages/flutter_widgets
https://pub.dev/documentation/flutter_widgets/latest/flutter_widgets/VisibilityDetector-class.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | // // 曝光埋点案例 // import 'package:flutter/material.dart'; import 'package:flutter_widgets/flutter_widgets.dart'; class Exposure extends StatefulWidget { const Exposure({Key key}) : super(key: key); @override _ExposureState createState() => _ExposureState(); } class _ExposureState extends State<Exposure> { @override Widget build(BuildContext context) { return Container( color:Colors.white, child: _buildSuggestions(), ); } Widget _buildSuggestions() { return ListView.builder( itemBuilder: (context, i) { return _buildRow(i); } ); } Widget _buildRow(int i) { return SizedBox( height: 180, child: ListView.builder( scrollDirection: Axis.horizontal, itemBuilder: (_, j) { String key = '$i - $j'; return Container( width: 200, height: 180, margin: const EdgeInsets.all(3.0), decoration: BoxDecoration( border: Border.all(width: 1) ), child: VisibilityDetector( key: Key(key), onVisibilityChanged: (visibilityInfo) { final double visiblePercentage = visibilityInfo.visibleFraction * 100; debugPrint('---------------------Widget ${visibilityInfo.key} is ${visiblePercentage.toInt()}% visible'); }, child: Center( child: Text(key, style: TextStyle(fontSize: 18.0)), ), ), ); }, ), ); } } |