import 'package:flutter/material.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; import '../theme/app_text.dart'; Future showOutboundServiceSheet( BuildContext context, { String title = '即将打开外部服务', String description = '你将离开金值,进入第三方服务页面。外部内容由对应服务提供。\n价格与资讯仅供参考,不构成投资建议。', String cancelLabel = '取消', String confirmLabel = '继续前往', }) { return showModalBottomSheet( context: context, isScrollControlled: true, isDismissible: true, enableDrag: true, backgroundColor: Colors.transparent, barrierColor: Colors.black.withValues(alpha: 0.45), builder: (_) => OutboundServiceSheet( title: title, description: description, cancelLabel: cancelLabel, confirmLabel: confirmLabel, ), ); } class OutboundServiceSheet extends StatelessWidget { const OutboundServiceSheet({ super.key, this.title = '即将打开外部服务', this.description = '你将离开金值,进入第三方服务页面。外部内容由对应服务提供。\n价格与资讯仅供参考,不构成投资建议。', this.cancelLabel = '取消', this.confirmLabel = '继续前往', }); final String title; final String description; final String cancelLabel; final String confirmLabel; @override Widget build(BuildContext context) { final cs = ShadTheme.of(context).colorScheme; final bottomInset = MediaQuery.viewPaddingOf(context).bottom; return Container( width: double.infinity, decoration: BoxDecoration( color: cs.background, borderRadius: const BorderRadius.only( topLeft: Radius.circular(24), topRight: Radius.circular(24), ), border: Border.all(color: cs.border), ), padding: EdgeInsets.fromLTRB(22, 12, 22, 22 + bottomInset), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ Center( child: Container( width: 70, height: 5, decoration: BoxDecoration( color: cs.border, borderRadius: BorderRadius.circular(999), ), ), ), const SizedBox(height: 26), Text( title, style: TextStyle( fontSize: 22, fontWeight: FontWeight.w700, color: cs.foreground, ), ), const SizedBox(height: 12), Text( description, style: AppText.body.copyWith( fontSize: 14, height: 1.65, color: cs.mutedForeground, ), ), const SizedBox(height: 24), Row( children: [ Expanded( child: ShadButton.outline( foregroundColor: cs.foreground, onPressed: () => Navigator.of(context).pop(false), child: Text(cancelLabel), ), ), const SizedBox(width: 12), Expanded( child: ShadButton( onPressed: () => Navigator.of(context).pop(true), child: Text(confirmLabel), ), ), ], ), ], ), ); } }