// screens/settings/settings_card.dart — 设置面板卡(自 settings_screen.dart 抽取为公共组件, // 供 SettingsScreen 各面板与独立授权屏 LicenseScreen 复用)。 // 原型右侧 .card:surface / 1px border / r-lg / padding 22 24 / mb18; // h2 17 heading + desc 12 muted(可带右上角按钮)。 import 'package:flutter/material.dart'; import '../../core/theme/app_dims.g.dart'; import '../../core/theme/context_tokens.dart'; class SettingsCard extends StatelessWidget { final String title; final String desc; final Widget child; final Widget? trailing; const SettingsCard( {super.key, required this.title, required this.desc, required this.child, this.trailing}); @override Widget build(BuildContext context) { final t = context.tokens; return Container( margin: const EdgeInsets.only(bottom: 18), padding: const EdgeInsets.fromLTRB(24, 22, 24, 22), decoration: BoxDecoration( color: t.surface, border: Border.all(color: t.border), borderRadius: BorderRadius.circular(AppDims.rLg), ), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Row(children: [ Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(title, style: TextStyle( fontSize: AppDims.fsH2, fontWeight: FontWeight.w700, color: t.heading)), const SizedBox(height: 3), Text(desc, style: TextStyle(fontSize: AppDims.fsSm, color: t.muted)), ], ), ), if (trailing != null) trailing!, ]), const SizedBox(height: 16), child, ], ), ); } }