From b57f043875618ce86d43746562f21d623efd9639 Mon Sep 17 00:00:00 2001 From: zhugy781 Date: Tue, 10 Feb 2026 15:33:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B5=8B=E8=AF=95=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 11 + img.png | Bin 0 -> 21635 bytes lib/example_page.dart | 695 ++++++++++++++++++++++++++++++++++++++++++ lib/web_tools.dart | 1 + 4 files changed, 707 insertions(+) create mode 100644 img.png create mode 100644 lib/example_page.dart diff --git a/README.md b/README.md index 6725bbd..1147276 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,17 @@ bridge.share( ); ``` +## 示例页面 + +包中包含了一个完整的示例页面 `WebToolsExamplePage`,展示了所有交互方法的使用示例,按功能模块分类组织。 + +### 使用示例页面 +```agsl + 在自己的web项目中 添加测试跳转连接 + Get.to(WebToolsExamplePage()); +``` +![img.png](img.png) + ## API 文档 diff --git a/img.png b/img.png new file mode 100644 index 0000000000000000000000000000000000000000..93bcf09e03d30cd70835502b1709989d36100370 GIT binary patch literal 21635 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 b)&6*yf11pvCIG& createState() => _WebToolsExamplePageState(); +} + +class _WebToolsExamplePageState extends State { + final FlutterBridge bridge = FlutterBridge.instance; + + // 控制器用于输入参数 + final TextEditingController gameIdController = TextEditingController() + ..text = '311'; + final TextEditingController userIdController = TextEditingController() + ..text = 'f894609cbab2440c8b2c5161049ec881'; + final TextEditingController googleProductIdController = + TextEditingController()..text = '70055'; + final TextEditingController iosProductIdController = TextEditingController(); + final TextEditingController pathController = TextEditingController(); + final TextEditingController titleController = TextEditingController(); + final TextEditingController gameCodeController = TextEditingController() + ..text = '310'; + final TextEditingController activityIdController = TextEditingController() + ..text = '83'; + final TextEditingController schemeController = TextEditingController(); + final TextEditingController linkUrlController = TextEditingController(); + + @override + void dispose() { + gameIdController.dispose(); + userIdController.dispose(); + googleProductIdController.dispose(); + iosProductIdController.dispose(); + pathController.dispose(); + titleController.dispose(); + gameCodeController.dispose(); + activityIdController.dispose(); + schemeController.dispose(); + linkUrlController.dispose(); + super.dispose(); + } + + Widget _buildMethodTile( + String title, String description, VoidCallback onPressed) { + return ListTile( + title: Text(title, style: const TextStyle(fontWeight: FontWeight.bold)), + subtitle: Text(description), + trailing: ElevatedButton( + onPressed: onPressed, + child: const Text('调用'), + ), + ); + } + + Widget _buildMethodWithInputTile( + String title, + String description, + TextEditingController controller, + String hint, + VoidCallback onPressed, + ) { + return ListTile( + title: Text(title, style: const TextStyle(fontWeight: FontWeight.bold)), + subtitle: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(description), + const SizedBox(height: 8), + TextField( + controller: controller, + decoration: InputDecoration( + hintText: hint, + border: const OutlineInputBorder(), + contentPadding: + const EdgeInsets.symmetric(horizontal: 12, vertical: 8), + ), + ), + ], + ), + trailing: ElevatedButton( + onPressed: onPressed, + child: const Text('调用'), + ), + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Web Tools 交互方法示例'), + backgroundColor: Theme.of(context).colorScheme.inversePrimary, + ), + body: ListView( + padding: const EdgeInsets.all(16), + children: [ + // 游戏相关模块 + ExpansionTile( + title: const Text('游戏相关方法'), + children: [ + _buildMethodTile( + '关闭页面', + '关闭当前网页', + () => bridge.close(), + ), + _buildMethodTile( + '关闭游戏页面', + '关闭游戏页面左上角返回', + () => bridge.sendToFlutter(ToFlutterAppEnum.gameExit.code, {}), + ), + _buildMethodTile( + '游戏结束', + '通知原生游戏已结束', + () => bridge.gameOver(), + ), + _buildMethodWithInputTile( + '创建游戏', + '创建指定ID的游戏', + gameIdController, + '输入游戏ID', + () { + if (gameIdController.text.isNotEmpty) { + bridge.createGame(gameIdController.text); + } else { + bridge.createGame("311"); + } + }, + ), + _buildMethodWithInputTile( + '想玩游戏', + '表达想玩指定游戏的意愿', + gameIdController, + '输入游戏ID', + () { + if (gameIdController.text.isNotEmpty) { + bridge.wantToPlay(gameIdController.text); + } + }, + ), + _buildMethodWithInputTile( + '跳转到游戏详情页', + '不同的值代表不同的游戏', + gameIdController, + 'gameType', + () { + if (gameIdController.text.isNotEmpty) { + bridge.sendToFlutter(ToFlutterAppEnum.gameType.code, + {"gameType": gameIdController.text}); + } + }, + ), + _buildMethodWithInputTile( + '检查游戏状态', + '检查指定游戏的状态', + gameCodeController, + '输入游戏代码', + () { + if (gameCodeController.text.isNotEmpty) { + bridge.checkGameState(gameCodeController.text); + } + }, + ), + ], + ), + + // 充值支付模块 + ExpansionTile( + title: const Text('充值支付方法'), + children: [ + _buildMethodTile( + '前往充值', + '跳转到充值页面', + () => bridge.toRecharge(), + ), + _buildMethodTile( + '前往红钻充值', + '跳转到红钻充值页面', + () => bridge.toRedDiamond(), + ), + _buildMethodTile( + '定向充值', + '直接唤起内购付费框', + () => bridge.sendToFlutter( + ToFlutterAppEnum.rechargeItem.code, {"productId": "70055"}), + ), + ListTile( + title: const Text('月卡支付', + style: TextStyle(fontWeight: FontWeight.bold)), + subtitle: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('跳转到月卡支付页面'), + const SizedBox(height: 8), + Row( + children: [ + Expanded( + child: TextField( + controller: googleProductIdController, + decoration: const InputDecoration( + hintText: 'Google产品ID', + border: OutlineInputBorder(), + contentPadding: EdgeInsets.symmetric( + horizontal: 12, vertical: 8), + ), + ), + ), + const SizedBox(width: 8), + Expanded( + child: TextField( + controller: iosProductIdController, + decoration: const InputDecoration( + hintText: 'iOS产品ID', + border: OutlineInputBorder(), + contentPadding: EdgeInsets.symmetric( + horizontal: 12, vertical: 8), + ), + ), + ), + ], + ), + const SizedBox(height: 8), + TextField( + controller: userIdController, + decoration: const InputDecoration( + hintText: '其他用户ID (可选)', + border: OutlineInputBorder(), + contentPadding: + EdgeInsets.symmetric(horizontal: 12, vertical: 8), + ), + ), + ], + ), + trailing: ElevatedButton( + onPressed: () { + if (googleProductIdController.text.isNotEmpty && + iosProductIdController.text.isNotEmpty) { + bridge.toMonthCardPay( + googleProductIdController.text, + iosProductIdController.text, + otherUserId: userIdController.text, + ); + } + }, + child: const Text('调用'), + ), + ), + ], + ), + + // 页面导航模块 + ExpansionTile( + title: const Text('页面导航方法'), + children: [ + ListTile( + title: const Text('跳转到H5页面', + style: TextStyle(fontWeight: FontWeight.bold)), + subtitle: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('在原生App中跳转到H5页面'), + const SizedBox(height: 8), + TextField( + controller: pathController, + decoration: const InputDecoration( + hintText: '页面路径', + border: OutlineInputBorder(), + contentPadding: + EdgeInsets.symmetric(horizontal: 12, vertical: 8), + ), + ), + const SizedBox(height: 8), + TextField( + controller: titleController, + decoration: const InputDecoration( + hintText: '页面标题', + border: OutlineInputBorder(), + contentPadding: + EdgeInsets.symmetric(horizontal: 12, vertical: 8), + ), + ), + ], + ), + trailing: ElevatedButton( + onPressed: () { + if (pathController.text.isNotEmpty && + titleController.text.isNotEmpty) { + bridge.jumpToH5( + pathController.text, titleController.text); + } + }, + child: const Text('调用'), + ), + ), + _buildMethodWithInputTile( + '前往用户主页', + '跳转到指定用户的主页', + userIdController, + '输入用户ID', + () { + if (userIdController.text.isNotEmpty) { + bridge.toHomepage(userIdController.text); + } + }, + ), + _buildMethodTile("恩爱节活动", "恩爱节活动跳转选择好友 1:cp 2:告白 3:组队", () { + bridge.sendToFlutter( + ToFlutterAppEnum.lovingDayChooseFriend.code, {}); + }), + ListTile( + title: const Text('跳转到网页', + style: TextStyle(fontWeight: FontWeight.bold)), + subtitle: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('在原生App中打开网页'), + const SizedBox(height: 8), + TextField( + controller: linkUrlController, + decoration: const InputDecoration( + hintText: '网页链接', + border: OutlineInputBorder(), + contentPadding: + EdgeInsets.symmetric(horizontal: 12, vertical: 8), + ), + ), + const SizedBox(height: 8), + TextField( + controller: activityIdController, + decoration: const InputDecoration( + hintText: '活动ID', + border: OutlineInputBorder(), + contentPadding: + EdgeInsets.symmetric(horizontal: 12, vertical: 8), + ), + ), + ], + ), + trailing: ElevatedButton( + onPressed: () { + if (linkUrlController.text.isNotEmpty && + activityIdController.text.isNotEmpty) { + bridge.taskToWebViewPage( + linkUrl: linkUrlController.text, + activityId: activityIdController.text, + ); + } + }, + child: const Text('调用'), + ), + ), + ListTile( + title: const Text('解析URL并跳转', + style: TextStyle(fontWeight: FontWeight.bold)), + subtitle: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('解析scheme URL并跳转'), + const SizedBox(height: 8), + TextField( + controller: schemeController, + decoration: const InputDecoration( + hintText: 'Scheme URL', + border: OutlineInputBorder(), + contentPadding: + EdgeInsets.symmetric(horizontal: 12, vertical: 8), + ), + ), + const SizedBox(height: 8), + TextField( + controller: activityIdController, + decoration: const InputDecoration( + hintText: '活动ID', + border: OutlineInputBorder(), + contentPadding: + EdgeInsets.symmetric(horizontal: 12, vertical: 8), + ), + ), + ], + ), + trailing: ElevatedButton( + onPressed: () { + if (schemeController.text.isNotEmpty && + activityIdController.text.isNotEmpty) { + bridge.taskCommandJump( + scheme: schemeController.text, + activityId: activityIdController.text, + ); + } + }, + child: const Text('调用'), + ), + ), + ], + ), + + // 分享功能模块 + ExpansionTile( + title: const Text('分享功能'), + children: [ + _buildMethodWithInputTile( + '分享(通用分享)', + '分享活动,需要活动ID', + activityIdController, + '输入活动ID', + () { + if (activityIdController.text.isNotEmpty) { + bridge.share( + activityId: activityIdController.text, + needShareReport: true, + ); + } + }, + ), + _buildMethodWithInputTile( + '分享(带卡片分享)', + '分享活动,需要活动ID', + activityIdController, + '输入活动ID', + () { + if (activityIdController.text.isNotEmpty) { + bridge.share( + activityId: activityIdController.text, + needShareReport: true, + shareCardModel: ShareCardModel( + activityIcon: + "app/img/local/new_year_share_content_bg_en_th.webp", + activityDesc: "这只是一个示例")); + } + }, + ), + ], + ), + + // 直播互动模块 + ExpansionTile( + title: const Text('直播互动方法'), + children: [ + _buildMethodTile( + '检查开播', + '检查是否可以开始直播', + () => bridge.checkStartBroadcaster(), + ), + _buildMethodTile( + '直播间发言任务', + '触发直播间发言任务', + () => bridge.taskLiveRoomChat(), + ), + _buildMethodTile( + '直播间送礼任务', + '触发直播间送礼任务', + () => bridge.taskLiveRoomGift(), + ), + _buildMethodTile( + '直播间其他任务', + '触发直播间其他任务', + () => bridge.taskLiveRoomOther(), + ), + ], + ), + + // 任务系统模块 + ExpansionTile( + title: const Text('任务系统方法'), + children: [ + _buildMethodTile( + '完善个人信息', + '跳转到完善个人信息页面', + () => bridge.shouldCompleteProfile(), + ), + _buildMethodTile( + '观看时长任务', + '触发观看时长任务', + () => bridge.shouldWatchDuration(), + ), + _buildMethodTile( + '发送公屏消息任务', + '触发发送公屏消息任务', + () => bridge.shouldSendPublicMessage(), + ), + _buildMethodTile( + '上麦互动任务', + '触发上麦互动任务', + () => bridge.shouldMicInteraction(), + ), + _buildMethodTile( + '发送私聊消息任务', + '触发发送私聊消息任务', + () => bridge.shouldSendPrivateMessage(), + ), + _buildMethodTile( + '发布动态任务', + '触发发布动态任务', + () => bridge.shouldPostFeed(), + ), + _buildMethodTile( + '分享房间任务', + '触发分享房间任务', + () => bridge.shouldShareRoom(), + ), + _buildMethodTile( + '佩戴装扮任务', + '触发佩戴装扮任务', + () => bridge.shouldWearDecoration(), + ), + _buildMethodTile( + '前往语音房任务', + '触发前往语音房任务', + () => bridge.shouldGoToVoiceRoom(), + ), + _buildMethodTile( + '观看直播', + '触发前往语音房任务有-》 收藏房间 | 关注主播 | 发送房间消息 ', + () => bridge.commonInteraction({ + "interactionType": WebInteractionType.taskKeyWatchLive.code, + // taskKeyCollectRoom | taskKeyFollowUser | taskKeySendRoomMessage + }), + ), + _buildMethodTile( + '赠送礼物', + '触发前往语音房任务 && (打开礼物面板 or 赠送指定礼物 or 打开我的背包) ', + () => bridge.commonInteraction({ + "interactionType": WebInteractionType.taskKeySendGift + .code, // taskKeySendGiftId | taskKeySendBackpackGift + ...{"targetId": ""} + }), + ), + _buildMethodTile( + '我想玩 XX游戏', + '触发前往语音房任务 && 发送我想玩 XX游戏', + () => bridge.commonInteraction({ + "interactionType": WebInteractionType + .taskKeyPlayGame.code, // taskKeySendGiftId + ...{"targetId": ""} + }), + ), + _buildMethodTile( + '发红包', + '触发前往语音房任务 && 发红包', + () => bridge.commonInteraction({ + "interactionType": "TaskKeySendRedPack", + }), + ), + _buildMethodTile( + '发送私聊消息', + '聊天 Tab ', + () => bridge.commonInteraction({ + "interactionType": WebInteractionType + .taskKeySendPrivateMessage.code, // taskKeySendGiftId + }), + ), + _buildMethodTile( + '参与动态话题', + '比传参数 topicTitle', + () => bridge.commonInteraction({ + "interactionType": + WebInteractionType.taskKeyTimelineTopic.code, + ...{ + "topicTitle": "", + "targetId": "", + "content": "", + "image": "", + "textId": "" + } + // taskKeySendGiftId + }), + ), + _buildMethodTile( + '点赞动态 or 评论动态', + '切换 圈子 Tab', + () => bridge.commonInteraction({ + "interactionType": WebInteractionType + .taskKeyLikeTimeline.code, // taskKeyReplayTimeline + }), + ), + _buildMethodTile( + '签到', + '首页签到弹框', + () => bridge.commonInteraction({ + "interactionType": WebInteractionType + .taskKeySignIn.code, // taskKeyReplayTimeline + + // taskKeySendGiftId + }), + ), + _buildMethodTile( + '其他页面', + '进入其他h5页面', + () => bridge.commonInteraction({ + "interactionType": WebInteractionType + .taskKeyOtherPage.code, // taskKeyReplayTimeline + + // taskKeySendGiftId + }), + ), + _buildMethodTile( + '我的钱包页面', + '我的钱包页面', + () => bridge.commonInteraction({ + "interactionType": WebInteractionType + .taskKeyMineWallet.code, // taskKeyReplayTimeline + + // taskKeySendGiftId + }), + ), + _buildMethodTile( + '我的背包', + '我的装扮背包页面(或者是称号)', + () => bridge.commonInteraction({ + "interactionType": WebInteractionType + .taskKeyMineBackpack.code, // taskKeyReplayTimeline + + // taskKeySendGiftId + }), + ), + ], + ), + + // 其他功能模块 + ExpansionTile( + title: const Text('其他功能方法'), + children: [ + _buildMethodTile( + '专属见面礼', + '触发专属见面礼任务', + () => bridge.taskInviteCodeGift(), + ), + _buildMethodTile( + '跳转从业者申请', + '跳转到从业者申请页面', + () => bridge.toApplyAdmissionPage(), + ), + _buildMethodTile( + '直播预约设置', + '打开直播预约设置', + () => bridge.shouLiveBookingPicker(), + ), + _buildMethodTile( + '观时礼刷新宝箱数据', + '观时礼刷新宝箱数据', + () => + bridge.sendToFlutter(ToFlutterAppEnum.closeObserving.code, { + "updateType": "1" // 1 刷新整个挂件数据,2刷新观时礼的宝箱列表数据 + }), + ), + _buildMethodTile( + '翻译', + '多语言翻译', + () => bridge.sendRequest( + sendType: ToFlutterAppEnum.translateRequest, + listenType: FromFlutterAppEnum.translateResult, + params: {"text0001": "text0001"}, + onSuccess: (dic) {}), + ), + ListTile( + title: const Text('通用交互', + style: TextStyle(fontWeight: FontWeight.bold)), + subtitle: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('通用交互方法,可以传递自定义参数'), + const SizedBox(height: 8), + Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + border: Border.all(color: Colors.grey), + borderRadius: BorderRadius.circular(8), + ), + child: const Text( + '示例参数:{"action": "custom_action", "data": "value"}', + style: TextStyle(fontSize: 12, color: Colors.grey), + ), + ), + ], + ), + trailing: ElevatedButton( + onPressed: () { + bridge.commonInteraction({ + "action": "custom_action", + "data": "example_value", + "timestamp": DateTime.now().toIso8601String(), + }); + }, + child: const Text('调用'), + ), + ), + ], + ), + ], + ), + ); + } +} diff --git a/lib/web_tools.dart b/lib/web_tools.dart index ad16aac..8fbc9e7 100644 --- a/lib/web_tools.dart +++ b/lib/web_tools.dart @@ -3,3 +3,4 @@ library; export 'package:web_tools/utils/app_bridge.dart'; export 'package:web_tools/utils/config.dart'; export 'package:web_tools/utils/model/model.dart'; +export 'package:web_tools/example_page.dart';