import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:hive/hive.dart'; import 'package:pilipala/utils/storage.dart'; import 'package:pilipala/utils/utils.dart'; class SetSwitchItem extends StatefulWidget { final String? title; final String? subTitle; final String? setKey; final bool? defaultVal; final Function? callFn; final bool? needReboot; const SetSwitchItem({ this.title, this.subTitle, this.setKey, this.defaultVal, this.callFn, this.needReboot, Key? key, }) : super(key: key); @override State createState() => _SetSwitchItemState(); } class _SetSwitchItemState extends State { // ignore: non_constant_identifier_names Box Setting = GStrorage.setting; late bool val; @override void initState() { super.initState(); val = Setting.get(widget.setKey, defaultValue: widget.defaultVal ?? false); } void switchChange(value) async { val = value ?? !val; await Setting.put(widget.setKey, val); if (widget.setKey == SettingBoxKey.autoUpdate && value == true) { Utils.checkUpdata(); } if (widget.callFn != null) { widget.callFn!.call(val); } if (widget.needReboot != null && widget.needReboot!) { SmartDialog.showToast('重启生效'); } setState(() {}); } @override Widget build(BuildContext context) { TextStyle titleStyle = Theme.of(context).textTheme.titleMedium!; TextStyle subTitleStyle = Theme.of(context) .textTheme .labelMedium! .copyWith(color: Theme.of(context).colorScheme.outline); return ListTile( enableFeedback: true, onTap: () => switchChange(null), title: Text(widget.title!, style: titleStyle), subtitle: widget.subTitle != null ? Text(widget.subTitle!, style: subTitleStyle) : null, trailing: Transform.scale( alignment: Alignment.centerRight, // 缩放Switch的大小后保持右侧对齐, 避免右侧空隙过大 scale: 0.8, child: Switch( thumbIcon: WidgetStateProperty.resolveWith((Set states) { if (states.isNotEmpty && states.first == WidgetState.selected) { return const Icon(Icons.done); } return null; // All other states will use the default thumbIcon. }), value: val, onChanged: (val) => switchChange(val), ), ), ); } }