Files
hjsq_android/analytics_sdk/lib/extension/tab_analytics_extension.dart
T
2026-10-08 11:37:25 +07:00

52 lines
1.6 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// lib/extension/tab_analytics_extension.dart
import 'package:analytics_sdk/entity/analytics_tab.dart';
import 'package:analytics_sdk/widget/analytics_bottom_nav_wrapper.dart';
import 'package:analytics_sdk/widget/analytics_tab_bar_wrapper.dart';
import 'package:flutter/material.dart';
/// 为 [BottomNavigationBar] 提供 analytics 自动埋点能力。
///
/// 示例:
/// ```dart
/// BottomNavigationBar(
/// currentIndex: _index,
/// onTap: (i) => setState(() => _index = i),
/// items: const [...],
/// ).withAnalytics(tabs: [
/// AnalyticsTab('home', '首页'),
/// AnalyticsTab('discover'), // pageName 走 PageNameMapper 自动解析
/// ])
/// ```
extension AnalyticsBottomNavExtension on BottomNavigationBar {
/// 切换 Tab 时自动上报 AppPageViewEvent + NavigationEvent,
/// 并更新 PageLifecycleObserver.currentPageKey。
Widget withAnalytics({required List<AnalyticsTab> tabs}) {
return AnalyticsBottomNavWrapper(
tabs: tabs,
child: this,
);
}
}
/// 为 [TabBar] 提供 analytics 轻导航埋点能力。
///
/// 示例:
/// ```dart
/// TabBar(
/// controller: _tabController,
/// tabs: const [Tab(text: '视频'), Tab(text: '小说')],
/// ).withAnalytics(tabs: [
/// AnalyticsTab('video', '视频'),
/// AnalyticsTab('novel'),
/// ])
/// ```
extension AnalyticsTabBarExtension on TabBar {
/// 切换 Tab 时自动上报 NavigationEvent(轻导航,不更新 currentPageKey)。
AnalyticsTabBarWrapper withAnalytics({required List<AnalyticsTab> tabs}) {
return AnalyticsTabBarWrapper(
tabs: tabs,
child: this,
);
}
}