// core/utils/web_launch.dart — App→官网免登录跳转(一次性换票 SSO)。 // 先向后端签一张 60s 单次票据,再打开 官网/sso?t=<票>&redirect=<路径>, // 落地页兑票写入登录态后跳目标页——桌面/移动同一套(launchUrl 跨端)。 // 签票失败(未登录/网络异常)时降级为直接打开目标链接(未登录态浏览)。 import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:url_launcher/url_launcher.dart'; import '../api/api_client.dart'; import '../config/app_config.dart'; /// 打开官网 [path](如 `/#pricing`、`/profile/`)并自动登录。 Future launchAuthedWebPath(WidgetRef ref, String path) async { final base = AppConfig.publicBaseUrl; Uri target = Uri.parse('$base$path'); try { final resp = await ref.read(apiClientProvider).post('/auth/web-ticket'); final ticket = resp.data?['data']?['ticket'] as String?; if (ticket != null && ticket.isNotEmpty) { target = Uri.parse( '$base/sso/?t=$ticket&redirect=${Uri.encodeComponent(path)}'); } } catch (_) { // 签票失败降级:未登录态直开目标页 } await launchUrl(target, mode: LaunchMode.externalApplication); }