import 'package:expandable/expandable.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/mine/about/debug/debug_tool.dart'; import 'package:star_lock/mine/about/debug/log.dart'; class DebugConsoleTile extends StatefulWidget { const DebugConsoleTile(this.log, {key, this.expanded = false}); final DebugConsoleLog log; final bool expanded; @override State createState() => _DebugConsoleTileState(); } class _DebugConsoleTileState extends State { ExpandableController? controller; @override void initState() { super.initState(); controller = ExpandableController(initialExpanded: widget.expanded); } @override Widget build(BuildContext context) { return Container( color: widget.log.level.color?.withOpacity(0.05), child: Container( color: widget.log.level.color?.withOpacity(0.05), child: InkWell( onTap: widget.log.stackTrace != null ? () { controller!.toggle(); setState(() {}); } : () async { DeBug.openInfo = true; await Get.to(DeBugText(widget.log)); DeBug.openInfo = false; }, child: ExpandablePanel( controller: controller, theme: const ExpandableThemeData( tapBodyToCollapse: false, tapHeaderToExpand: false, hasIcon: false, ), header: ListTile( textColor: widget.log.level.color, title: Text( widget.log.message, maxLines: 5, overflow: TextOverflow.ellipsis, ), trailing: Column( children: [ SizedBox(height: widget.log.stackTrace != null ? 4 : 15), Opacity( opacity: 0.5, child: widget.log.timestamp .difference(DateTime.now()) .inDays > 1 ? Text( '${widget.log.timestamp.toIso8601String().substring(0, 10)} ${widget.log.timestamp.toIso8601String().substring(11, 19)}') : Text(widget.log.timestamp .toIso8601String() .substring(11, 19)), ), if (widget.log.stackTrace != null) AnimatedRotation( duration: const Duration(milliseconds: 200), curve: Curves.easeInOut, turns: controller!.expanded ? -0.5 : 0, child: Icon(Icons.keyboard_arrow_down, color: widget.log.level.color), ) ], ), ), collapsed: Container(), expanded: widget.log.stackTrace != null ? Opacity( opacity: 0.75, child: ListTile( textColor: widget.log.level.color, title: Text(widget.log.stackTrace.toString()), ), ) : Container(), ), ), ), ); } } class DeBugText extends StatefulWidget { DeBugText(this.log, {key}); final DebugConsoleLog log; @override State createState() => _DeBugTextState(); } class _DeBugTextState extends State { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('详细日志'.tr), ), body: SafeArea( child: GestureDetector( onTap: () { Clipboard.setData(ClipboardData(text: widget.log.message)); EasyLoading.showToast('已复制到剪切板'.tr); }, child: SingleChildScrollView( child: Padding( padding: EdgeInsets.all(18.w), child: Text(widget.log.message), )), ), ), ); } }