// Author: fruit.com.cn import 'dart:async'; import 'package:flutter/material.dart'; import '../../core/legal/legal_opener.dart'; import '../../core/legal/legal_page.dart'; import '../../core/theme/app_colors.dart'; import '../../core/theme/app_dimens.dart'; import '../../l10n/app_localizations.dart'; /// 设置页里的服务条款和隐私协议。点一行就打开当前语言的公开页。 class LegalLinksCard extends StatelessWidget { const LegalLinksCard({super.key, this.open}); final Future Function(String url)? open; @override Widget build(BuildContext context) { final l10n = AppLocalizations.of(context)!; final rows = <_LegalRow>[ _LegalRow( key: const Key('settings-terms'), title: l10n.legalTerms, path: legalTermsPath, ), _LegalRow( key: const Key('settings-privacy'), title: l10n.legalPrivacy, path: legalPrivacyPath, ), ]; return Material( color: AppColors.card, borderRadius: BorderRadius.circular(AppDimens.cardRadius), clipBehavior: Clip.antiAlias, child: Column( children: [ for (var index = 0; index < rows.length; index++) ...[ if (index > 0) const Divider( height: AppDimens.mineGridDividerWidth, thickness: AppDimens.mineGridDividerWidth, color: AppColors.outlineVariantDark, ), _tile(context, rows[index]), ], ], ), ); } Widget _tile(BuildContext context, _LegalRow row) { return InkWell( key: row.key, onTap: () => _open(context, row.path), child: SizedBox( height: AppDimens.mineMoreRowHeight, child: Padding( padding: const EdgeInsets.symmetric(horizontal: AppDimens.spaceLg), child: Row( children: [ Expanded( child: Text( row.title, maxLines: 1, overflow: TextOverflow.ellipsis, style: const TextStyle( color: AppColors.textPrimary, fontSize: AppDimens.listTitle, ), ), ), const Icon( Icons.chevron_right_rounded, color: AppColors.textSecondary, size: AppDimens.accountIcon, ), ], ), ), ), ); } void _open(BuildContext context, String path) { final url = legalPageUrl(path, Localizations.localeOf(context)); final custom = open; if (custom != null) { unawaited(custom(url)); return; } unawaited(openLegalUrlOrNotify(context, url)); } } class _LegalRow { const _LegalRow({required this.key, required this.title, required this.path}); final Key key; final String title; final String path; }