analytics_sdk 0.1.0
analytics_sdk: ^0.1.0 copied to clipboard
通用 Flutter 埋点 SDK,纯 Dart 实现,支持公共参数、离线队列与批量上报。
import 'package:analytics_sdk/analytics_sdk.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Analytics.init(
const AnalyticsConfig(
appId: 'analytics_example',
serverUrl: '',
env: AnalyticsEnv.debug,
enableDebugLog: true,
superPropertiesProvider: _exampleSuperProperties,
),
);
runApp(const ExampleApp());
}
Future<Map<String, dynamic>> _exampleSuperProperties() async {
return {'channel': 'example'};
}
/// 路由常量,与 [routerPages] 中的 [GetPage.name] 保持一致。
class AppRoutes {
static const homePage = '/';
static const detailPage = '/detail';
}
/// GetX 路由表(与业务项目 routerPages 形式一致)。
final routerPages = [
GetPage(
name: AppRoutes.homePage,
page: () => const HomePage(),
transition: Transition.native,
),
GetPage(
name: AppRoutes.detailPage,
page: () => const DetailPage(),
transition: Transition.native,
),
];
class ExampleApp extends StatefulWidget {
const ExampleApp({super.key});
@override
State<ExampleApp> createState() => _ExampleAppState();
}
class _ExampleAppState extends State<ExampleApp> with AnalyticsLifecycleMixin {
@override
Widget build(BuildContext context) {
return GetMaterialApp(
initialRoute: AppRoutes.homePage,
getPages: routerPages,
routingCallback: Analytics.routingCallback(),
);
}
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Analytics Example')),
body: ListView(
padding: const EdgeInsets.all(16),
children: [
const Text('向下滚动,观察 Banner 可见/不可见事件'),
Analytics.visible(
elementName: 'home_banner',
properties: const {'position': 'list_center'},
child: Container(
width: double.infinity,
padding: const EdgeInsets.all(16),
color: Colors.blue.shade50,
child: const Text('Banner(Analytics.visible 自动采集)'),
),
),
const SizedBox(height: 24),
ElevatedButton(
onPressed: () {
Analytics.track(
'demo_button_click',
properties: const {'button': 'track_event'},
);
},
child: const Text('Track Event(点击中 track)'),
),
const SizedBox(height: 12),
ElevatedButton(
onPressed: () {
Analytics.identify(userId: 'demo_user_001');
},
child: const Text('Identify User'),
),
const SizedBox(height: 12),
ElevatedButton(
onPressed: () => Get.toNamed(AppRoutes.detailPage),
child: const Text('Open Detail Page'),
),
const SizedBox(height: 600),
],
),
);
}
}
class DetailPage extends StatelessWidget {
const DetailPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Detail')),
body: Center(
child: ElevatedButton(
onPressed: Get.back,
child: const Text('Back'),
),
),
);
}
}