import 'package:flutter/material.dart'; import 'package:yx_tracking_flutter/yx_tracking_flutter.dart'; class SectionCard extends StatelessWidget { const SectionCard({ super.key, required this.title, required this.children, }); final String title; final List children; @override Widget build(BuildContext context) { return Card( margin: const EdgeInsets.symmetric(vertical: 8), child: Padding( padding: const EdgeInsets.all(12), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(title, style: Theme.of(context).textTheme.titleMedium), const SizedBox(height: 12), ...children, ], ), ), ); } } class ActionButton extends StatelessWidget { const ActionButton({ super.key, required this.label, required this.onPressed, this.outlined = true, this.running = false, }); final String label; final VoidCallback? onPressed; final bool outlined; final bool running; @override Widget build(BuildContext context) { final child = Text(running ? '$label...' : label); if (outlined) { return OutlinedButton(onPressed: onPressed, child: child); } return ElevatedButton(onPressed: onPressed, child: child); } } class RecentEventList extends StatelessWidget { const RecentEventList({super.key, required this.items}); final List items; @override Widget build(BuildContext context) { if (items.isEmpty) { return const Text('暂无事件'); } return ListView.separated( itemCount: items.length, separatorBuilder: (_, __) => const Divider(height: 1), itemBuilder: (context, index) { final item = items[index]; return ListTile( dense: true, title: Text(item.eventType), subtitle: Text( '${item.createTime.toIso8601String()} · retry=${item.retryCount}', ), ); }, ); } } class LogList extends StatelessWidget { const LogList({super.key, required this.logs, required this.controller}); final List logs; final ScrollController controller; @override Widget build(BuildContext context) { if (logs.isEmpty) { return const Text('暂无日志'); } return ListView.builder( controller: controller, itemCount: logs.length, itemBuilder: (context, index) => Text(logs[index]), ); } }