瀏覽代碼

修复bug:

1.	《红包:领取他人或者是被他人领取,红包应该有个提示》
2.《过期红包:消息提示红包过期,点进去没有任何消息记录,缺少红包过期记录或图标》
3.《照片:新包动态上次图片咋变得模糊不清了》
4.《连麦:名字太长导致XX邀请你接听电话没显示了》
去掉未认证女性和好友的聊天限制
替换日、韩、英翻译
界面微调
master
ZCM 5 年之前
父節點
當前提交
4d66e018dd
共有 15 個檔案被更改,包括 922 行新增836 行删除
  1. +68
    -68
      i18n/en-US.json
  2. +67
    -67
      i18n/ja-JP.json
  3. +68
    -68
      i18n/ko-KR.json
  4. +1
    -1
      lib/chat/group_chat_item.dart
  5. +406
    -406
      lib/generated/i18n.dart
  6. +9
    -4
      lib/home/audio_chat_view.dart
  7. +6
    -0
      lib/home/friend_page.dart
  8. +1
    -1
      lib/home/global_search.dart
  9. +3
    -1
      lib/home/group_all_member.dart
  10. +2
    -1
      lib/home/group_setting.dart
  11. +0
    -1
      lib/home/homeMain.dart
  12. +84
    -71
      lib/utils/CustomUI.dart
  13. +1
    -1
      lib/utils/HttpUtil.dart
  14. +205
    -145
      lib/utils/image_util.dart
  15. +1
    -1
      lib/utils/msgHandler.dart

+ 68
- 68
i18n/en-US.json 查看文件

@@ -1152,74 +1152,74 @@
"you_get": " you got rewards from others", "you_get": " you got rewards from others",
"enter_num_qian": " number of exchanges (unit K) ", "enter_num_qian": " number of exchanges (unit K) ",
"enter_num_qian1": " number of withdrawals (unit K) ", "enter_num_qian1": " number of withdrawals (unit K) ",
"daily_translate_voucher": "翻译券",
"msg_notice": "通知消息",
"select_notice_people": "选择提醒的人",
"search_phone": "查找手机号",
"not_have_user": "用户不存在",
"not_add_Myself": "你不能添加自己",
"you_are_blaklisted": "对方已拉黑了你",
"confrim_recovery": "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)",
"send_to": "發送到",
"search_plach": "搜索位置",
"finding_place": "查找位置",
"real_time_helper": "实时帮",
"translation_butler": "翻译管家",
"travel_butler": "出行管家",
"translation_butler_tips": "您的实时贴身翻译,随时随地帮您解决语言不通",
"choose_language": "请选择要翻译的语言",
"translation_butler_rules": "呼叫管家需要预付H币,管家服务时长为5分钟",
"translation_butler_scenes": "您当所在场景",
"translation_butler_scenes_tips": "根据大数据显示,选择了场景并描述问题的用户得到了更有效的帮助哦!",
"translation_butler_call": "呼叫管家",
"travel_my_location": "我的位置",
"travel_go_where": "你要去哪儿",
"travel_tips": "当前定位非实时监测,每次需点击“距离查询”按钮查询",
"travel_check_distance": "距离查询",
"travel_check_distance_result": "根据定位查询,您的当前距离目标地点相距:",
"translation_butler_tips2": "当前排队人数过多,感谢您的耐心等待",
"translation_butler_tips3": "正在为您呼叫管家",
"translation_butler_wait_people": "等待人数",
"translation_butler_wait_people_unit": "",
"translation_butler_wait_time": "预计还需等待",
"translation_butler_already_wait": "已等待",
"translation_butler_cancel": "取消呼叫",
"translation_butler_wait_service": "等待服务",
"translation_butler_dialog_title": "实时帮-翻译管家",
"translation_butler_dialog_order": "/s1通过系统下单",
"translation_butler_dialog_start_service": "开始服务",
"translation_butler_dialog_start_chat": "开始聊天",
"translation_butler_coin_time": "/s1H币//s2分钟",
"translation_butler_end_service": "结束服务",
"translation_butler_start_service": "服务开始",
"translation_butler_service_end": "服务结束",
"translation_butler_evaluation": "评价",
"translation_butler_start_tips": "翻译服务已开始,愿本次服务体验愉快",
"translation_butler_evaluation_tips": "翻译服务已结束,体验愉快就给个评价吧",
"translation_butler_dialog_tips": "你对本次服务满意吗?",
"translation_butler_dialog_yes": "满意",
"translation_butler_dialog_no": "不满意",
"translation_butler_dialog_submit": "提交评价",
"translation_pos_1": "服务耐心",
"translation_pos_2": "快速准时",
"translation_pos_3": "礼貌热情",
"translation_pos_4": "沟通顺畅",
"translation_pos_5": "大神翻译",
"translation_neg1": "骚扰威胁",
"translation_neg2": "沟通障碍",
"translation_neg3": "响应缓慢",
"translation_neg4": "态度不好",
"translation_neg5": "翻译不行",
"translation_scenes_1": "机场/车站",
"translation_scenes_2": "餐厅/酒店",
"translation_scenes_3": "KTV/酒吧",
"translation_scenes_4": "其他",
"file": "文件",
"max_file": "文件大于/s1M",
"translation_input_limit": "还可以输入/s1字",
"translation_more_desc": "更多描述",
"feedback_assistant": "反馈小助手",
"feedback_tips":"有什么问题都可以反馈给我哦",
"daily_translate_voucher": "Translation voucher",
"msg_notice": "Notice message",
"select_notice_people": "Select notice people",
"search_phone": "Search phone number",
"not_have_user": "User does not exist",
"not_add_Myself": "You can’t add yourself",
"you_are_blaklisted": "You are blacklisted",
"confrim_recovery": "Recover the destroyed photos?\n(Users who have been viewed can be viewed once again)",
"send_to": "Send to",
"search_plach": "Search location",
"finding_place": "Find location",
"real_time_helper": "Real-time helper",
"translation_butler": "Translation assistant",
"travel_butler": "Travel assistant",
"translation_butler_tips": "Your real-time personal translator, it can help you solve the language barrier anytime and anywhere",
"choose_language": "Please select the language to be translated",
"translation_butler_rules": "Before calling the translation assistant, you need to pay H coin, and the service time of it is 5 minutes",
"translation_butler_scenes": "Scene where you are located",
"translation_butler_scenes_tips": "According to the big data, users who select scenes and describe problems can get more effective help!",
"translation_butler_call": "Call the assistant",
"travel_my_location": "My location",
"travel_go_where": "Place you want to go",
"travel_tips": "The current location is not monitored in real time. You need to click the \"distance query\" button to query it each time",
"travel_check_distance": "Distance query",
"travel_check_distance_result": "According to the positioning, your current distance from the target location queried is:",
"translation_butler_tips2": "There are too many people in the queue, thank you for your patience",
"translation_butler_tips3": "Calling the assistant for you",
"translation_butler_wait_people": "Waiting number",
"translation_butler_wait_people_unit": "Person(s)",
"translation_butler_wait_time": "Time expected to wait",
"translation_butler_already_wait": "Waiting time already",
"translation_butler_cancel": "Cancel call ",
"translation_butler_wait_service": "Waiting for service",
"translation_butler_dialog_title": "Real time helper-translation assistant",
"translation_butler_dialog_order": "/s1 Place an order through the system",
"translation_butler_dialog_start_service": "Service begins",
"translation_butler_dialog_start_chat": "Chat begins",
"translation_butler_coin_time": "/s1H coin//s2 min",
"translation_butler_end_service": "Service ended",
"translation_butler_start_service": "Service begins",
"translation_butler_service_end": "Service ended",
"translation_butler_evaluation": "Evaluation",
"translation_butler_start_tips": "Translation service has begun,I hope you a pleasant experience of service",
"translation_butler_evaluation_tips": "Translation service is over, please give an evaluation after your pleasant experience",
"translation_butler_dialog_tips": "Are you satisfied with this service?",
"translation_butler_dialog_yes": "Satisfied",
"translation_butler_dialog_no": "Dissatisfied",
"translation_butler_dialog_submit": "Submit evaluation",
"translation_pos_1": "Patient services",
"translation_pos_2": "Fast and punctual",
"translation_pos_3": "Politeness and enthusiasm",
"translation_pos_4": "Smooth communication",
"translation_pos_5": "Brilliant translation",
"translation_neg1": "Harassment and threat",
"translation_neg2": "Communication barriers",
"translation_neg3": "Slow response",
"translation_neg4": "Bad attitude ",
"translation_neg5": "Poor translation",
"translation_scenes_1": "Airports / stations",
"translation_scenes_2": "Restaurants / hotels",
"translation_scenes_3": "KTV / bars",
"translation_scenes_4": "Others",
"file": "Files",
"max_file": "File larger than /s1M",
"translation_input_limit": "/s1 words can also be input",
"translation_more_desc": "More descriptions",
"feedback_assistant": "Feedback helper",
"feedback_tips":"You can give me feedback in case of any questions",
"man_retranslate":"人工重译", "man_retranslate":"人工重译",
"robot_retranslate":"机器重译", "robot_retranslate":"机器重译",
"see_original":"查看原文" "see_original":"查看原文"

+ 67
- 67
i18n/ja-JP.json 查看文件

@@ -1152,74 +1152,74 @@
"you_get": "相手からプレゼントを貰った", "you_get": "相手からプレゼントを貰った",
"enter_num_qian": "交換数量(单位K)", "enter_num_qian": "交換数量(单位K)",
"enter_num_qian1": "引き出し数量(单位K)", "enter_num_qian1": "引き出し数量(单位K)",
"daily_translate_voucher": "翻券",
"msg_notice": "通知消息",
"select_notice_people": "选择提醒的人",
"search_phone": "查找手机号",
"not_have_user": "用户不存在",
"not_add_Myself": "你不能添加自己",
"you_are_blaklisted": "对方已拉黑了你",
"confrim_recovery": "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)",
"send_to": "發送到",
"search_plach": "搜索位置",
"finding_place": "查找位置",
"real_time_helper": "实时帮",
"translation_butler": "翻译管家",
"travel_butler": "出行管家",
"translation_butler_tips": "您的实时贴身翻译,随时随地帮您解决语言不通",
"choose_language": "请选择要翻译的语言",
"translation_butler_rules": "呼叫管家需要预付H币,管家服务时长为5分钟",
"translation_butler_scenes": "您当所在场景",
"translation_butler_scenes_tips": "根据大数据显示,选择了场景并描述问题的用户得到了更有效的帮助哦!",
"translation_butler_call": "呼叫管家",
"travel_my_location": "我的位置",
"travel_go_where": "你要去哪儿",
"travel_tips": "当前定位非实时监测,每次需点击“距离查询”按钮查询",
"travel_check_distance": "距离查询",
"travel_check_distance_result": "根据定位查询,您的当前距离目标地点相距:",
"translation_butler_tips2": "当前排队人数过多,感谢您的耐心等待",
"translation_butler_tips3": "正在为您呼叫管家",
"translation_butler_wait_people": "待人数",
"daily_translate_voucher": "翻券",
"msg_notice": "通知メッセージ",
"select_notice_people": "注意する人を選択",
"search_phone": "携帯番号を検索",
"not_have_user": "ユーザーは存在しない",
"not_add_Myself": "自分を追加することはできない",
"you_are_blaklisted": "相手は既にあなたをプロックしました",
"confrim_recovery": "焼却した写真を立直しますか?(すでに見たユーザーはもう一度見ることができます)",
"send_to": "発送",
"search_plach": "位置検索",
"finding_place": "位置を検索",
"real_time_helper": "リアルタイムヘルプ",
"translation_butler": "翻訳バトラー",
"travel_butler": "トラベルバトラー",
"translation_butler_tips": "あなたのリアルタイムの個人通訳は、いつでもどこでも言語の不通を解決してくれます",
"choose_language": "翻訳する言語を選んでください",
"translation_butler_rules": "バトラーを呼ぶにはH幤が必要です、バトラーサービスは5分かかります。",
"translation_butler_scenes": "あなたがいるシーン",
"translation_butler_scenes_tips": "ビッグデータによると、シーンを選択して問題を説明するユーザーはより効果的に助けられました!",
"translation_butler_call": "バトラーを呼びます",
"travel_my_location": "私の位置",
"travel_go_where": "どこへ行きますか",
"travel_tips": "現在の位置付けは非リアルタイム監視で、毎回「距離照会」ボタンをクリックして照会します",
"travel_check_distance": "距離の照会",
"travel_check_distance_result": "ポジショニングクエリによると、ターゲット位置からの現在の距離:",
"translation_butler_tips2": "今は並んでいる人が多すぎます。待ってくれてありがとうございます",
"translation_butler_tips3": "バトラーを呼びます",
"translation_butler_wait_people": "待人数",
"translation_butler_wait_people_unit": "位", "translation_butler_wait_people_unit": "位",
"translation_butler_wait_time": "预计还需等待",
"translation_butler_already_wait": "已等待",
"translation_butler_cancel": "取消呼叫",
"translation_butler_wait_service": "等待服务",
"translation_butler_dialog_title": "实时帮-翻译管家",
"translation_butler_dialog_order": "/s1通过系统下单",
"translation_butler_dialog_start_service": "开始服务",
"translation_butler_dialog_start_chat": "开始聊天",
"translation_butler_coin_time": "/s1H币//s2分钟",
"translation_butler_end_service": "结束服务",
"translation_butler_start_service": "服务开始",
"translation_butler_service_end": "服务结束",
"translation_butler_evaluation": "评价",
"translation_butler_start_tips": "翻译服务已开始,愿本次服务体验愉快",
"translation_butler_evaluation_tips": "翻译服务已结束,体验愉快就给个评价吧",
"translation_butler_dialog_tips": "你对本次服务满意吗?",
"translation_butler_dialog_yes": "满意",
"translation_butler_dialog_no": "不满意",
"translation_butler_dialog_submit": "提交评价",
"translation_pos_1": "服务耐心",
"translation_pos_2": "快速准时",
"translation_pos_3": "礼貌热情",
"translation_pos_4": "沟通顺畅",
"translation_pos_5": "大神翻译",
"translation_neg1": "骚扰威胁",
"translation_neg2": "沟通障碍",
"translation_neg3": "响应缓慢",
"translation_neg4": "态度不好",
"translation_neg5": "翻译不行",
"translation_scenes_1": "机场/车站",
"translation_scenes_2": "餐厅/酒店",
"translation_scenes_3": "KTV/酒吧",
"translation_scenes_4": "他",
"file": "文件",
"max_file": "文件大于/s1M",
"translation_input_limit": "还可以输入/s1字",
"translation_more_desc": "更多描述",
"feedback_assistant": "反馈小助手",
"feedback_tips":"有什么问题都可以反馈给我哦",
"translation_butler_wait_time": "待つ予定",
"translation_butler_already_wait": "待っています",
"translation_butler_cancel": "呼び出しをキャンセル",
"translation_butler_wait_service": "サービスを待つ",
"translation_butler_dialog_title": "リアルタイムヘルプ-翻訳バトラー",
"translation_butler_dialog_order": "/s1システムで注文する",
"translation_butler_dialog_start_service": "サービスを開始する",
"translation_butler_dialog_start_chat": "チャットを始める",
"translation_butler_coin_time": "/s1H幤//s2分",
"translation_butler_end_service": "サービスを終了する",
"translation_butler_start_service": "サービス開始",
"translation_butler_service_end": "サービス終了",
"translation_butler_evaluation": "評価",
"translation_butler_start_tips": "通訳サービスが始まりました。今回のサービス体験が楽しいように",
"translation_butler_evaluation_tips": "翻訳サービスは終了しました、評価してください",
"translation_butler_dialog_tips": "今回のサービスに満足していますか?",
"translation_butler_dialog_yes": "満足",
"translation_butler_dialog_no": "不満足",
"translation_butler_dialog_submit": "評価を出す",
"translation_pos_1": "辛抱強い",
"translation_pos_2": "クイックタイム",
"translation_pos_3": "礼儀正しくて親切である",
"translation_pos_4": "コミュニケーションが円滑である",
"translation_pos_5": "素晴らしい翻訳",
"translation_neg1": "嫌がらせ・脅かす",
"translation_neg2": "コミュニケーション障害",
"translation_neg3": "応答が遅い",
"translation_neg4": "態度が悪い",
"translation_neg5": "翻訳はだめです",
"translation_scenes_1": "空港/駅",
"translation_scenes_2": "レストラン/ホテル",
"translation_scenes_3": "KTV/バー",
"translation_scenes_4": "その他",
"file": "ファイル",
"max_file": "ファイル容量が/s1Mより大きい",
"translation_input_limit": " /s1と入力することができます",
"translation_more_desc": "詳細説明",
"feedback_assistant": "フィードバックアシスタント",
"feedback_tips":"どんな問題があってもフィードバックしてください",
"man_retranslate":"人工重译", "man_retranslate":"人工重译",
"robot_retranslate":"机器重译", "robot_retranslate":"机器重译",
"see_original":"查看原文" "see_original":"查看原文"

+ 68
- 68
i18n/ko-KR.json 查看文件

@@ -1152,74 +1152,74 @@
"you_get": "상대방이 당신에게 상을 주었다.", "you_get": "상대방이 당신에게 상을 주었다.",
"enter_num_qian": "환전 금액(단위 K)", "enter_num_qian": "환전 금액(단위 K)",
"enter_num_qian1": "인출 금액(단위K)", "enter_num_qian1": "인출 금액(단위K)",
"daily_translate_voucher": "翻译券",
"msg_notice": "通知消息",
"select_notice_people": "选择提醒的人",
"search_phone": "查找手机号",
"not_have_user": "用户不存在",
"not_add_Myself": "你不能添加自己",
"you_are_blaklisted": "对方已拉黑了你",
"confrim_recovery": "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)",
"send_to": "發送到",
"search_plach": "搜索位置",
"finding_place": "查找位置",
"real_time_helper": "实时帮",
"translation_butler": "翻译管家",
"travel_butler": "出行管家",
"translation_butler_tips": "您的实时贴身翻译,随时随地帮您解决语言不通",
"choose_language": "请选择要翻译的语言",
"translation_butler_rules": "呼叫管家需要预付H币,管家服务时长为5分钟",
"translation_butler_scenes": "您当所在场景",
"translation_butler_scenes_tips": "根据大数据显示,选择了场景并描述问题的用户得到了更有效的帮助哦!",
"translation_butler_call": "呼叫管家",
"travel_my_location": "我的位置",
"travel_go_where": "你要去哪儿",
"travel_tips": "当前定位非实时监测,每次需点击“距离查询”按钮查询",
"travel_check_distance": "距离查询",
"travel_check_distance_result": "根据定位查询,您的当前距离目标地点相距:",
"translation_butler_tips2": "当前排队人数过多,感谢您的耐心等待",
"translation_butler_tips3": "正在为您呼叫管家",
"translation_butler_wait_people": "等待人数",
"translation_butler_wait_people_unit": "",
"translation_butler_wait_time": "预计还需等待",
"translation_butler_already_wait": "已等待",
"translation_butler_cancel": "取消呼叫",
"translation_butler_wait_service": "等待服务",
"translation_butler_dialog_title": "实时帮-翻译管家",
"translation_butler_dialog_order": "/s1通过系统下单",
"translation_butler_dialog_start_service": "开始服务",
"translation_butler_dialog_start_chat": "开始聊天",
"translation_butler_coin_time": "/s1H币//s2分钟",
"translation_butler_end_service": "结束服务",
"translation_butler_start_service": "服务开始",
"translation_butler_service_end": "服务结束",
"translation_butler_evaluation": "评价",
"translation_butler_start_tips": "翻译服务已开始,愿本次服务体验愉快",
"translation_butler_evaluation_tips": "翻译服务已结束,体验愉快就给个评价吧",
"translation_butler_dialog_tips": "你对本次服务满意吗?",
"translation_butler_dialog_yes": "满意",
"translation_butler_dialog_no": "不满意",
"translation_butler_dialog_submit": "提交评价",
"translation_pos_1": "服务耐心",
"translation_pos_2": "快速准时",
"translation_pos_3": "礼貌热情",
"translation_pos_4": "沟通顺畅",
"translation_pos_5": "大神翻译",
"translation_neg1": "骚扰威胁",
"translation_neg2": "沟通障碍",
"translation_neg3": "响应缓慢",
"translation_neg4": "态度不好",
"translation_neg5": "翻译不行",
"translation_scenes_1": "机场/车站",
"translation_scenes_2": "餐厅/酒店",
"translation_scenes_3": "KTV/酒吧",
"translation_scenes_4": "其他",
"file": "文件",
"max_file": "文件大于/s1M",
"translation_input_limit": "还可以输入/s1字",
"translation_more_desc": "更多描述",
"feedback_assistant": "反馈小助手",
"feedback_tips": "有什么问题都可以反馈给我哦",
"daily_translate_voucher": " 번역권",
"msg_notice": " 소식 알람 ",
"select_notice_people": "멘션 선택",
"search_phone": "휴대폰 번호 찾기",
"not_have_user": "사용자가 존재하지 않음",
"not_add_Myself": "당신은 자신을 추가할 수 없다",
"you_are_blaklisted": "상대가 널 블랙리스트에 추가했습니다.",
"confrim_recovery": "불에 탄 사진을 복구하시겠습니까?\n(이미 본 사용자는 다시 볼 수 있습니다)",
"send_to": "보내다",
"search_plach": "위치 검색",
"finding_place": "위치 찾기",
"real_time_helper": "실시 도움",
"translation_butler": "번역 집사",
"travel_butler": "출행 집사",
"translation_butler_tips": " 당신의 실시간 밀착 통역으로 언제 어디서나 말이 통하지 않는 것을 해결해 드립니다.",
"choose_language": "번역할 언어를 선택하세요.",
"translation_butler_rules": " 호출집사는 H화를 선불로 내야 하며, 집사 서비스는 5분으로 길다.",
"translation_butler_scenes": " 당신이 있는 곳의 정경 ",
"translation_butler_scenes_tips": " 빅 데이터에 따르면 장면을 선택하고 문제를 묘사한 사용자가 더욱 효과적으로 도움을 받고 있습니다!",
"translation_butler_call": "집사를 호출",
"travel_my_location": "내 위치",
"travel_go_where": "당신이 어디 가세요?",
"travel_tips": "현재 포지셔닝 비실시간 모니터링의 경우 매번 \"거리 조회\" 버튼을 클릭하여 조회해야 합니다.",
"travel_check_distance": "거리 조회",
"travel_check_distance_result": " 위치 조회에 따르면, 당신의 현재 거리가 목표 지점에서 서로 떨어져 있습니다:",
"translation_butler_tips2": "현재 줄 서는 사람이 너무 많으니, 기다려 주셔서 감사합니다.",
"translation_butler_tips3": "집사님을 호출하고 있습니다.",
"translation_butler_wait_people": "대기자 수",
"translation_butler_wait_people_unit": "",
"translation_butler_wait_time": " 아직 기다려야 할 것으로 예상",
"translation_butler_already_wait": "이미 기다리다.",
"translation_butler_cancel": "호출 취소",
"translation_butler_wait_service": "대기 서비스",
"translation_butler_dialog_title": " 실시 도움-번역 집사 ",
"translation_butler_dialog_order": "/s1 시스템을 통한 주문했다.",
"translation_butler_dialog_start_service": "서비스 시작",
"translation_butler_dialog_start_chat": "채팅 시작",
"translation_butler_coin_time": "/s1H화폐//s2분",
"translation_butler_end_service": "서비스 끝",
"translation_butler_start_service": "서비스 시작",
"translation_butler_service_end": "서비스 끝",
"translation_butler_evaluation": "평가",
"translation_butler_start_tips": "번역 서비스가 이미 시작되었으니, 이번 서비스는 즐거운 체험이 되기를 바랍니다.",
"translation_butler_evaluation_tips": "통역 서비스가 끝났으니 즐거운 체험을 하시면 평가해 주십시오.",
"translation_butler_dialog_tips": "이번 서비스에 만족하십니까?",
"translation_butler_dialog_yes": "마음에 들다.",
"translation_butler_dialog_no": " 만족스럽지 못하다.",
"translation_butler_dialog_submit": "평가를 제출하다.",
"translation_pos_1": "친절하게 서비스했다.",
"translation_pos_2": " 신속하다.",
"translation_pos_3": " 예의와 열정하다.",
"translation_pos_4": "얘기 편하다.",
"translation_pos_5": "틀이 없이 번역하다.",
"translation_neg1": "스토킹 위협",
"translation_neg2": "얘기 장애",
"translation_neg3": "반응이 느리다.",
"translation_neg4": "태도 안 좋다.",
"translation_neg5": "번역 안되다.",
"translation_scenes_1": "공항/정류장",
"translation_scenes_2": "식당/호텔",
"translation_scenes_3": "KTV/술집",
"translation_scenes_4": "기타",
"file": "서류",
"max_file": "파일 크기 /s1M",
"translation_input_limit": "/s1자도 입력할 수 있다.",
"translation_more_desc": "더 많은 묘사",
"feedback_assistant": " 피드백 팁",
"feedback_tips":"어떤 문제라도 피드백해 주세요.",
"man_retranslate":"人工重译", "man_retranslate":"人工重译",
"robot_retranslate":"机器重译", "robot_retranslate":"机器重译",
"see_original":"查看原文" "see_original":"查看原文"

+ 1
- 1
lib/chat/group_chat_item.dart 查看文件

@@ -1305,7 +1305,7 @@ class _GroupChatPageItemState extends State<GroupChatPageItem>
AppNavigator.pushProfileInfoPage(context, memberModel.memberId, AppNavigator.pushProfileInfoPage(context, memberModel.memberId,
fromWhere: 2, fromWhere: 2,
addMode: addMode:
FriendListMgr().isMyFriend(memberModel.memberId) ? 1 : 0);
!FriendListMgr().isMyFriend(memberModel.memberId) ? 1 : 0);
}, },
onLongPress: () { onLongPress: () {
print('long press user'); print('long press user');


+ 406
- 406
lib/generated/i18n.dart 查看文件

@@ -2339,142 +2339,142 @@ class I18n implements WidgetsLocalizations {
String get enter_num_qian => " number of exchanges (unit K) "; String get enter_num_qian => " number of exchanges (unit K) ";
/// " number of withdrawals (unit K) " /// " number of withdrawals (unit K) "
String get enter_num_qian1 => " number of withdrawals (unit K) "; String get enter_num_qian1 => " number of withdrawals (unit K) ";
/// "翻译券"
String get daily_translate_voucher => "翻译券";
/// "通知消息"
String get msg_notice => "通知消息";
/// "选择提醒的人"
String get select_notice_people => "选择提醒的人";
/// "查找手机号"
String get search_phone => "查找手机号";
/// "用户不存在"
String get not_have_user => "用户不存在";
/// "你不能添加自己"
String get not_add_Myself => "你不能添加自己";
/// "对方已拉黑了你"
String get you_are_blaklisted => "对方已拉黑了你";
/// "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)"
String get confrim_recovery => "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)";
/// "發送到"
String get send_to => "發送到";
/// "搜索位置"
String get search_plach => "搜索位置";
/// "查找位置"
String get finding_place => "查找位置";
/// "实时帮"
String get real_time_helper => "实时帮";
/// "翻译管家"
String get translation_butler => "翻译管家";
/// "出行管家"
String get travel_butler => "出行管家";
/// "您的实时贴身翻译,随时随地帮您解决语言不通"
String get translation_butler_tips => "您的实时贴身翻译,随时随地帮您解决语言不通";
/// "请选择要翻译的语言"
String get choose_language => "请选择要翻译的语言";
/// "呼叫管家需要预付H币,管家服务时长为5分钟"
String get translation_butler_rules => "呼叫管家需要预付H币,管家服务时长为5分钟";
/// "您当所在场景"
String get translation_butler_scenes => "您当所在场景";
/// "根据大数据显示,选择了场景并描述问题的用户得到了更有效的帮助哦!"
String get translation_butler_scenes_tips => "根据大数据显示,选择了场景并描述问题的用户得到了更有效的帮助哦!";
/// "呼叫管家"
String get translation_butler_call => "呼叫管家";
/// "我的位置"
String get travel_my_location => "我的位置";
/// "你要去哪儿"
String get travel_go_where => "你要去哪儿";
/// "当前定位非实时监测,每次需点击“距离查询”按钮查询"
String get travel_tips => "当前定位非实时监测,每次需点击“距离查询”按钮查询";
/// "距离查询"
String get travel_check_distance => "距离查询";
/// "根据定位查询,您的当前距离目标地点相距:"
String get travel_check_distance_result => "根据定位查询,您的当前距离目标地点相距:";
/// "当前排队人数过多,感谢您的耐心等待"
String get translation_butler_tips2 => "当前排队人数过多,感谢您的耐心等待";
/// "正在为您呼叫管家"
String get translation_butler_tips3 => "正在为您呼叫管家";
/// "等待人数"
String get translation_butler_wait_people => "等待人数";
/// ""
String get translation_butler_wait_people_unit => "";
/// "预计还需等待"
String get translation_butler_wait_time => "预计还需等待";
/// "已等待"
String get translation_butler_already_wait => "已等待";
/// "取消呼叫"
String get translation_butler_cancel => "取消呼叫";
/// "等待服务"
String get translation_butler_wait_service => "等待服务";
/// "实时帮-翻译管家"
String get translation_butler_dialog_title => "实时帮-翻译管家";
/// "/s1通过系统下单"
String get translation_butler_dialog_order => "/s1通过系统下单";
/// "开始服务"
String get translation_butler_dialog_start_service => "开始服务";
/// "开始聊天"
String get translation_butler_dialog_start_chat => "开始聊天";
/// "/s1H币//s2分钟"
String get translation_butler_coin_time => "/s1H币//s2分钟";
/// "结束服务"
String get translation_butler_end_service => "结束服务";
/// "服务开始"
String get translation_butler_start_service => "服务开始";
/// "服务结束"
String get translation_butler_service_end => "服务结束";
/// "评价"
String get translation_butler_evaluation => "评价";
/// "翻译服务已开始,愿本次服务体验愉快"
String get translation_butler_start_tips => "翻译服务已开始,愿本次服务体验愉快";
/// "翻译服务已结束,体验愉快就给个评价吧"
String get translation_butler_evaluation_tips => "翻译服务已结束,体验愉快就给个评价吧";
/// "你对本次服务满意吗?"
String get translation_butler_dialog_tips => "你对本次服务满意吗?";
/// "满意"
String get translation_butler_dialog_yes => "满意";
/// "不满意"
String get translation_butler_dialog_no => "不满意";
/// "提交评价"
String get translation_butler_dialog_submit => "提交评价";
/// "服务耐心"
String get translation_pos_1 => "服务耐心";
/// "快速准时"
String get translation_pos_2 => "快速准时";
/// "礼貌热情"
String get translation_pos_3 => "礼貌热情";
/// "沟通顺畅"
String get translation_pos_4 => "沟通顺畅";
/// "大神翻译"
String get translation_pos_5 => "大神翻译";
/// "骚扰威胁"
String get translation_neg1 => "骚扰威胁";
/// "沟通障碍"
String get translation_neg2 => "沟通障碍";
/// "响应缓慢"
String get translation_neg3 => "响应缓慢";
/// "态度不好"
String get translation_neg4 => "态度不好";
/// "翻译不行"
String get translation_neg5 => "翻译不行";
/// "机场/车站"
String get translation_scenes_1 => "机场/车站";
/// "餐厅/酒店"
String get translation_scenes_2 => "餐厅/酒店";
/// "KTV/酒吧"
String get translation_scenes_3 => "KTV/酒吧";
/// "其他"
String get translation_scenes_4 => "其他";
/// "文件"
String get file => "文件";
/// "文件大于/s1M"
String get max_file => "文件大于/s1M";
/// "还可以输入/s1字"
String get translation_input_limit => "还可以输入/s1字";
/// "更多描述"
String get translation_more_desc => "更多描述";
/// "反馈小助手"
String get feedback_assistant => "反馈小助手";
/// "有什么问题都可以反馈给我哦"
String get feedback_tips => "有什么问题都可以反馈给我哦";
/// "Translation voucher"
String get daily_translate_voucher => "Translation voucher";
/// "Notice message"
String get msg_notice => "Notice message";
/// "Select notice people"
String get select_notice_people => "Select notice people";
/// "Search phone number"
String get search_phone => "Search phone number";
/// "User does not exist"
String get not_have_user => "User does not exist";
/// "You can’t add yourself"
String get not_add_Myself => "You can’t add yourself";
/// "You are blacklisted"
String get you_are_blaklisted => "You are blacklisted";
/// "Recover the destroyed photos?\n(Users who have been viewed can be viewed once again)"
String get confrim_recovery => "Recover the destroyed photos?\n(Users who have been viewed can be viewed once again)";
/// "Send to"
String get send_to => "Send to";
/// "Search location"
String get search_plach => "Search location";
/// "Find location"
String get finding_place => "Find location";
/// "Real-time helper"
String get real_time_helper => "Real-time helper";
/// "Translation assistant"
String get translation_butler => "Translation assistant";
/// "Travel assistant"
String get travel_butler => "Travel assistant";
/// "Your real-time personal translator, it can help you solve the language barrier anytime and anywhere"
String get translation_butler_tips => "Your real-time personal translator, it can help you solve the language barrier anytime and anywhere";
/// "Please select the language to be translated"
String get choose_language => "Please select the language to be translated";
/// "Before calling the translation assistant, you need to pay H coin, and the service time of it is 5 minutes"
String get translation_butler_rules => "Before calling the translation assistant, you need to pay H coin, and the service time of it is 5 minutes";
/// "Scene where you are located"
String get translation_butler_scenes => "Scene where you are located";
/// "According to the big data, users who select scenes and describe problems can get more effective help!"
String get translation_butler_scenes_tips => "According to the big data, users who select scenes and describe problems can get more effective help!";
/// "Call the assistant"
String get translation_butler_call => "Call the assistant";
/// "My location"
String get travel_my_location => "My location";
/// "Place you want to go"
String get travel_go_where => "Place you want to go";
/// "The current location is not monitored in real time. You need to click the \"distance query\" button to query it each time"
String get travel_tips => "The current location is not monitored in real time. You need to click the \"distance query\" button to query it each time";
/// "Distance query"
String get travel_check_distance => "Distance query";
/// "According to the positioning, your current distance from the target location queried is:"
String get travel_check_distance_result => "According to the positioning, your current distance from the target location queried is:";
/// "There are too many people in the queue, thank you for your patience"
String get translation_butler_tips2 => "There are too many people in the queue, thank you for your patience";
/// "Calling the assistant for you"
String get translation_butler_tips3 => "Calling the assistant for you";
/// "Waiting number"
String get translation_butler_wait_people => "Waiting number";
/// "Person(s)"
String get translation_butler_wait_people_unit => "Person(s)";
/// "Time expected to wait"
String get translation_butler_wait_time => "Time expected to wait";
/// "Waiting time already"
String get translation_butler_already_wait => "Waiting time already";
/// "Cancel call "
String get translation_butler_cancel => "Cancel call ";
/// "Waiting for service"
String get translation_butler_wait_service => "Waiting for service";
/// "Real time helper-translation assistant"
String get translation_butler_dialog_title => "Real time helper-translation assistant";
/// "/s1 Place an order through the system"
String get translation_butler_dialog_order => "/s1 Place an order through the system";
/// "Service begins"
String get translation_butler_dialog_start_service => "Service begins";
/// "Chat begins"
String get translation_butler_dialog_start_chat => "Chat begins";
/// "/s1H coin//s2 min"
String get translation_butler_coin_time => "/s1H coin//s2 min";
/// "Service ended"
String get translation_butler_end_service => "Service ended";
/// "Service begins"
String get translation_butler_start_service => "Service begins";
/// "Service ended"
String get translation_butler_service_end => "Service ended";
/// "Evaluation"
String get translation_butler_evaluation => "Evaluation";
/// "Translation service has begun,I hope you a pleasant experience of service"
String get translation_butler_start_tips => "Translation service has begun,I hope you a pleasant experience of service";
/// "Translation service is over, please give an evaluation after your pleasant experience"
String get translation_butler_evaluation_tips => "Translation service is over, please give an evaluation after your pleasant experience";
/// "Are you satisfied with this service?"
String get translation_butler_dialog_tips => "Are you satisfied with this service?";
/// "Satisfied"
String get translation_butler_dialog_yes => "Satisfied";
/// "Dissatisfied"
String get translation_butler_dialog_no => "Dissatisfied";
/// "Submit evaluation"
String get translation_butler_dialog_submit => "Submit evaluation";
/// "Patient services"
String get translation_pos_1 => "Patient services";
/// "Fast and punctual"
String get translation_pos_2 => "Fast and punctual";
/// "Politeness and enthusiasm"
String get translation_pos_3 => "Politeness and enthusiasm";
/// "Smooth communication"
String get translation_pos_4 => "Smooth communication";
/// "Brilliant translation"
String get translation_pos_5 => "Brilliant translation";
/// "Harassment and threat"
String get translation_neg1 => "Harassment and threat";
/// "Communication barriers"
String get translation_neg2 => "Communication barriers";
/// "Slow response"
String get translation_neg3 => "Slow response";
/// "Bad attitude "
String get translation_neg4 => "Bad attitude ";
/// "Poor translation"
String get translation_neg5 => "Poor translation";
/// "Airports / stations"
String get translation_scenes_1 => "Airports / stations";
/// "Restaurants / hotels"
String get translation_scenes_2 => "Restaurants / hotels";
/// "KTV / bars"
String get translation_scenes_3 => "KTV / bars";
/// "Others"
String get translation_scenes_4 => "Others";
/// "Files"
String get file => "Files";
/// "File larger than /s1M"
String get max_file => "File larger than /s1M";
/// "/s1 words can also be input"
String get translation_input_limit => "/s1 words can also be input";
/// "More descriptions"
String get translation_more_desc => "More descriptions";
/// "Feedback helper"
String get feedback_assistant => "Feedback helper";
/// "You can give me feedback in case of any questions"
String get feedback_tips => "You can give me feedback in case of any questions";
/// "人工重译" /// "人工重译"
String get man_retranslate => "人工重译"; String get man_retranslate => "人工重译";
/// "机器重译" /// "机器重译"
@@ -16992,210 +16992,210 @@ class _I18n_ko_KR extends I18n {
/// "인출 금액(단위K)" /// "인출 금액(단위K)"
@override @override
String get enter_num_qian1 => "인출 금액(단위K)"; String get enter_num_qian1 => "인출 금액(단위K)";
/// "翻译券"
/// " 번역권"
@override @override
String get daily_translate_voucher => "翻译券";
/// "通知消息"
String get daily_translate_voucher => " 번역권";
/// " 소식 알람 "
@override @override
String get msg_notice => "通知消息";
/// "选择提醒的人"
String get msg_notice => " 소식 알람 ";
/// "멘션 선택"
@override @override
String get select_notice_people => "选择提醒的人";
/// "查找手机号"
String get select_notice_people => "멘션 선택";
/// "휴대폰 번호 찾기"
@override @override
String get search_phone => "查找手机号";
/// "用户不存在"
String get search_phone => "휴대폰 번호 찾기";
/// "사용자가 존재하지 않음"
@override @override
String get not_have_user => "用户不存在";
/// "你不能添加自己"
String get not_have_user => "사용자가 존재하지 않음";
/// "당신은 자신을 추가할 수 없다"
@override @override
String get not_add_Myself => "你不能添加自己";
/// "对方已拉黑了你"
String get not_add_Myself => "당신은 자신을 추가할 수 없다";
/// "상대가 널 블랙리스트에 추가했습니다."
@override @override
String get you_are_blaklisted => "对方已拉黑了你";
/// "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)"
String get you_are_blaklisted => "상대가 널 블랙리스트에 추가했습니다.";
/// "불에 탄 사진을 복구하시겠습니까?\n(이미 본 사용자는 다시 볼 수 있습니다)"
@override @override
String get confrim_recovery => "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)";
/// "發送到"
String get confrim_recovery => "불에 탄 사진을 복구하시겠습니까?\n(이미 본 사용자는 다시 볼 수 있습니다)";
/// "보내다"
@override @override
String get send_to => "發送到";
/// "搜索位置"
String get send_to => "보내다";
/// "위치 검색"
@override @override
String get search_plach => "搜索位置";
/// "查找位置"
String get search_plach => "위치 검색";
/// "위치 찾기"
@override @override
String get finding_place => "查找位置";
/// "实时帮"
String get finding_place => "위치 찾기";
/// "실시 도움"
@override @override
String get real_time_helper => "实时帮";
/// "翻译管家"
String get real_time_helper => "실시 도움";
/// "번역 집사"
@override @override
String get translation_butler => "翻译管家";
/// "出行管家"
String get translation_butler => "번역 집사";
/// "출행 집사"
@override @override
String get travel_butler => "出行管家";
/// "您的实时贴身翻译,随时随地帮您解决语言不通"
String get travel_butler => "출행 집사";
/// " 당신의 실시간 밀착 통역으로 언제 어디서나 말이 통하지 않는 것을 해결해 드립니다."
@override @override
String get translation_butler_tips => "您的实时贴身翻译,随时随地帮您解决语言不通";
/// "请选择要翻译的语言"
String get translation_butler_tips => " 당신의 실시간 밀착 통역으로 언제 어디서나 말이 통하지 않는 것을 해결해 드립니다.";
/// "번역할 언어를 선택하세요."
@override @override
String get choose_language => "请选择要翻译的语言";
/// "呼叫管家需要预付H币,管家服务时长为5分钟"
String get choose_language => "번역할 언어를 선택하세요.";
/// " 호출집사는 H화를 선불로 내야 하며, 집사 서비스는 5분으로 길다."
@override @override
String get translation_butler_rules => "呼叫管家需要预付H币,管家服务时长为5分钟";
/// "您当所在场景"
String get translation_butler_rules => " 호출집사는 H화를 선불로 내야 하며, 집사 서비스는 5분으로 길다.";
/// " 당신이 있는 곳의 정경 "
@override @override
String get translation_butler_scenes => "您当所在场景";
/// "根据大数据显示,选择了场景并描述问题的用户得到了更有效的帮助哦!"
String get translation_butler_scenes => " 당신이 있는 곳의 정경 ";
/// " 빅 데이터에 따르면 장면을 선택하고 문제를 묘사한 사용자가 더욱 효과적으로 도움을 받고 있습니다!"
@override @override
String get translation_butler_scenes_tips => "根据大数据显示,选择了场景并描述问题的用户得到了更有效的帮助哦!";
/// "呼叫管家"
String get translation_butler_scenes_tips => " 빅 데이터에 따르면 장면을 선택하고 문제를 묘사한 사용자가 더욱 효과적으로 도움을 받고 있습니다!";
/// "집사를 호출"
@override @override
String get translation_butler_call => "呼叫管家";
/// "我的位置"
String get translation_butler_call => "집사를 호출";
/// "내 위치"
@override @override
String get travel_my_location => "我的位置";
/// "你要去哪儿"
String get travel_my_location => "내 위치";
/// "당신이 어디 가세요?"
@override @override
String get travel_go_where => "你要去哪儿";
/// "当前定位非实时监测,每次需点击“距离查询”按钮查询"
String get travel_go_where => "당신이 어디 가세요?";
/// "현재 포지셔닝 비실시간 모니터링의 경우 매번 \"거리 조회\" 버튼을 클릭하여 조회해야 합니다."
@override @override
String get travel_tips => "当前定位非实时监测,每次需点击“距离查询”按钮查询";
/// "距离查询"
String get travel_tips => "현재 포지셔닝 비실시간 모니터링의 경우 매번 \"거리 조회\" 버튼을 클릭하여 조회해야 합니다.";
/// "거리 조회"
@override @override
String get travel_check_distance => "距离查询";
/// "根据定位查询,您的当前距离目标地点相距:"
String get travel_check_distance => "거리 조회";
/// " 위치 조회에 따르면, 당신의 현재 거리가 목표 지점에서 서로 떨어져 있습니다:"
@override @override
String get travel_check_distance_result => "根据定位查询,您的当前距离目标地点相距:";
/// "当前排队人数过多,感谢您的耐心等待"
String get travel_check_distance_result => " 위치 조회에 따르면, 당신의 현재 거리가 목표 지점에서 서로 떨어져 있습니다:";
/// "현재 줄 서는 사람이 너무 많으니, 기다려 주셔서 감사합니다."
@override @override
String get translation_butler_tips2 => "当前排队人数过多,感谢您的耐心等待";
/// "正在为您呼叫管家"
String get translation_butler_tips2 => "현재 줄 서는 사람이 너무 많으니, 기다려 주셔서 감사합니다.";
/// "집사님을 호출하고 있습니다."
@override @override
String get translation_butler_tips3 => "正在为您呼叫管家";
/// "等待人数"
String get translation_butler_tips3 => "집사님을 호출하고 있습니다.";
/// "대기자 수"
@override @override
String get translation_butler_wait_people => "等待人数";
/// ""
String get translation_butler_wait_people => "대기자 수";
/// ""
@override @override
String get translation_butler_wait_people_unit => "";
/// "预计还需等待"
String get translation_butler_wait_people_unit => "";
/// " 아직 기다려야 할 것으로 예상"
@override @override
String get translation_butler_wait_time => "预计还需等待";
/// "已等待"
String get translation_butler_wait_time => " 아직 기다려야 할 것으로 예상";
/// "이미 기다리다."
@override @override
String get translation_butler_already_wait => "已等待";
/// "取消呼叫"
String get translation_butler_already_wait => "이미 기다리다.";
/// "호출 취소"
@override @override
String get translation_butler_cancel => "取消呼叫";
/// "等待服务"
String get translation_butler_cancel => "호출 취소";
/// "대기 서비스"
@override @override
String get translation_butler_wait_service => "等待服务";
/// "实时帮-翻译管家"
String get translation_butler_wait_service => "대기 서비스";
/// " 실시 도움-번역 집사 "
@override @override
String get translation_butler_dialog_title => "实时帮-翻译管家";
/// "/s1通过系统下单"
String get translation_butler_dialog_title => " 실시 도움-번역 집사 ";
/// "/s1 시스템을 통한 주문했다."
@override @override
String get translation_butler_dialog_order => "/s1通过系统下单";
/// "开始服务"
String get translation_butler_dialog_order => "/s1 시스템을 통한 주문했다.";
/// "서비스 시작"
@override @override
String get translation_butler_dialog_start_service => "开始服务";
/// "开始聊天"
String get translation_butler_dialog_start_service => "서비스 시작";
/// "채팅 시작"
@override @override
String get translation_butler_dialog_start_chat => "开始聊天";
/// "/s1H币//s2分钟"
String get translation_butler_dialog_start_chat => "채팅 시작";
/// "/s1H화폐//s2분"
@override @override
String get translation_butler_coin_time => "/s1H币//s2分钟";
/// "结束服务"
String get translation_butler_coin_time => "/s1H화폐//s2분";
/// "서비스 끝"
@override @override
String get translation_butler_end_service => "结束服务";
/// "服务开始"
String get translation_butler_end_service => "서비스 끝";
/// "서비스 시작"
@override @override
String get translation_butler_start_service => "服务开始";
/// "服务结束"
String get translation_butler_start_service => "서비스 시작";
/// "서비스 끝"
@override @override
String get translation_butler_service_end => "服务结束";
/// "评价"
String get translation_butler_service_end => "서비스 끝";
/// "평가"
@override @override
String get translation_butler_evaluation => "评价";
/// "翻译服务已开始,愿本次服务体验愉快"
String get translation_butler_evaluation => "평가";
/// "번역 서비스가 이미 시작되었으니, 이번 서비스는 즐거운 체험이 되기를 바랍니다."
@override @override
String get translation_butler_start_tips => "翻译服务已开始,愿本次服务体验愉快";
/// "翻译服务已结束,体验愉快就给个评价吧"
String get translation_butler_start_tips => "번역 서비스가 이미 시작되었으니, 이번 서비스는 즐거운 체험이 되기를 바랍니다.";
/// "통역 서비스가 끝났으니 즐거운 체험을 하시면 평가해 주십시오."
@override @override
String get translation_butler_evaluation_tips => "翻译服务已结束,体验愉快就给个评价吧";
/// "你对本次服务满意吗?"
String get translation_butler_evaluation_tips => "통역 서비스가 끝났으니 즐거운 체험을 하시면 평가해 주십시오.";
/// "이번 서비스에 만족하십니까?"
@override @override
String get translation_butler_dialog_tips => "你对本次服务满意吗?";
/// "满意"
String get translation_butler_dialog_tips => "이번 서비스에 만족하십니까?";
/// "마음에 들다."
@override @override
String get translation_butler_dialog_yes => "满意";
/// "不满意"
String get translation_butler_dialog_yes => "마음에 들다.";
/// " 만족스럽지 못하다."
@override @override
String get translation_butler_dialog_no => "不满意";
/// "提交评价"
String get translation_butler_dialog_no => " 만족스럽지 못하다.";
/// "평가를 제출하다."
@override @override
String get translation_butler_dialog_submit => "提交评价";
/// "服务耐心"
String get translation_butler_dialog_submit => "평가를 제출하다.";
/// "친절하게 서비스했다."
@override @override
String get translation_pos_1 => "服务耐心";
/// "快速准时"
String get translation_pos_1 => "친절하게 서비스했다.";
/// " 신속하다."
@override @override
String get translation_pos_2 => "快速准时";
/// "礼貌热情"
String get translation_pos_2 => " 신속하다.";
/// " 예의와 열정하다."
@override @override
String get translation_pos_3 => "礼貌热情";
/// "沟通顺畅"
String get translation_pos_3 => " 예의와 열정하다.";
/// "얘기 편하다."
@override @override
String get translation_pos_4 => "沟通顺畅";
/// "大神翻译"
String get translation_pos_4 => "얘기 편하다.";
/// "틀이 없이 번역하다."
@override @override
String get translation_pos_5 => "大神翻译";
/// "骚扰威胁"
String get translation_pos_5 => "틀이 없이 번역하다.";
/// "스토킹 위협"
@override @override
String get translation_neg1 => "骚扰威胁";
/// "沟通障碍"
String get translation_neg1 => "스토킹 위협";
/// "얘기 장애"
@override @override
String get translation_neg2 => "沟通障碍";
/// "响应缓慢"
String get translation_neg2 => "얘기 장애";
/// "반응이 느리다."
@override @override
String get translation_neg3 => "响应缓慢";
/// "态度不好"
String get translation_neg3 => "반응이 느리다.";
/// "태도 안 좋다."
@override @override
String get translation_neg4 => "态度不好";
/// "翻译不行"
String get translation_neg4 => "태도 안 좋다.";
/// "번역 안되다."
@override @override
String get translation_neg5 => "翻译不行";
/// "机场/车站"
String get translation_neg5 => "번역 안되다.";
/// "공항/정류장"
@override @override
String get translation_scenes_1 => "机场/车站";
/// "餐厅/酒店"
String get translation_scenes_1 => "공항/정류장";
/// "식당/호텔"
@override @override
String get translation_scenes_2 => "餐厅/酒店";
/// "KTV/酒吧"
String get translation_scenes_2 => "식당/호텔";
/// "KTV/술집"
@override @override
String get translation_scenes_3 => "KTV/酒吧";
/// "其他"
String get translation_scenes_3 => "KTV/술집";
/// "기타"
@override @override
String get translation_scenes_4 => "其他";
/// "文件"
String get translation_scenes_4 => "기타";
/// "서류"
@override @override
String get file => "文件";
/// "文件大于/s1M"
String get file => "서류";
/// "파일 크기 /s1M"
@override @override
String get max_file => "文件大于/s1M";
/// "还可以输入/s1字"
String get max_file => "파일 크기 /s1M";
/// "/s1자도 입력할 수 있다."
@override @override
String get translation_input_limit => "还可以输入/s1字";
/// "更多描述"
String get translation_input_limit => "/s1자도 입력할 수 있다.";
/// "더 많은 묘사"
@override @override
String get translation_more_desc => "更多描述";
/// "反馈小助手"
String get translation_more_desc => "더 많은 묘사";
/// " 피드백 팁"
@override @override
String get feedback_assistant => "反馈小助手";
/// "有什么问题都可以反馈给我哦"
String get feedback_assistant => " 피드백 팁";
/// "어떤 문제라도 피드백해 주세요."
@override @override
String get feedback_tips => "有什么问题都可以反馈给我哦";
String get feedback_tips => "어떤 문제라도 피드백해 주세요.";
/// "人工重译" /// "人工重译"
@override @override
String get man_retranslate => "人工重译"; String get man_retranslate => "人工重译";
@@ -20672,210 +20672,210 @@ class _I18n_ja_JP extends I18n {
/// "引き出し数量(单位K)" /// "引き出し数量(单位K)"
@override @override
String get enter_num_qian1 => "引き出し数量(单位K)"; String get enter_num_qian1 => "引き出し数量(单位K)";
/// "翻券"
/// "翻券"
@override @override
String get daily_translate_voucher => "翻券";
/// "通知消息"
String get daily_translate_voucher => "翻券";
/// "通知メッセージ"
@override @override
String get msg_notice => "通知消息";
/// "选择提醒的人"
String get msg_notice => "通知メッセージ";
/// "注意する人を選択"
@override @override
String get select_notice_people => "选择提醒的人";
/// "查找手机号"
String get select_notice_people => "注意する人を選択";
/// "携帯番号を検索"
@override @override
String get search_phone => "查找手机号";
/// "用户不存在"
String get search_phone => "携帯番号を検索";
/// "ユーザーは存在しない"
@override @override
String get not_have_user => "用户不存在";
/// "你不能添加自己"
String get not_have_user => "ユーザーは存在しない";
/// "自分を追加することはできない"
@override @override
String get not_add_Myself => "你不能添加自己";
/// "对方已拉黑了你"
String get not_add_Myself => "自分を追加することはできない";
/// "相手は既にあなたをプロックしました"
@override @override
String get you_are_blaklisted => "对方已拉黑了你";
/// "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)"
String get you_are_blaklisted => "相手は既にあなたをプロックしました";
/// "焼却した写真を立直しますか?(すでに見たユーザーはもう一度見ることができます)"
@override @override
String get confrim_recovery => "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)";
/// "發送到"
String get confrim_recovery => "焼却した写真を立直しますか?(すでに見たユーザーはもう一度見ることができます)";
/// "発送"
@override @override
String get send_to => "發送到";
/// "搜索位置"
String get send_to => "発送";
/// "位置検索"
@override @override
String get search_plach => "搜索位置";
/// "查找位置"
String get search_plach => "位置検索";
/// "位置を検索"
@override @override
String get finding_place => "查找位置";
/// "实时帮"
String get finding_place => "位置を検索";
/// "リアルタイムヘルプ"
@override @override
String get real_time_helper => "实时帮";
/// "翻译管家"
String get real_time_helper => "リアルタイムヘルプ";
/// "翻訳バトラー"
@override @override
String get translation_butler => "翻译管家";
/// "出行管家"
String get translation_butler => "翻訳バトラー";
/// "トラベルバトラー"
@override @override
String get travel_butler => "出行管家";
/// "您的实时贴身翻译,随时随地帮您解决语言不通"
String get travel_butler => "トラベルバトラー";
/// "あなたのリアルタイムの個人通訳は、いつでもどこでも言語の不通を解決してくれます"
@override @override
String get translation_butler_tips => "您的实时贴身翻译,随时随地帮您解决语言不通";
/// "请选择要翻译的语言"
String get translation_butler_tips => "あなたのリアルタイムの個人通訳は、いつでもどこでも言語の不通を解決してくれます";
/// "翻訳する言語を選んでください"
@override @override
String get choose_language => "请选择要翻译的语言";
/// "呼叫管家需要预付H币,管家服务时长为5分钟"
String get choose_language => "翻訳する言語を選んでください";
/// "バトラーを呼ぶにはH幤が必要です、バトラーサービスは5分かかります。"
@override @override
String get translation_butler_rules => "呼叫管家需要预付H币,管家服务时长为5分钟";
/// "您当所在场景"
String get translation_butler_rules => "バトラーを呼ぶにはH幤が必要です、バトラーサービスは5分かかります。";
/// "あなたがいるシーン"
@override @override
String get translation_butler_scenes => "您当所在场景";
/// "根据大数据显示,选择了场景并描述问题的用户得到了更有效的帮助哦!"
String get translation_butler_scenes => "あなたがいるシーン";
/// "ビッグデータによると、シーンを選択して問題を説明するユーザーはより効果的に助けられました!"
@override @override
String get translation_butler_scenes_tips => "根据大数据显示,选择了场景并描述问题的用户得到了更有效的帮助哦!";
/// "呼叫管家"
String get translation_butler_scenes_tips => "ビッグデータによると、シーンを選択して問題を説明するユーザーはより効果的に助けられました!";
/// "バトラーを呼びます"
@override @override
String get translation_butler_call => "呼叫管家";
/// "我的位置"
String get translation_butler_call => "バトラーを呼びます";
/// "私の位置"
@override @override
String get travel_my_location => "我的位置";
/// "你要去哪儿"
String get travel_my_location => "私の位置";
/// "どこへ行きますか"
@override @override
String get travel_go_where => "你要去哪儿";
/// "当前定位非实时监测,每次需点击“距离查询”按钮查询"
String get travel_go_where => "どこへ行きますか";
/// "現在の位置付けは非リアルタイム監視で、毎回「距離照会」ボタンをクリックして照会します"
@override @override
String get travel_tips => "当前定位非实时监测,每次需点击“距离查询”按钮查询";
/// "距离查询"
String get travel_tips => "現在の位置付けは非リアルタイム監視で、毎回「距離照会」ボタンをクリックして照会します";
/// "距離の照会"
@override @override
String get travel_check_distance => "距离查询";
/// "根据定位查询,您的当前距离目标地点相距:"
String get travel_check_distance => "距離の照会";
/// "ポジショニングクエリによると、ターゲット位置からの現在の距離:"
@override @override
String get travel_check_distance_result => "根据定位查询,您的当前距离目标地点相距:";
/// "当前排队人数过多,感谢您的耐心等待"
String get travel_check_distance_result => "ポジショニングクエリによると、ターゲット位置からの現在の距離:";
/// "今は並んでいる人が多すぎます。待ってくれてありがとうございます"
@override @override
String get translation_butler_tips2 => "当前排队人数过多,感谢您的耐心等待";
/// "正在为您呼叫管家"
String get translation_butler_tips2 => "今は並んでいる人が多すぎます。待ってくれてありがとうございます";
/// "バトラーを呼びます"
@override @override
String get translation_butler_tips3 => "正在为您呼叫管家";
/// "待人数"
String get translation_butler_tips3 => "バトラーを呼びます";
/// "待人数"
@override @override
String get translation_butler_wait_people => "待人数";
String get translation_butler_wait_people => "待人数";
/// "位" /// "位"
@override @override
String get translation_butler_wait_people_unit => "位"; String get translation_butler_wait_people_unit => "位";
/// "预计还需等待"
/// "待つ予定"
@override @override
String get translation_butler_wait_time => "预计还需等待";
/// "已等待"
String get translation_butler_wait_time => "待つ予定";
/// "待っています"
@override @override
String get translation_butler_already_wait => "已等待";
/// "取消呼叫"
String get translation_butler_already_wait => "待っています";
/// "呼び出しをキャンセル"
@override @override
String get translation_butler_cancel => "取消呼叫";
/// "等待服务"
String get translation_butler_cancel => "呼び出しをキャンセル";
/// "サービスを待つ"
@override @override
String get translation_butler_wait_service => "等待服务";
/// "实时帮-翻译管家"
String get translation_butler_wait_service => "サービスを待つ";
/// "リアルタイムヘルプ-翻訳バトラー"
@override @override
String get translation_butler_dialog_title => "实时帮-翻译管家";
/// "/s1通过系统下单"
String get translation_butler_dialog_title => "リアルタイムヘルプ-翻訳バトラー";
/// "/s1システムで注文する"
@override @override
String get translation_butler_dialog_order => "/s1通过系统下单";
/// "开始服务"
String get translation_butler_dialog_order => "/s1システムで注文する";
/// "サービスを開始する"
@override @override
String get translation_butler_dialog_start_service => "开始服务";
/// "开始聊天"
String get translation_butler_dialog_start_service => "サービスを開始する";
/// "チャットを始める"
@override @override
String get translation_butler_dialog_start_chat => "开始聊天";
/// "/s1H币//s2分钟"
String get translation_butler_dialog_start_chat => "チャットを始める";
/// "/s1H幤//s2分"
@override @override
String get translation_butler_coin_time => "/s1H币//s2分钟";
/// "结束服务"
String get translation_butler_coin_time => "/s1H幤//s2分";
/// "サービスを終了する"
@override @override
String get translation_butler_end_service => "结束服务";
/// "服务开始"
String get translation_butler_end_service => "サービスを終了する";
/// "サービス開始"
@override @override
String get translation_butler_start_service => "服务开始";
/// "服务结束"
String get translation_butler_start_service => "サービス開始";
/// "サービス終了"
@override @override
String get translation_butler_service_end => "服务结束";
/// "评价"
String get translation_butler_service_end => "サービス終了";
/// "評価"
@override @override
String get translation_butler_evaluation => "评价";
/// "翻译服务已开始,愿本次服务体验愉快"
String get translation_butler_evaluation => "評価";
/// "通訳サービスが始まりました。今回のサービス体験が楽しいように"
@override @override
String get translation_butler_start_tips => "翻译服务已开始,愿本次服务体验愉快";
/// "翻译服务已结束,体验愉快就给个评价吧"
String get translation_butler_start_tips => "通訳サービスが始まりました。今回のサービス体験が楽しいように";
/// "翻訳サービスは終了しました、評価してください"
@override @override
String get translation_butler_evaluation_tips => "翻译服务已结束,体验愉快就给个评价吧";
/// "你对本次服务满意吗?"
String get translation_butler_evaluation_tips => "翻訳サービスは終了しました、評価してください";
/// "今回のサービスに満足していますか?"
@override @override
String get translation_butler_dialog_tips => "你对本次服务满意吗?";
/// "满意"
String get translation_butler_dialog_tips => "今回のサービスに満足していますか?";
/// "満足"
@override @override
String get translation_butler_dialog_yes => "满意";
/// "不满意"
String get translation_butler_dialog_yes => "満足";
/// "不満足"
@override @override
String get translation_butler_dialog_no => "不满意";
/// "提交评价"
String get translation_butler_dialog_no => "不満足";
/// "評価を出す"
@override @override
String get translation_butler_dialog_submit => "提交评价";
/// "服务耐心"
String get translation_butler_dialog_submit => "評価を出す";
/// "辛抱強い"
@override @override
String get translation_pos_1 => "服务耐心";
/// "快速准时"
String get translation_pos_1 => "辛抱強い";
/// "クイックタイム"
@override @override
String get translation_pos_2 => "快速准时";
/// "礼貌热情"
String get translation_pos_2 => "クイックタイム";
/// "礼儀正しくて親切である"
@override @override
String get translation_pos_3 => "礼貌热情";
/// "沟通顺畅"
String get translation_pos_3 => "礼儀正しくて親切である";
/// "コミュニケーションが円滑である"
@override @override
String get translation_pos_4 => "沟通顺畅";
/// "大神翻译"
String get translation_pos_4 => "コミュニケーションが円滑である";
/// "素晴らしい翻訳"
@override @override
String get translation_pos_5 => "大神翻译";
/// "骚扰威胁"
String get translation_pos_5 => "素晴らしい翻訳";
/// "嫌がらせ・脅かす"
@override @override
String get translation_neg1 => "骚扰威胁";
/// "沟通障碍"
String get translation_neg1 => "嫌がらせ・脅かす";
/// "コミュニケーション障害"
@override @override
String get translation_neg2 => "沟通障碍";
/// "响应缓慢"
String get translation_neg2 => "コミュニケーション障害";
/// "応答が遅い"
@override @override
String get translation_neg3 => "响应缓慢";
/// "态度不好"
String get translation_neg3 => "応答が遅い";
/// "態度が悪い"
@override @override
String get translation_neg4 => "态度不好";
/// "翻译不行"
String get translation_neg4 => "態度が悪い";
/// "翻訳はだめです"
@override @override
String get translation_neg5 => "翻译不行";
/// "机场/车站"
String get translation_neg5 => "翻訳はだめです";
/// "空港/駅"
@override @override
String get translation_scenes_1 => "机场/车站";
/// "餐厅/酒店"
String get translation_scenes_1 => "空港/駅";
/// "レストラン/ホテル"
@override @override
String get translation_scenes_2 => "餐厅/酒店";
/// "KTV/酒吧"
String get translation_scenes_2 => "レストラン/ホテル";
/// "KTV/バー"
@override @override
String get translation_scenes_3 => "KTV/酒吧";
/// "他"
String get translation_scenes_3 => "KTV/バー";
/// "その他"
@override @override
String get translation_scenes_4 => "他";
/// "文件"
String get translation_scenes_4 => "その他";
/// "ファイル"
@override @override
String get file => "文件";
/// "文件大于/s1M"
String get file => "ファイル";
/// "ファイル容量が/s1Mより大きい"
@override @override
String get max_file => "文件大于/s1M";
/// "还可以输入/s1字"
String get max_file => "ファイル容量が/s1Mより大きい";
/// " /s1と入力することができます"
@override @override
String get translation_input_limit => "还可以输入/s1字";
/// "更多描述"
String get translation_input_limit => " /s1と入力することができます";
/// "詳細説明"
@override @override
String get translation_more_desc => "更多描述";
/// "反馈小助手"
String get translation_more_desc => "詳細説明";
/// "フィードバックアシスタント"
@override @override
String get feedback_assistant => "反馈小助手";
/// "有什么问题都可以反馈给我哦"
String get feedback_assistant => "フィードバックアシスタント";
/// "どんな問題があってもフィードバックしてください"
@override @override
String get feedback_tips => "有什么问题都可以反馈给我哦";
String get feedback_tips => "どんな問題があってもフィードバックしてください";
/// "人工重译" /// "人工重译"
@override @override
String get man_retranslate => "人工重译"; String get man_retranslate => "人工重译";


+ 9
- 4
lib/home/audio_chat_view.dart 查看文件

@@ -283,14 +283,15 @@ class _AudioChatPageState extends State<AudioChatPage> {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[ children: <Widget>[
Container( Container(
width: Screen.width - 50,
constraints: BoxConstraints(maxWidth: Screen.width - 50),
child: Text( child: Text(
userName, userName,
style: TextStyle(fontSize: 20, color: Colors.white70), style: TextStyle(fontSize: 20, color: Colors.white70),
textScaleFactor: 1.0, textScaleFactor: 1.0,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.center, textAlign: TextAlign.center,
)), )),
fixedText('$age', fontSize: 20, color: Colors.white70)
fixedText(' $age', fontSize: 20, color: Colors.white70)
], ],
), ),
SizedBox(height: 5), SizedBox(height: 5),
@@ -368,7 +369,7 @@ class _AudioChatPageState extends State<AudioChatPage> {
_bottomToolBar() { _bottomToolBar() {
List<Widget> showWidgets = [ List<Widget> showWidgets = [
Text(I18n.of(context).voicing, Text(I18n.of(context).voicing,
textScaleFactor: 1.0,
textScaleFactor: 1.0,
style: TextStyle(fontSize: 11, color: Colors.white24), style: TextStyle(fontSize: 11, color: Colors.white24),
textAlign: TextAlign.center), textAlign: TextAlign.center),
SizedBox(height: 10), SizedBox(height: 10),
@@ -530,7 +531,11 @@ class _AudioChatPageState extends State<AudioChatPage> {
color: Colors.white, color: Colors.white,
), ),
child: giftList == null child: giftList == null
? Center(child: Text(I18n.of(context).no_gift, textScaleFactor: 1.0,))
? Center(
child: Text(
I18n.of(context).no_gift,
textScaleFactor: 1.0,
))
: Column( : Column(
children: <Widget>[ children: <Widget>[
Container( Container(


+ 6
- 0
lib/home/friend_page.dart 查看文件

@@ -290,6 +290,12 @@ class _FriendPageState extends State<FriendPage> {
const Color(0xFF088E76), const Color(0xFF088E76),
]), ]),
onPressed: () async { onPressed: () async {
CustomUI.buildContacts(context, I18n.of(context).privacyAgreement,
I18n.of(context).determine, () {
Navigator.of(context).pop();
showPermission();
}, title: I18n.of(context).tip);
return;
final PermissionStatus addStatus = await PermissionHandler() final PermissionStatus addStatus = await PermissionHandler()
.checkPermissionStatus(PermissionGroup.contacts); .checkPermissionStatus(PermissionGroup.contacts);
if ((addStatus == PermissionStatus.unknown || if ((addStatus == PermissionStatus.unknown ||


+ 1
- 1
lib/home/global_search.dart 查看文件

@@ -240,7 +240,7 @@ class _GlobalSearchPageState extends State<GlobalSearchPage> {
], ],
decoration: InputDecoration( decoration: InputDecoration(
hintText: I18n.of(context).search, hintText: I18n.of(context).search,
hintStyle: TextStyle(fontSize: 14.5),
hintStyle: TextStyle(fontSize: 14.5, color: Colors.grey),
contentPadding: EdgeInsets.only( contentPadding: EdgeInsets.only(
left: 20, left: 20,
top: (UserData().language == LanguageType.English || top: (UserData().language == LanguageType.English ||


+ 3
- 1
lib/home/group_all_member.dart 查看文件

@@ -14,6 +14,7 @@ import '../data/constants.dart';
import '../utils/CustomUI.dart'; import '../utils/CustomUI.dart';
import '../utils/app_navigator.dart'; import '../utils/app_navigator.dart';
import 'create_group_view.dart'; import 'create_group_view.dart';
import 'package:chat/utils/friend_list_mgr.dart';


class GroupAllMember extends StatefulWidget { class GroupAllMember extends StatefulWidget {
final GroupInfoModel groupInfoModel; final GroupInfoModel groupInfoModel;
@@ -171,7 +172,8 @@ class GroupAllMemberState extends State<GroupAllMember> {
onTap: () { onTap: () {
if (member.memberId != UserData().basicInfo.userId) { if (member.memberId != UserData().basicInfo.userId) {
AppNavigator.pushProfileInfoPage(context, member.memberId, AppNavigator.pushProfileInfoPage(context, member.memberId,
fromWhere: 2, addMode: 1);
fromWhere: 2,
addMode: !FriendListMgr().isMyFriend(member.memberId) ? 1 : 0);
} }
}, },
)); ));


+ 2
- 1
lib/home/group_setting.dart 查看文件

@@ -22,6 +22,7 @@ import '../utils/CustomUI.dart';
import '../utils/FullWithButton.dart'; import '../utils/FullWithButton.dart';
import '../utils/app_navigator.dart'; import '../utils/app_navigator.dart';
import 'create_group_view.dart'; import 'create_group_view.dart';
import 'package:chat/utils/friend_list_mgr.dart';


class GroupSetting extends StatefulWidget { class GroupSetting extends StatefulWidget {
final GroupInfoModel groupInfoModel; final GroupInfoModel groupInfoModel;
@@ -581,7 +582,7 @@ class GroupSettingState extends State<GroupSetting> {
onTap: () { onTap: () {
if (members[index].memberId != UserData().basicInfo.userId) { if (members[index].memberId != UserData().basicInfo.userId) {
AppNavigator.pushProfileInfoPage(context, members[index].memberId, AppNavigator.pushProfileInfoPage(context, members[index].memberId,
fromWhere: 2, addMode: 1);
fromWhere: 2, addMode: !FriendListMgr().isMyFriend(members[index].memberId) ? 1 : 0);
} }
}, },
)); ));


+ 0
- 1
lib/home/homeMain.dart 查看文件

@@ -406,7 +406,6 @@ class _HomeMainState extends State<HomeMain> {
fontFamily: 'iconfont', fontFamily: 'iconfont',
), ),
type: 4, type: 4,
isShowdot: true,
iconSize: 26.5), iconSize: 26.5),
NavigationIconView( NavigationIconView(


+ 84
- 71
lib/utils/CustomUI.dart 查看文件

@@ -253,7 +253,6 @@ class CustomUI {
child: Text( child: Text(
tipTitle, tipTitle,
textScaleFactor: 1.0, textScaleFactor: 1.0,
style: TextStyle( style: TextStyle(
fontSize: 14, color: Constants.BlackTextColor, height: 1.30), fontSize: 14, color: Constants.BlackTextColor, height: 1.30),
textAlign: TextAlign.center, textAlign: TextAlign.center,
@@ -309,6 +308,7 @@ class CustomUI {
title, title,
buildConfirmContent( buildConfirmContent(
Container( Container(
alignment: Alignment.center,
padding: EdgeInsets.only(top: 38.5, bottom: 31.5), padding: EdgeInsets.only(top: 38.5, bottom: 31.5),
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
@@ -320,7 +320,7 @@ class CustomUI {
fontSize: 14, fontSize: 14,
color: Constants.BlackTextColor, color: Constants.BlackTextColor,
height: 1.30), height: 1.30),
//textAlign: TextAlign.center,
textAlign: TextAlign.center,
), ),
SizedBox( SizedBox(
height: 5, height: 5,
@@ -1154,7 +1154,8 @@ class CustomUI {
); );
} }
static PreferredSizeWidget buildSearchButton(BuildContext context, callback,{double bottom=14}) {
static PreferredSizeWidget buildSearchButton(BuildContext context, callback,
{double bottom = 14}) {
return PreferredSize( return PreferredSize(
preferredSize: Size.fromHeight(49), preferredSize: Size.fromHeight(49),
child: InkWell( child: InkWell(
@@ -1170,7 +1171,7 @@ class CustomUI {
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[ children: <Widget>[
Container( Container(
margin: EdgeInsets.only(left: 15, right: 15),
margin: EdgeInsets.only(left: 15, right: 15, bottom: 0),
child: Icon( child: Icon(
IconData( IconData(
0xe664, 0xe664,
@@ -1180,8 +1181,11 @@ class CustomUI {
size: 18, size: 18,
), ),
), ),
Text(I18n.of(context).search,
style: TextStyle(fontSize: 14.5, color: Colors.grey)),
Container(
margin: EdgeInsets.only(bottom: 0),
child: Text(I18n.of(context).search,
style:
TextStyle(fontSize: 14.5, color: Colors.grey))),
], ],
))), ))),
); );
@@ -1248,80 +1252,89 @@ class CustomUI {
); );
} }
static void buildTranslationHelperOrderDialog(BuildContext context) { static void buildTranslationHelperOrderDialog(BuildContext context) {
Navigator.of(context).push(TutorialOverlay( Navigator.of(context).push(TutorialOverlay(
child:
InkWell(onTap: (){Navigator.of(context).pop();},child: UnconstrainedBox(alignment: Alignment.topCenter,child: InkWell(onTap: (){},child:
Container(
alignment: Alignment.topCenter,
child: InkWell(
onTap: () {
Navigator.of(context).pop();
},
child: UnconstrainedBox(
alignment: Alignment.topCenter,
child: InkWell(
onTap: () {},
child: Container(
alignment: Alignment.topCenter,
// height: 180, // height: 180,
width: Screen.width-20,
margin: EdgeInsets.all(10),
child: Card(
elevation: 2, // 阴影
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
width: Screen.width - 20,
margin: EdgeInsets.all(10),
child: Card(
elevation: 2, // 阴影
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
// side: BorderSide(color: Colors.green,width: 25), // side: BorderSide(color: Colors.green,width: 25),
),
child: Container(
),
child: Container(
// color: Colors.yellow, // color: Colors.yellow,
width: double.maxFinite,
padding: EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: EdgeInsets.only(bottom: 15),
child: Text(
I18n.of(context).translation_butler_dialog_title,
textScaleFactor: 1.0,
textAlign: TextAlign.left,
style: TextStyle(
fontWeight: FontWeight.w500,
color: AppColors.NewAppbarTextColor, fontSize: 17),
),
),
Text(
I18n.of(context).translation_butler_dialog_order.replaceAll('s1', 'xxx'),
textScaleFactor: 1.0,
textAlign: TextAlign.left,
style: TextStyle(
color: AppColors.NewAppbarTextColor, fontSize: 14),
),
SizedBox(height: 10,),
Text(
'时间:今天11:45 时长:10分钟',
textScaleFactor: 1.0,
textAlign: TextAlign.left,
style: TextStyle(
color: AppColors.NewAppbarTextColor, fontSize: 14),
),
Container(margin: EdgeInsets.only(left: 30, right: 30, top: 20,bottom: 10),child: CountDownButton( I18n.of(context).translation_butler_dialog_start_service,(){
Navigator.of(context).pop();
}) ,)
],
),
),
),
),),),),));
width: double.maxFinite,
padding: EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: EdgeInsets.only(bottom: 15),
child: Text(
I18n.of(context).translation_butler_dialog_title,
textScaleFactor: 1.0,
textAlign: TextAlign.left,
style: TextStyle(
fontWeight: FontWeight.w500,
color: AppColors.NewAppbarTextColor,
fontSize: 17),
),
),
Text(
I18n.of(context)
.translation_butler_dialog_order
.replaceAll('s1', 'xxx'),
textScaleFactor: 1.0,
textAlign: TextAlign.left,
style: TextStyle(
color: AppColors.NewAppbarTextColor, fontSize: 14),
),
SizedBox(
height: 10,
),
Text(
'时间:今天11:45 时长:10分钟',
textScaleFactor: 1.0,
textAlign: TextAlign.left,
style: TextStyle(
color: AppColors.NewAppbarTextColor, fontSize: 14),
),
Container(
margin: EdgeInsets.only(
left: 30, right: 30, top: 20, bottom: 10),
child: CountDownButton(
I18n.of(context)
.translation_butler_dialog_start_service, () {
Navigator.of(context).pop();
}),
)
],
),
),
),
),
),
),
),
));
} }
static void buildTranslationEvaluationDialog(BuildContext context) { static void buildTranslationEvaluationDialog(BuildContext context) {
Navigator.of(context).push(TutorialOverlay( Navigator.of(context).push(TutorialOverlay(
child:
TravelEvaluationPage(),));
child: TravelEvaluationPage(),
));
} }
} }

+ 1
- 1
lib/utils/HttpUtil.dart 查看文件

@@ -217,7 +217,7 @@ class HttpUtil {
var fileBytes; var fileBytes;
if (contentType == 'image' && size > 10240) { if (contentType == 'image' && size > 10240) {
fileBytes = await WidgetUtil.getCompressImg(path);
fileBytes = await WidgetUtil.getCompressImg(path,quality: 80,percentage: 80);
} else { } else {
fileBytes = imgfile.readAsBytesSync(); fileBytes = imgfile.readAsBytesSync();
} }


+ 205
- 145
lib/utils/image_util.dart 查看文件

@@ -16,10 +16,8 @@ import '../r.dart';
import 'file_cache_mgr.dart'; import 'file_cache_mgr.dart';
import 'group_member_model.dart'; import 'group_member_model.dart';
const ImgSizeLimit = 60 * 1024; const ImgSizeLimit = 60 * 1024;
/// Widget Util. /// Widget Util.
class WidgetUtil { class WidgetUtil {
bool _hasMeasured = false; bool _hasMeasured = false;
@@ -67,11 +65,11 @@ class WidgetUtil {
: Rect.zero; : Rect.zero;
} }
static getCompressImg(String imgPath) async {
static getCompressImg(String imgPath,
{int quality = 20, int percentage = 20}) async {
File compressedFile = await FlutterNativeImage.compressImage(imgPath, File compressedFile = await FlutterNativeImage.compressImage(imgPath,
quality: 20, percentage: 25);
var k =compressedFile.readAsBytesSync().toList();
quality: quality, percentage: percentage);
var k = compressedFile.readAsBytesSync().toList();
print('A图片压缩完毕 : ${k.length}'); print('A图片压缩完毕 : ${k.length}');
// compressedFile. // compressedFile.
@@ -156,83 +154,72 @@ class WidgetUtil {
return completer.future; return completer.future;
} }
static ImageProvider groupAvatar(String path ) {
static ImageProvider groupAvatar(String path) {
path = FileCacheMgr.replacePath(path); path = FileCacheMgr.replacePath(path);
Uint8List fileData = File(path).readAsBytesSync(); Uint8List fileData = File(path).readAsBytesSync();
// print('fileData ${fileData.length}'); // print('fileData ${fileData.length}');
return MemoryImage(fileData); return MemoryImage(fileData);
} }
static Widget getAvatarNew(
GroupInfoModel model, GlobalKey key, Function backPath) {
List<GroupMemberModel> members = [];
static Widget getAvatarNew(GroupInfoModel model,GlobalKey key,Function backPath) {
List<GroupMemberModel> members =[];
for(int k=0;k< model.members.length;k++){ //只加入存在群的
for (int k = 0; k < model.members.length; k++) {
//只加入存在群的
GroupMemberModel mo = model.members[k]; GroupMemberModel mo = model.members[k];
if(mo.inGroup==1){
if (mo.inGroup == 1) {
members.add(mo); members.add(mo);
} }
} }
if(model.image!=null && model.image.length>2){
if (model.image != null && model.image.length > 2) {
print('${model.name} 群头像地址:${model.image}'); print('${model.name} 群头像地址:${model.image}');
File file = new File(model.image); File file = new File(model.image);
// int filelength = file.readAsBytesSync().length; // int filelength = file.readAsBytesSync().length;
// print('群头像地址file size : $filelength'); // print('群头像地址file size : $filelength');
if( file.existsSync()){ //防止头像文件被清除后
if (file.existsSync()) {
//防止头像文件被清除后
Uint8List pngBytes =file.readAsBytesSync();
Uint8List pngBytes = file.readAsBytesSync();
print('pngBytes.lengthInBytes length;${pngBytes.lengthInBytes}'); print('pngBytes.lengthInBytes length;${pngBytes.lengthInBytes}');
if(pngBytes.lengthInBytes>8000){
return ClipRRect( borderRadius: BorderRadius.circular(5),child:Container(color: Color(0xffE9E9E9),width: 52,height: 52,child:
Image.file(
File(FileCacheMgr.replacePath(model.image)),
fit: BoxFit.contain,
width: 50,
height: 50,
),) ,);
if (pngBytes.lengthInBytes > 8000) {
return ClipRRect(
borderRadius: BorderRadius.circular(5),
child: Container(
color: Color(0xffE9E9E9),
width: 52,
height: 52,
child: Image.file(
File(FileCacheMgr.replacePath(model.image)),
fit: BoxFit.contain,
width: 50,
height: 50,
),
),
);
} }
}else{
} else {
backPath(''); backPath('');
} }
} }
///先让下面的图片显示,5秒后截图保存图片 ///先让下面的图片显示,5秒后截图保存图片
Future.delayed(Duration(seconds: 3),() async{
Future.delayed(Duration(seconds: 3), () async {
// print('没有群图片-开始生成保存到本地:${model.members.length}'); // print('没有群图片-开始生成保存到本地:${model.members.length}');
try { try {
RenderRepaintBoundary boundary =
key.currentContext.findRenderObject();
var image = await boundary.toImage(pixelRatio:2);
RenderRepaintBoundary boundary = key.currentContext.findRenderObject();
var image = await boundary.toImage(pixelRatio: 2);
ByteData byteData = await image.toByteData(format: ImageByteFormat.png); ByteData byteData = await image.toByteData(format: ImageByteFormat.png);
Uint8List pngBytes = byteData.buffer.asUint8List(); Uint8List pngBytes = byteData.buffer.asUint8List();
File file =await FileCacheMgr().writeFile(model.sessionId.toString(),pngBytes);
File file = await FileCacheMgr()
.writeFile(model.sessionId.toString(), pngBytes);
print('图片地址byteData${byteData.lengthInBytes}'); print('图片地址byteData${byteData.lengthInBytes}');
if(byteData.lengthInBytes>8000 && members.length>1){ //图片保存成功
GroupInfoMgr().updateAvatar(model.sessionId,file.path);
if (byteData.lengthInBytes > 8000 && members.length > 1) {
//图片保存成功
GroupInfoMgr().updateAvatar(model.sessionId, file.path);
backPath(file.path); backPath(file.path);
} }
@@ -241,94 +228,151 @@ class WidgetUtil {
} catch (e) { } catch (e) {
print(e); print(e);
} }
}); });
if(members.length>9){
members = members.sublist(0,9);
if (members.length > 9) {
members = members.sublist(0, 9);
} }
if (members.length > 0) { if (members.length > 0) {
double itemSize = 10; double itemSize = 10;
switch (members.length) { switch (members.length) {
case 1: case 1:
return RepaintBoundary(key: key,child: ClipRRect(borderRadius: BorderRadius.circular(3),child: Container(color: Color(0xffE9E9E9),width: 52,height: 52,child: Padding(padding: EdgeInsets.all(1),child: CachedNetworkImage(
imageUrl: members[0].avtar,
width: 45,
height: 45,
placeholder: (context, url) =>
Image.asset(R.assetsImagesDefaultNorAvatar,width: 45,
height: 45,)
),),),),);
break;
case 2:
return RepaintBoundary(key: key,child: ClipRRect(borderRadius: BorderRadius.circular(3),child: Container(color: Color(0xffE9E9E9),width: 52,height: 52,child: Row(children: <Widget>[
Padding(padding: EdgeInsets.all(1),child: ClipRRect(
return RepaintBoundary(
key: key,
child: ClipRRect(
borderRadius: BorderRadius.circular(3), borderRadius: BorderRadius.circular(3),
child: CachedNetworkImage(
imageUrl: members[0].avtar,
width: 23,
height: 23,
placeholder: (context, url) =>
Image.asset(R.assetsImagesDefaultNorAvatar, width: 23,
height: 23,)
child: Container(
color: Color(0xffE9E9E9),
width: 52,
height: 52,
child: Padding(
padding: EdgeInsets.all(1),
child: CachedNetworkImage(
imageUrl: members[0].avtar,
width: 45,
height: 45,
placeholder: (context, url) => Image.asset(
R.assetsImagesDefaultNorAvatar,
width: 45,
height: 45,
)),
),
), ),
),),
Padding(padding: EdgeInsets.all(1),child: ClipRRect(
),
);
break;
case 2:
return RepaintBoundary(
key: key,
child: ClipRRect(
borderRadius: BorderRadius.circular(3), borderRadius: BorderRadius.circular(3),
child: CachedNetworkImage(
imageUrl: members[1].avtar,
width: 23,
height: 23,placeholder: (context, url) =>
Image.asset(R.assetsImagesDefaultNorAvatar,width: 23,
height: 23,)
child: Container(
color: Color(0xffE9E9E9),
width: 52,
height: 52,
child: Row(
children: <Widget>[
Padding(
padding: EdgeInsets.all(1),
child: ClipRRect(
borderRadius: BorderRadius.circular(3),
child: CachedNetworkImage(
imageUrl: members[0].avtar,
width: 23,
height: 23,
placeholder: (context, url) => Image.asset(
R.assetsImagesDefaultNorAvatar,
width: 23,
height: 23,
)),
),
),
Padding(
padding: EdgeInsets.all(1),
child: ClipRRect(
borderRadius: BorderRadius.circular(3),
child: CachedNetworkImage(
imageUrl: members[1].avtar,
width: 23,
height: 23,
placeholder: (context, url) => Image.asset(
R.assetsImagesDefaultNorAvatar,
width: 23,
height: 23,
)),
),
)
],
),
), ),
),)
],),),),);
),
);
case 3: case 3:
return RepaintBoundary(key: key,child: ClipRRect(borderRadius: BorderRadius.circular(3),child: Container(color: Color(0xffE9E9E9),width: 52,height: 52,child: Column(children: <Widget>[
Padding(padding: EdgeInsets.all(1),child: ClipRRect(
return RepaintBoundary(
key: key,
child: ClipRRect(
borderRadius: BorderRadius.circular(3), borderRadius: BorderRadius.circular(3),
child: CachedNetworkImage(
imageUrl: members[0].avtar,
width: 23,
height: 23,placeholder: (context, url) =>
Image.asset(R.assetsImagesDefaultNorAvatar,width: 23,
height: 23,)
),
),),
Row(children: <Widget>[
Padding(padding: EdgeInsets.all(1),child: ClipRRect(
borderRadius: BorderRadius.circular(3),
child: CachedNetworkImage(
imageUrl: members[1].avtar,
width: 23,
height: 23,placeholder: (context, url) =>
Image.asset(R.assetsImagesDefaultNorAvatar,width: 23,
height: 23,)
),
),),
Padding(padding: EdgeInsets.all(1),child: ClipRRect(
borderRadius: BorderRadius.circular(3),
child: CachedNetworkImage(
imageUrl: members[2].avtar,
width: 23,
height: 23,placeholder: (context, url) =>
Image.asset(R.assetsImagesDefaultNorAvatar,width: 23,
height: 23,)
child: Container(
color: Color(0xffE9E9E9),
width: 52,
height: 52,
child: Column(
children: <Widget>[
Padding(
padding: EdgeInsets.all(1),
child: ClipRRect(
borderRadius: BorderRadius.circular(3),
child: CachedNetworkImage(
imageUrl: members[0].avtar,
width: 23,
height: 23,
placeholder: (context, url) => Image.asset(
R.assetsImagesDefaultNorAvatar,
width: 23,
height: 23,
)),
),
),
Row(
children: <Widget>[
Padding(
padding: EdgeInsets.all(1),
child: ClipRRect(
borderRadius: BorderRadius.circular(3),
child: CachedNetworkImage(
imageUrl: members[1].avtar,
width: 23,
height: 23,
placeholder: (context, url) => Image.asset(
R.assetsImagesDefaultNorAvatar,
width: 23,
height: 23,
)),
),
),
Padding(
padding: EdgeInsets.all(1),
child: ClipRRect(
borderRadius: BorderRadius.circular(3),
child: CachedNetworkImage(
imageUrl: members[2].avtar,
width: 23,
height: 23,
placeholder: (context, url) => Image.asset(
R.assetsImagesDefaultNorAvatar,
width: 23,
height: 23,
)),
),
)
],
)
],
), ),
),)
],)
],),),),);
),
),
);
} }
if (members.length == 4) { if (members.length == 4) {
@@ -338,30 +382,46 @@ class WidgetUtil {
} }
List<Widget> widgetList = []; List<Widget> widgetList = [];
for (int k = 0; k < members.length; k++) {
widgetList.add(Padding(padding: EdgeInsets.all(1),child: ClipRRect(
borderRadius: BorderRadius.circular(3),
child: CachedNetworkImage(
imageUrl: members[k].avtar,
width: itemSize,
height: itemSize,placeholder: (context, url) =>
Image.asset(R.assetsImagesDefaultNorAvatar,width: itemSize,
height: itemSize,)
for (int k = 0; k < members.length; k++) {
widgetList.add(Padding(
padding: EdgeInsets.all(1),
child: ClipRRect(
borderRadius: BorderRadius.circular(3),
child: CachedNetworkImage(
imageUrl: members[k].avtar,
width: itemSize,
height: itemSize,
placeholder: (context, url) => Image.asset(
R.assetsImagesDefaultNorAvatar,
width: itemSize,
height: itemSize,
)),
), ),
),));
));
} }
return RepaintBoundary(key: key,child: ClipRRect(borderRadius: BorderRadius.circular(3),child: Container(
color: Color(0xffE9E9E9),
width: 52,
height: 52,
alignment: Alignment.center,
child: Wrap(
crossAxisAlignment: WrapCrossAlignment.start, children: widgetList),
),),);
return RepaintBoundary(
key: key,
child: ClipRRect(
borderRadius: BorderRadius.circular(3),
child: Container(
color: Color(0xffE9E9E9),
width: 52,
height: 52,
alignment: Alignment.center,
child: Wrap(
crossAxisAlignment: WrapCrossAlignment.start,
children: widgetList),
),
),
);
} else { } else {
return ClipRRect(borderRadius: BorderRadius.circular(3),child: Container(color: Color(0xffE9E9E9),),);
return ClipRRect(
borderRadius: BorderRadius.circular(3),
child: Container(
color: Color(0xffE9E9E9),
),
);
} }
} }
} }

+ 1
- 1
lib/utils/msgHandler.dart 查看文件

@@ -421,7 +421,7 @@ class MsgHandler {
int sessionId = chat.targetId; int sessionId = chat.targetId;
msgModel = MsgModel(0, friendId, chat.cType.value, chat.contentBuff, msgModel = MsgModel(0, friendId, chat.cType.value, chat.contentBuff,
chat.sendTime.toInt(), sessionId, chat.sendTime.toInt(), sessionId,
channelType: ChatChannelType.Group.value);
channelType: ChatChannelType.Session.value);
//更新红包信息 //更新红包信息
ChatDataMgr() ChatDataMgr()


正在載入中…
取消
儲存