1.《黑名单:点取消屏蔽没有反应》 2.《关于拉黑:先拉黑,再发红包,提示的是拉黑了,但是红包的钱还是扣了》 3.《通讯录显示优化:没有好友时候,找徐丹设计个图 类似没有数据...》 4.《图片:选中取消后,图标还显示着选中状态》 注册,钱包等接口调试,部分越南语翻译修改master
@@ -1153,16 +1153,16 @@ | |||||
"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": "翻译券", | "daily_translate_voucher": "翻译券", | ||||
"msg_notice":"通知消息", | |||||
"select_notice_people":"选择提醒的人", | |||||
"search_phone":"查找手机号", | |||||
"not_have_user":"用户不存在", | |||||
"not_add_Myself":"你不能添加自己", | |||||
"you_are_blaklisted":"对方已拉黑了你", | |||||
"confrim_recovery":"确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)", | |||||
"msg_notice": "通知消息", | |||||
"select_notice_people": "选择提醒的人", | |||||
"search_phone": "查找手机号", | |||||
"not_have_user": "用户不存在", | |||||
"not_add_Myself": "你不能添加自己", | |||||
"you_are_blaklisted": "对方已拉黑了你", | |||||
"confrim_recovery": "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)", | |||||
"send_to": "發送到", | "send_to": "發送到", | ||||
"search_plach":"搜索位置", | |||||
"finding_place":"查找位置", | |||||
"search_plach": "搜索位置", | |||||
"finding_place": "查找位置", | |||||
"real_time_helper": "实时帮", | "real_time_helper": "实时帮", | ||||
"translation_butler": "翻译管家", | "translation_butler": "翻译管家", | ||||
"travel_butler": "出行管家", | "travel_butler": "出行管家", | ||||
@@ -1213,7 +1213,7 @@ | |||||
"translation_scenes_1": "机场/车站", | "translation_scenes_1": "机场/车站", | ||||
"translation_scenes_2": "餐厅/酒店", | "translation_scenes_2": "餐厅/酒店", | ||||
"translation_scenes_3": "KTV/酒吧", | "translation_scenes_3": "KTV/酒吧", | ||||
"translation_scenes_4": "其他" | |||||
"translation_scenes_4": "其他", | |||||
"file": "文件", | |||||
"max_file":"文件大于/s1M" | |||||
} | } |
@@ -1153,16 +1153,16 @@ | |||||
"enter_num_qian": "交換数量(单位K)", | "enter_num_qian": "交換数量(单位K)", | ||||
"enter_num_qian1": "引き出し数量(单位K)", | "enter_num_qian1": "引き出し数量(单位K)", | ||||
"daily_translate_voucher": "翻译券", | "daily_translate_voucher": "翻译券", | ||||
"msg_notice":"通知消息", | |||||
"select_notice_people":"选择提醒的人", | |||||
"search_phone":"查找手机号", | |||||
"not_have_user":"用户不存在", | |||||
"not_add_Myself":"你不能添加自己", | |||||
"you_are_blaklisted":"对方已拉黑了你", | |||||
"confrim_recovery":"确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)", | |||||
"msg_notice": "通知消息", | |||||
"select_notice_people": "选择提醒的人", | |||||
"search_phone": "查找手机号", | |||||
"not_have_user": "用户不存在", | |||||
"not_add_Myself": "你不能添加自己", | |||||
"you_are_blaklisted": "对方已拉黑了你", | |||||
"confrim_recovery": "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)", | |||||
"send_to": "發送到", | "send_to": "發送到", | ||||
"search_plach":"搜索位置", | |||||
"finding_place":"查找位置", | |||||
"search_plach": "搜索位置", | |||||
"finding_place": "查找位置", | |||||
"real_time_helper": "实时帮", | "real_time_helper": "实时帮", | ||||
"translation_butler": "翻译管家", | "translation_butler": "翻译管家", | ||||
"travel_butler": "出行管家", | "travel_butler": "出行管家", | ||||
@@ -1213,5 +1213,7 @@ | |||||
"translation_scenes_1": "机场/车站", | "translation_scenes_1": "机场/车站", | ||||
"translation_scenes_2": "餐厅/酒店", | "translation_scenes_2": "餐厅/酒店", | ||||
"translation_scenes_3": "KTV/酒吧", | "translation_scenes_3": "KTV/酒吧", | ||||
"translation_scenes_4": "其他" | |||||
"translation_scenes_4": "其他", | |||||
"file": "文件", | |||||
"max_file":"文件大于/s1M" | |||||
} | } |
@@ -1153,15 +1153,15 @@ | |||||
"enter_num_qian": "환전 금액(단위 K)", | "enter_num_qian": "환전 금액(단위 K)", | ||||
"enter_num_qian1": "인출 금액(단위K)", | "enter_num_qian1": "인출 금액(단위K)", | ||||
"daily_translate_voucher": "翻译券", | "daily_translate_voucher": "翻译券", | ||||
"msg_notice":"通知消息", | |||||
"select_notice_people":"选择提醒的人", | |||||
"search_phone":"查找手机号", | |||||
"not_have_user":"用户不存在", | |||||
"you_are_blaklisted":"对方已拉黑了你", | |||||
"confrim_recovery":"确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)", | |||||
"msg_notice": "通知消息", | |||||
"select_notice_people": "选择提醒的人", | |||||
"search_phone": "查找手机号", | |||||
"not_have_user": "用户不存在", | |||||
"you_are_blaklisted": "对方已拉黑了你", | |||||
"confrim_recovery": "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)", | |||||
"send_to": "發送到", | "send_to": "發送到", | ||||
"search_plach":"搜索位置", | |||||
"finding_place":"查找位置", | |||||
"search_plach": "搜索位置", | |||||
"finding_place": "查找位置", | |||||
"real_time_helper": "实时帮", | "real_time_helper": "实时帮", | ||||
"translation_butler": "翻译管家", | "translation_butler": "翻译管家", | ||||
"travel_butler": "出行管家", | "travel_butler": "出行管家", | ||||
@@ -1212,5 +1212,7 @@ | |||||
"translation_scenes_1": "机场/车站", | "translation_scenes_1": "机场/车站", | ||||
"translation_scenes_2": "餐厅/酒店", | "translation_scenes_2": "餐厅/酒店", | ||||
"translation_scenes_3": "KTV/酒吧", | "translation_scenes_3": "KTV/酒吧", | ||||
"translation_scenes_4": "其他" | |||||
"translation_scenes_4": "其他", | |||||
"file": "文件", | |||||
"max_file":"文件大于/s1M" | |||||
} | } |
@@ -278,7 +278,7 @@ | |||||
"select_program": "Vui lòng chọn quốc tịch", | "select_program": "Vui lòng chọn quốc tịch", | ||||
"healthy_exercise": "TDTT", | "healthy_exercise": "TDTT", | ||||
"night_party": "Tiệc đêm", | "night_party": "Tiệc đêm", | ||||
"gourmet_party": "Sành ăn", | |||||
"gourmet_party": "Tham ăn", | |||||
"watch_movie": "Xem phim", | "watch_movie": "Xem phim", | ||||
"play_games": "Chơi game", | "play_games": "Chơi game", | ||||
"travel_together": "Du lịch", | "travel_together": "Du lịch", | ||||
@@ -323,7 +323,7 @@ | |||||
"added_like": "Yêu thích", | "added_like": "Yêu thích", | ||||
"canceled_like": "Đã hủy yêu thích", | "canceled_like": "Đã hủy yêu thích", | ||||
"blacklist": "Danh sách đen", | "blacklist": "Danh sách đen", | ||||
"blacklist_choose": "Bạn sẽ không thể thấy đối phương và hoạt động gần đây của họ, có chắc là bạn muốn thế không?", | |||||
"blacklist_choose": "Các anh em sẽ không thể thấy được đối phương và hoạt động gần đây của đối phương, có chắc là bạn muốn thế không?", | |||||
"blacklisted": "Đã thêm vào danh sách đen", | "blacklisted": "Đã thêm vào danh sách đen", | ||||
"reject_message": "Bạn đã thêm đối Phương vào danh sách đen và từ chối nhận tin nhắn", | "reject_message": "Bạn đã thêm đối Phương vào danh sách đen và từ chối nhận tin nhắn", | ||||
"remove_blacklist": "Xóa khỏi danh sách đen", | "remove_blacklist": "Xóa khỏi danh sách đen", | ||||
@@ -410,7 +410,7 @@ | |||||
"enter_account": "Nhập số tài khoản mạng xã hội của bạn", | "enter_account": "Nhập số tài khoản mạng xã hội của bạn", | ||||
"for_example": "Tài khoản Wechat abc", | "for_example": "Tài khoản Wechat abc", | ||||
"sent_she": "Gửi cho em ấy", | "sent_she": "Gửi cho em ấy", | ||||
"chat": "Nối mic", | |||||
"chat": "Liên mic", | |||||
"cantt_voice": "Đối phương đã tắt chức năng trò chuyện trực tuyến", | "cantt_voice": "Đối phương đã tắt chức năng trò chuyện trực tuyến", | ||||
"authentication_voice": "Sau khi tính xác thực của bạn được chứng nhận, bạn mới có thể trò chuyện trực tuyến", | "authentication_voice": "Sau khi tính xác thực của bạn được chứng nhận, bạn mới có thể trò chuyện trực tuyến", | ||||
"requesting_voice": "Đang yêu cầu kết nối trò chuyện trực tuyến", | "requesting_voice": "Đang yêu cầu kết nối trò chuyện trực tuyến", | ||||
@@ -1213,5 +1213,7 @@ | |||||
"translation_scenes_1": "机场/车站", | "translation_scenes_1": "机场/车站", | ||||
"translation_scenes_2": "餐厅/酒店", | "translation_scenes_2": "餐厅/酒店", | ||||
"translation_scenes_3": "KTV/酒吧", | "translation_scenes_3": "KTV/酒吧", | ||||
"translation_scenes_4": "其他" | |||||
"translation_scenes_4": "其他", | |||||
"file": "文件", | |||||
"max_file":"文件大于/s1M" | |||||
} | } |
@@ -1146,23 +1146,23 @@ | |||||
"exchange_fail": "您的提款申請失敗,已退回", | "exchange_fail": "您的提款申請失敗,已退回", | ||||
"hibok_exchange": "通過Hibox收入兌換/s1H幣", | "hibok_exchange": "通過Hibox收入兌換/s1H幣", | ||||
"bind_code_success": "成功綁定代理優惠碼", | "bind_code_success": "成功綁定代理優惠碼", | ||||
"translate_money":"您消耗了/s1H幣進行人工翻譯", | |||||
"translate_money": "您消耗了/s1H幣進行人工翻譯", | |||||
"system_back": "系統取消退回", | "system_back": "系統取消退回", | ||||
"you_give": "你打賞了對方", | "you_give": "你打賞了對方", | ||||
"you_get":"對方打賞了你", | |||||
"enter_num_qian":"兑换数目(单位K)", | |||||
"enter_num_qian1":"提现数目(单位K)", | |||||
"you_get": "對方打賞了你", | |||||
"enter_num_qian": "兑换数目(单位K)", | |||||
"enter_num_qian1": "提现数目(单位K)", | |||||
"daily_translate_voucher": "翻譯券", | "daily_translate_voucher": "翻譯券", | ||||
"msg_notice":"通知消息", | |||||
"select_notice_people":"選擇提醒的人", | |||||
"search_phone":"查找手機號", | |||||
"not_have_user":"用戶不存在", | |||||
"not_add_Myself":"你不能添加自己", | |||||
"you_are_blaklisted":"對方已拉黑了你", | |||||
"confrim_recovery":"確定恢復已被焚毀的照片嗎?\n(已經看過的用戶可以再看一次)", | |||||
"msg_notice": "通知消息", | |||||
"select_notice_people": "選擇提醒的人", | |||||
"search_phone": "查找手機號", | |||||
"not_have_user": "用戶不存在", | |||||
"not_add_Myself": "你不能添加自己", | |||||
"you_are_blaklisted": "對方已拉黑了你", | |||||
"confrim_recovery": "確定恢復已被焚毀的照片嗎?\n(已經看過的用戶可以再看一次)", | |||||
"send_to": "發送到", | "send_to": "發送到", | ||||
"search_plach":"搜索位置", | |||||
"finding_place":"查找位置", | |||||
"search_plach": "搜索位置", | |||||
"finding_place": "查找位置", | |||||
"real_time_helper": "實時幫", | "real_time_helper": "實時幫", | ||||
"translation_butler": "翻譯管家", | "translation_butler": "翻譯管家", | ||||
"travel_butler": "出行管家", | "travel_butler": "出行管家", | ||||
@@ -1213,6 +1213,7 @@ | |||||
"translation_scenes_1": "机场/车站", | "translation_scenes_1": "机场/车站", | ||||
"translation_scenes_2": "餐厅/酒店", | "translation_scenes_2": "餐厅/酒店", | ||||
"translation_scenes_3": "KTV/酒吧", | "translation_scenes_3": "KTV/酒吧", | ||||
"translation_scenes_4": "其他" | |||||
"translation_scenes_4": "其他", | |||||
"file": "文件", | |||||
"max_file":"文件大於/s1M" | |||||
} | } |
@@ -6,6 +6,7 @@ import 'package:chat/data/UserData.dart'; | |||||
import 'package:chat/data/chat_data_mgr.dart'; | import 'package:chat/data/chat_data_mgr.dart'; | ||||
import 'package:chat/data/constants.dart'; | import 'package:chat/data/constants.dart'; | ||||
import 'package:chat/generated/i18n.dart'; | import 'package:chat/generated/i18n.dart'; | ||||
import 'package:chat/home/add_friend.dart'; | |||||
import 'package:chat/models/ChatMsg.dart'; | import 'package:chat/models/ChatMsg.dart'; | ||||
import 'package:chat/models/UserInfo.dart'; | import 'package:chat/models/UserInfo.dart'; | ||||
import 'package:chat/models/keyboard_provider.dart'; | import 'package:chat/models/keyboard_provider.dart'; | ||||
@@ -45,7 +46,12 @@ class ChatPage extends StatefulWidget { | |||||
final dynamic enterContent; | final dynamic enterContent; | ||||
final bool isTranslateButler; | final bool isTranslateButler; | ||||
ChatPage({Key key, this.friendId, this.enterType = 0, this.enterContent,this.isTranslateButler=false}) | |||||
ChatPage( | |||||
{Key key, | |||||
this.friendId, | |||||
this.enterType = 0, | |||||
this.enterContent, | |||||
this.isTranslateButler = false}) | |||||
: super(key: key); | : super(key: key); | ||||
_ChatPageState createState() => _ChatPageState(); | _ChatPageState createState() => _ChatPageState(); | ||||
@@ -108,7 +114,7 @@ class _ChatPageState extends State<ChatPage> { | |||||
print('选择的文件 ${file.path} 大小 $fileSize'); | print('选择的文件 ${file.path} 大小 $fileSize'); | ||||
if (fileSize > 33 * 1024 * 1024) { | if (fileSize > 33 * 1024 * 1024) { | ||||
showToast('文件大于33M'); | |||||
showToast(I18n.of(context).max_file.replaceFirst('/s1', 33.toString())); | |||||
return; | return; | ||||
} | } | ||||
@@ -261,62 +267,17 @@ class _ChatPageState extends State<ChatPage> { | |||||
AppNavigator.pushInformUserPage( | AppNavigator.pushInformUserPage( | ||||
context, friendInfo.sex == 1, friendInfo.userId); | context, friendInfo.sex == 1, friendInfo.userId); | ||||
} else if (index == 1) { | } else if (index == 1) { | ||||
nickNameController.text = Provider.of<RefNameProvider>(context) | |||||
.getRefName(friendInfo.userId, friendInfo.nickName); | |||||
var confirm = CustomUI.buildConfirmBotton( | |||||
I18n.of(context).determine, () async { | |||||
nickNameController.text = nickNameController.text.trim(); | |||||
if (nickNameController.text == null || | |||||
nickNameController.text.length > 25) { | |||||
showToast(I18n.of(context).only1_8); | |||||
return; | |||||
} | |||||
Provider.of<RefNameProvider>(context).changeRefName( | |||||
friendInfo.userId, nickNameController.text, () { | |||||
Navigator.of(context).pop(); | |||||
}); | |||||
}); | |||||
var tip = Column( | |||||
children: <Widget>[ | |||||
Container( | |||||
margin: EdgeInsets.only(top: 20), | |||||
child: Text( | |||||
I18n.of(context).setRemark, | |||||
textScaleFactor: 1.0, | |||||
style: TextStyle( | |||||
color: Constants.BlackTextColor, fontSize: 16), | |||||
), | |||||
), | |||||
Container( | |||||
margin: EdgeInsets.only(top: 23, bottom: 25), | |||||
decoration: BoxDecoration( | |||||
color: Colors.grey[200], | |||||
borderRadius: BorderRadius.all(Radius.circular(8))), | |||||
child: TextField( | |||||
keyboardAppearance: Brightness.light, | |||||
controller: nickNameController, | |||||
textAlign: TextAlign.center, | |||||
textInputAction: TextInputAction.search, | |||||
style: TextStyle( | |||||
textBaseline: TextBaseline.alphabetic, | |||||
fontSize: 14), | |||||
decoration: InputDecoration( | |||||
hintText: friendInfo.nickName, | |||||
hintStyle: TextStyle(fontSize: 12), | |||||
filled: true, | |||||
contentPadding: EdgeInsets.only(top: 10, bottom: 10), | |||||
fillColor: Colors.transparent, | |||||
border: InputBorder.none, | |||||
), | |||||
maxLines: 1, | |||||
inputFormatters: [LengthLimitingTextInputFormatter(15)], | |||||
), | |||||
) | |||||
], | |||||
Navigator.of(context).push( | |||||
new MaterialPageRoute( | |||||
builder: (context) { | |||||
return AddFriendPage( | |||||
userId: friendInfo.userId, | |||||
pageType: SendMessagePageType.Remark, | |||||
originalName: Provider.of<RefNameProvider>(context) | |||||
.getRefName(friendInfo.userId, friendInfo.nickName)); | |||||
}, | |||||
), | |||||
); | ); | ||||
var content = CustomUI.buildConfirmContent(tip, confirm); | |||||
CustomUI.buildTip(context, '', content); | |||||
} | } | ||||
}, | }, | ||||
itemBuilder: (BuildContext context) { | itemBuilder: (BuildContext context) { | ||||
@@ -387,9 +348,15 @@ class _ChatPageState extends State<ChatPage> { | |||||
child: Column( | child: Column( | ||||
children: <Widget>[ | children: <Widget>[ | ||||
NetStateWidget(), | NetStateWidget(), | ||||
widget.isTranslateButler?_buildTranslationButler():Container(), | |||||
widget.isTranslateButler? _buildServiceCard(true,(){}):Container(), | |||||
widget.isTranslateButler? _buildServiceCard(false,(){}):Container(), | |||||
widget.isTranslateButler | |||||
? _buildTranslationButler() | |||||
: Container(), | |||||
widget.isTranslateButler | |||||
? _buildServiceCard(true, () {}) | |||||
: Container(), | |||||
widget.isTranslateButler | |||||
? _buildServiceCard(false, () {}) | |||||
: Container(), | |||||
Expanded(child: _buildMessageList()), | Expanded(child: _buildMessageList()), | ||||
InputBar(sendMsg: sendMsg), | InputBar(sendMsg: sendMsg), | ||||
], | ], | ||||
@@ -479,7 +446,7 @@ class _ChatPageState extends State<ChatPage> { | |||||
}, | }, | ||||
countDownTime: 60, | countDownTime: 60, | ||||
align: Alignment.centerRight, | align: Alignment.centerRight, | ||||
onPress: (){}, | |||||
onPress: () {}, | |||||
), | ), | ||||
// alignment: Alignment(1,0), | // alignment: Alignment(1,0), | ||||
)), | )), | ||||
@@ -488,7 +455,6 @@ class _ChatPageState extends State<ChatPage> { | |||||
); | ); | ||||
} | } | ||||
Widget _buildServiceCard(bool isStart, Function callBack) { | Widget _buildServiceCard(bool isStart, Function callBack) { | ||||
return Container( | return Container( | ||||
margin: EdgeInsets.all(10), | margin: EdgeInsets.all(10), | ||||
@@ -499,44 +465,54 @@ class _ChatPageState extends State<ChatPage> { | |||||
borderRadius: BorderRadius.circular(10), | borderRadius: BorderRadius.circular(10), | ||||
// side: BorderSide(color: Colors.green,width: 25), | // side: BorderSide(color: Colors.green,width: 25), | ||||
), | ), | ||||
child: Padding(padding: EdgeInsets.only(left: 10,right: 10,top: 15,bottom: 15),child: Row( | |||||
children: <Widget>[ | |||||
Column( | |||||
crossAxisAlignment: CrossAxisAlignment.start, | |||||
children: <Widget>[ | |||||
Text( | |||||
isStart?I18n.of(context).translation_butler_start_service:I18n.of(context).translation_butler_service_end, | |||||
textScaleFactor: 1.0, | |||||
style: TextStyle( | |||||
color: AppColors.NewAppbarTextColor, fontSize: 15), | |||||
), | |||||
Text( | |||||
isStart?I18n.of(context).translation_butler_start_tips:I18n.of(context).translation_butler_evaluation_tips, | |||||
textScaleFactor: 1.0, | |||||
style: TextStyle( | |||||
color: AppColors.NewAppbarTextColor, fontSize: 13), | |||||
) | |||||
], | |||||
), | |||||
isStart?Container():Expanded(child: Container( | |||||
margin: EdgeInsets.only(left: 15 ), | |||||
height: 30, | |||||
child: RaisedButton( | |||||
color: Color(0xff3875E9), | |||||
shape: RoundedRectangleBorder( | |||||
borderRadius: BorderRadius.all(Radius.circular(10))), | |||||
child: Text( | |||||
I18n.of(context).translation_butler_evaluation , | |||||
child: Padding( | |||||
padding: EdgeInsets.only(left: 10, right: 10, top: 15, bottom: 15), | |||||
child: Row( | |||||
children: <Widget>[ | |||||
Column( | |||||
crossAxisAlignment: CrossAxisAlignment.start, | |||||
children: <Widget>[ | |||||
Text( | |||||
isStart | |||||
? I18n.of(context).translation_butler_start_service | |||||
: I18n.of(context).translation_butler_service_end, | |||||
textScaleFactor: 1.0, | textScaleFactor: 1.0, | ||||
style: TextStyle(color: Colors.white, fontSize: 19), | |||||
style: TextStyle( | |||||
color: AppColors.NewAppbarTextColor, fontSize: 15), | |||||
), | ), | ||||
onPressed:(){ | |||||
CustomUI.buildTranslationEvaluationDialog(context); | |||||
} ), | |||||
)), | |||||
], | |||||
),), | |||||
Text( | |||||
isStart | |||||
? I18n.of(context).translation_butler_start_tips | |||||
: I18n.of(context).translation_butler_evaluation_tips, | |||||
textScaleFactor: 1.0, | |||||
style: TextStyle( | |||||
color: AppColors.NewAppbarTextColor, fontSize: 13), | |||||
) | |||||
], | |||||
), | |||||
isStart | |||||
? Container() | |||||
: Expanded( | |||||
child: Container( | |||||
margin: EdgeInsets.only(left: 15), | |||||
height: 30, | |||||
child: RaisedButton( | |||||
color: Color(0xff3875E9), | |||||
shape: RoundedRectangleBorder( | |||||
borderRadius: | |||||
BorderRadius.all(Radius.circular(10))), | |||||
child: Text( | |||||
I18n.of(context).translation_butler_evaluation, | |||||
textScaleFactor: 1.0, | |||||
style: TextStyle(color: Colors.white, fontSize: 19), | |||||
), | |||||
onPressed: () { | |||||
CustomUI.buildTranslationEvaluationDialog(context); | |||||
}), | |||||
)), | |||||
], | |||||
), | |||||
), | |||||
), | ), | ||||
); | ); | ||||
} | } | ||||
@@ -209,7 +209,7 @@ class InputBarState extends State<InputBar> | |||||
break; | break; | ||||
case ChatType.FileChatType: | case ChatType.FileChatType: | ||||
desc = '[文件]'; | |||||
desc = '[${I18n.of(context).file}]'; | |||||
break; | break; | ||||
default: | default: | ||||
@@ -682,8 +682,8 @@ class InputBarState extends State<InputBar> | |||||
} | } | ||||
void _openPhotoView() async { | void _openPhotoView() async { | ||||
Provider.of<KeyboardIndexProvider>(context, listen: false) | |||||
.changeSelectIndex(4); | |||||
// Provider.of<KeyboardIndexProvider>(context, listen: false) | |||||
// .changeSelectIndex(4); | |||||
var photos = await PhotoPicker.pickAsset( | var photos = await PhotoPicker.pickAsset( | ||||
context: context, | context: context, | ||||
@@ -79,6 +79,10 @@ class _UtilKeyboardState extends State<UtilKeyboard> { | |||||
offstage: !isShowRedPacket, | offstage: !isShowRedPacket, | ||||
child: _buildOtherSelect( | child: _buildOtherSelect( | ||||
R.assetsImagesChatItem5, I18n.of(context).red_money, () { | R.assetsImagesChatItem5, I18n.of(context).red_money, () { | ||||
int friendId = Provider.of<int>(context); | |||||
if (BlacklistMgr.isBlack(friendId)) { | |||||
return; | |||||
} | |||||
AppNavigator.pushCoinBagPage(context); | AppNavigator.pushCoinBagPage(context); | ||||
}))); | }))); | ||||
@@ -88,7 +92,8 @@ class _UtilKeyboardState extends State<UtilKeyboard> { | |||||
})); | })); | ||||
} | } | ||||
iconList.add(_buildOtherSelect(R.assetsImagesChatItem7, '文件', () async { | |||||
iconList.add(_buildOtherSelect( | |||||
R.assetsImagesChatItem7, I18n.of(context).file, () async { | |||||
_sendFile(context); | _sendFile(context); | ||||
})); | })); | ||||
@@ -303,7 +308,7 @@ class _UtilKeyboardState extends State<UtilKeyboard> { | |||||
print('选择的文件 ${file.path} 大小 $fileSize'); | print('选择的文件 ${file.path} 大小 $fileSize'); | ||||
if (fileSize > 33 * 1024 * 1024) { | if (fileSize > 33 * 1024 * 1024) { | ||||
showToast('文件大于33M'); | |||||
showToast(I18n.of(context).max_file.replaceFirst('/s1', 33.toString())); | |||||
return; | return; | ||||
} | } | ||||
@@ -2463,6 +2463,10 @@ class I18n implements WidgetsLocalizations { | |||||
String get translation_scenes_3 => "KTV/酒吧"; | String get translation_scenes_3 => "KTV/酒吧"; | ||||
/// "其他" | /// "其他" | ||||
String get translation_scenes_4 => "其他"; | String get translation_scenes_4 => "其他"; | ||||
/// "文件" | |||||
String get file => "文件"; | |||||
/// "文件大于/s1M" | |||||
String get max_file => "文件大于/s1M"; | |||||
} | } | ||||
class _I18n_en_US extends I18n { | class _I18n_en_US extends I18n { | ||||
@@ -3312,9 +3316,9 @@ class _I18n_vi_VN extends I18n { | |||||
/// "Tiệc đêm" | /// "Tiệc đêm" | ||||
@override | @override | ||||
String get night_party => "Tiệc đêm"; | String get night_party => "Tiệc đêm"; | ||||
/// "Sành ăn" | |||||
/// "Tham ăn" | |||||
@override | @override | ||||
String get gourmet_party => "Sành ăn"; | |||||
String get gourmet_party => "Tham ăn"; | |||||
/// "Xem phim" | /// "Xem phim" | ||||
@override | @override | ||||
String get watch_movie => "Xem phim"; | String get watch_movie => "Xem phim"; | ||||
@@ -3447,9 +3451,9 @@ class _I18n_vi_VN extends I18n { | |||||
/// "Danh sách đen" | /// "Danh sách đen" | ||||
@override | @override | ||||
String get blacklist => "Danh sách đen"; | String get blacklist => "Danh sách đen"; | ||||
/// "Bạn sẽ không thể thấy đối phương và hoạt động gần đây của họ, có chắc là bạn muốn thế không?" | |||||
/// "Các anh em sẽ không thể thấy được đối phương và hoạt động gần đây của đối phương, có chắc là bạn muốn thế không?" | |||||
@override | @override | ||||
String get blacklist_choose => "Bạn sẽ không thể thấy đối phương và hoạt động gần đây của họ, có chắc là bạn muốn thế không?"; | |||||
String get blacklist_choose => "Các anh em sẽ không thể thấy được đối phương và hoạt động gần đây của đối phương, có chắc là bạn muốn thế không?"; | |||||
/// "Đã thêm vào danh sách đen" | /// "Đã thêm vào danh sách đen" | ||||
@override | @override | ||||
String get blacklisted => "Đã thêm vào danh sách đen"; | String get blacklisted => "Đã thêm vào danh sách đen"; | ||||
@@ -3708,9 +3712,9 @@ class _I18n_vi_VN extends I18n { | |||||
/// "Gửi cho em ấy" | /// "Gửi cho em ấy" | ||||
@override | @override | ||||
String get sent_she => "Gửi cho em ấy"; | String get sent_she => "Gửi cho em ấy"; | ||||
/// "Nối mic" | |||||
/// "Liên mic" | |||||
@override | @override | ||||
String get chat => "Nối mic"; | |||||
String get chat => "Liên mic"; | |||||
/// "Đối phương đã tắt chức năng trò chuyện trực tuyến" | /// "Đối phương đã tắt chức năng trò chuyện trực tuyến" | ||||
@override | @override | ||||
String get cantt_voice => "Đối phương đã tắt chức năng trò chuyện trực tuyến"; | String get cantt_voice => "Đối phương đã tắt chức năng trò chuyện trực tuyến"; | ||||
@@ -6120,6 +6124,12 @@ class _I18n_vi_VN extends I18n { | |||||
/// "其他" | /// "其他" | ||||
@override | @override | ||||
String get translation_scenes_4 => "其他"; | String get translation_scenes_4 => "其他"; | ||||
/// "文件" | |||||
@override | |||||
String get file => "文件"; | |||||
/// "文件大于/s1M" | |||||
@override | |||||
String get max_file => "文件大于/s1M"; | |||||
@override | @override | ||||
TextDirection get textDirection => TextDirection.ltr; | TextDirection get textDirection => TextDirection.ltr; | ||||
@@ -9773,6 +9783,12 @@ class _I18n_zh_HK extends I18n { | |||||
/// "其他" | /// "其他" | ||||
@override | @override | ||||
String get translation_scenes_4 => "其他"; | String get translation_scenes_4 => "其他"; | ||||
/// "文件" | |||||
@override | |||||
String get file => "文件"; | |||||
/// "文件大於/s1M" | |||||
@override | |||||
String get max_file => "文件大於/s1M"; | |||||
@override | @override | ||||
TextDirection get textDirection => TextDirection.ltr; | TextDirection get textDirection => TextDirection.ltr; | ||||
@@ -13426,6 +13442,12 @@ class _I18n_zh_CN extends _I18n_zh_HK { | |||||
/// "其他" | /// "其他" | ||||
@override | @override | ||||
String get translation_scenes_4 => "其他"; | String get translation_scenes_4 => "其他"; | ||||
/// "文件" | |||||
@override | |||||
String get file => "文件"; | |||||
/// "文件大于/s1M" | |||||
@override | |||||
String get max_file => "文件大于/s1M"; | |||||
@override | @override | ||||
TextDirection get textDirection => TextDirection.ltr; | TextDirection get textDirection => TextDirection.ltr; | ||||
@@ -17076,6 +17098,12 @@ class _I18n_ko_KR extends I18n { | |||||
/// "其他" | /// "其他" | ||||
@override | @override | ||||
String get translation_scenes_4 => "其他"; | String get translation_scenes_4 => "其他"; | ||||
/// "文件" | |||||
@override | |||||
String get file => "文件"; | |||||
/// "文件大于/s1M" | |||||
@override | |||||
String get max_file => "文件大于/s1M"; | |||||
@override | @override | ||||
TextDirection get textDirection => TextDirection.ltr; | TextDirection get textDirection => TextDirection.ltr; | ||||
@@ -20729,6 +20757,12 @@ class _I18n_ja_JP extends I18n { | |||||
/// "其他" | /// "其他" | ||||
@override | @override | ||||
String get translation_scenes_4 => "其他"; | String get translation_scenes_4 => "其他"; | ||||
/// "文件" | |||||
@override | |||||
String get file => "文件"; | |||||
/// "文件大于/s1M" | |||||
@override | |||||
String get max_file => "文件大于/s1M"; | |||||
@override | @override | ||||
TextDirection get textDirection => TextDirection.ltr; | TextDirection get textDirection => TextDirection.ltr; | ||||
@@ -405,7 +405,7 @@ class _ConversActionPageState extends State<ConversActionPage> | |||||
avatar: 'assets/images/ic_tx_news.png', | avatar: 'assets/images/ic_tx_news.png', | ||||
title: I18n.of(context).wallet_reminder, | title: I18n.of(context).wallet_reminder, | ||||
desc: RichTitle.normalTitle( | desc: RichTitle.normalTitle( | ||||
systemInfo['walletList'], context, InfoType.Money), | |||||
systemInfo['walletList'], context, InfoType.IncomeMoney), | |||||
updateAt: systemInfo['walletList'] == null | updateAt: systemInfo['walletList'] == null | ||||
? "" | ? "" | ||||
: WebData().getLoginTime( | : WebData().getLoginTime( | ||||
@@ -419,7 +419,7 @@ class _ConversActionPageState extends State<ConversActionPage> | |||||
builder: (context) { | builder: (context) { | ||||
return InfoListPage( | return InfoListPage( | ||||
title: I18n.of(context).wallet_reminder, | title: I18n.of(context).wallet_reminder, | ||||
type: InfoType.Money, | |||||
type: InfoType.IncomeMoney, | |||||
); | ); | ||||
}, | }, | ||||
), | ), | ||||
@@ -24,7 +24,6 @@ import 'package:cached_network_image/cached_network_image.dart'; | |||||
import 'ProgramDetail.dart'; | import 'ProgramDetail.dart'; | ||||
class _ConversationItem extends StatelessWidget { | class _ConversationItem extends StatelessWidget { | ||||
const _ConversationItem( | const _ConversationItem( | ||||
{Key key, | {Key key, | ||||
@@ -432,8 +431,8 @@ class _InfoListPageState extends State<InfoListPage> | |||||
case InfoType.Radio: //获取电台消息 | case InfoType.Radio: //获取电台消息 | ||||
getData('message/center/cast', callback); | getData('message/center/cast', callback); | ||||
break; | break; | ||||
case InfoType.Money: //获取钱包通知 | |||||
getData('message/wallet/message', callback); | |||||
case InfoType.IncomeMoney: //获取钱包通知 | |||||
getData('wallet/balance/detail', callback); | |||||
break; | break; | ||||
default: | default: | ||||
} | } | ||||
@@ -446,10 +445,10 @@ class _InfoListPageState extends State<InfoListPage> | |||||
if (widget.type == InfoType.System) { | if (widget.type == InfoType.System) { | ||||
data['type'] = UserData().basicInfo.sex; | data['type'] = UserData().basicInfo.sex; | ||||
} | } | ||||
data['sign'] = TokenMgr().getSign(data); | |||||
if (widget.type == InfoType.Money) { | |||||
data['type'] = 1; | |||||
if (widget.type == InfoType.IncomeMoney) { | |||||
data['type'] = 2; | |||||
} | } | ||||
data['sign'] = TokenMgr().getSign(data); | |||||
data["page"] = _page; | data["page"] = _page; | ||||
data['rows'] = rows; | data['rows'] = rows; | ||||
Response res = await HttpUtil() | Response res = await HttpUtil() | ||||
@@ -481,11 +480,12 @@ class _InfoListPageState extends State<InfoListPage> | |||||
//钱包通知 | //钱包通知 | ||||
Widget _buildMoneyInfo(data) { | Widget _buildMoneyInfo(data) { | ||||
String imgUrl = data['HeadImg'] == null || data['HeadImg'] == '' | |||||
? 'assets/images/chat/icon4.png' | |||||
String imgUrl = data['HeadImg'] == null || | |||||
data['HeadImg'] == '' || | |||||
data['ChangeUserId'] == 0 | |||||
? UserData().basicInfo.headimgurl | |||||
: data['HeadImg']; | : data['HeadImg']; | ||||
bool showIndex = data['ChangeUserId'] != 0; | |||||
return _ConversationItem( | return _ConversationItem( | ||||
conversation: Conversation( | conversation: Conversation( | ||||
avatar: imgUrl, | avatar: imgUrl, | ||||
@@ -494,27 +494,30 @@ class _InfoListPageState extends State<InfoListPage> | |||||
updateAt: '', | updateAt: '', | ||||
), | ), | ||||
bgColor: Constants.MoneyGradient, | bgColor: Constants.MoneyGradient, | ||||
showRight: data['DetailType'] == 10, | |||||
title: RichTitle.getRichTitleWidget(data, context, InfoType.Money), | |||||
rightButton: Text(I18n.of(context).alreay_back, | |||||
style: TextStyle( | |||||
fontSize: 12, | |||||
showRight: false, | |||||
// isInCome: widget.type == 2, | |||||
// money: isAdd(data['DetailType']) ? data['Value'] : -data['Value'], | |||||
title: RichTitle.getRichTitleWidget(data, context, | |||||
widget.type == 1 ? InfoType.MyMoney : InfoType.IncomeMoney, | |||||
titleStyle: TextStyle(fontSize: 12, color: const Color(0XFF7F7F7F)), | |||||
nameStyle: TextStyle( | |||||
fontWeight: FontWeight.normal, | fontWeight: FontWeight.normal, | ||||
fontSize: 13, | |||||
color: Constants.BlackTextColor)), | color: Constants.BlackTextColor)), | ||||
callback: () { | callback: () { | ||||
if (showIndex) { | |||||
Navigator.of(context).push( | |||||
new MaterialPageRoute( | |||||
builder: (context) { | |||||
return ProfilePage( | |||||
userId: data['UserId'] == UserData().basicInfo.userId | |||||
? data['ChangeUserId'] | |||||
: data['UserId'], | |||||
); | |||||
}, | |||||
), | |||||
); | |||||
} | |||||
// if (data['ChangeUserId'] != 0) { | |||||
// Navigator.of(context).push( | |||||
// new MaterialPageRoute( | |||||
// builder: (context) { | |||||
// return ProfilePage( | |||||
// userId: data['UserId'] == UserData().basicInfo.userId | |||||
// ? data['ChangeUserId'] | |||||
// : data['UserId'], | |||||
// ); | |||||
// }, | |||||
// ), | |||||
// ); | |||||
// } | |||||
}, | }, | ||||
); | ); | ||||
} | } | ||||
@@ -753,7 +756,7 @@ class _InfoListPageState extends State<InfoListPage> | |||||
case InfoType.Radio: | case InfoType.Radio: | ||||
result = _buildRadioInfo(userInfo); | result = _buildRadioInfo(userInfo); | ||||
break; | break; | ||||
case InfoType.Money: | |||||
case InfoType.IncomeMoney: | |||||
result = _buildMoneyInfo(userInfo); | result = _buildMoneyInfo(userInfo); | ||||
break; | break; | ||||
default: | default: | ||||
@@ -164,7 +164,7 @@ class _WhiteAndBlackPageState extends State<WhiteAndBlackPage> { | |||||
Expanded(child: Container()), | Expanded(child: Container()), | ||||
InkWell( | InkWell( | ||||
onTap: () async { | onTap: () async { | ||||
HttpUtil().cancleBlackUser(userInfo.userId, () { | |||||
HttpUtil().cancleBlackUser(userInfo['FollowUserId'], () { | |||||
for (int i = 0; i < list.length; i++) { | for (int i = 0; i < list.length; i++) { | ||||
if (list[i]['FollowUserId'] == userInfo['FollowUserId']) { | if (list[i]['FollowUserId'] == userInfo['FollowUserId']) { | ||||
setState(() { | setState(() { | ||||
@@ -189,6 +189,7 @@ class _ContactsPageState extends State<ContactsPage> { | |||||
TextEditingController _txtCtrl = new TextEditingController(); | TextEditingController _txtCtrl = new TextEditingController(); | ||||
FocusNode editFocus = FocusNode(); | FocusNode editFocus = FocusNode(); | ||||
bool _hasdeleteIcon = false; | bool _hasdeleteIcon = false; | ||||
bool isLoadingFinish = false; | |||||
List<FriendModel> searchList = []; | List<FriendModel> searchList = []; | ||||
@@ -222,6 +223,7 @@ class _ContactsPageState extends State<ContactsPage> { | |||||
Response res = await HttpUtil().post('maillist/user/get', data: data); | Response res = await HttpUtil().post('maillist/user/get', data: data); | ||||
Map resData = res.data; | Map resData = res.data; | ||||
isLoadingFinish = true; | |||||
print(resData['data']); | print(resData['data']); | ||||
if (resData['code'] == 0 && resData['data'] != null) { | if (resData['code'] == 0 && resData['data'] != null) { | ||||
resData['data'].forEach((f) { | resData['data'].forEach((f) { | ||||
@@ -247,28 +249,30 @@ class _ContactsPageState extends State<ContactsPage> { | |||||
if (!_hasdeleteIcon) { | if (!_hasdeleteIcon) { | ||||
friendList.sort((a, b) => a.nameTag.compareTo(b.nameTag)); | friendList.sort((a, b) => a.nameTag.compareTo(b.nameTag)); | ||||
_body.add(ListView.builder( | |||||
controller: _scrollController, | |||||
itemBuilder: (BuildContext context, int index) { | |||||
int _contactIndex = index; | |||||
bool _isGroupTitle = true; | |||||
FriendModel _contact = friendList[_contactIndex]; | |||||
_body.add((friendList == null || friendList.length == 0) | |||||
? CustomUI.buildNoData(context) | |||||
: ListView.builder( | |||||
controller: _scrollController, | |||||
itemBuilder: (BuildContext context, int index) { | |||||
int _contactIndex = index; | |||||
bool _isGroupTitle = true; | |||||
FriendModel _contact = friendList[_contactIndex]; | |||||
if (_contactIndex >= 1 && | |||||
_contact.nameTag == friendList[_contactIndex - 1].nameTag) { | |||||
_isGroupTitle = false; | |||||
} | |||||
if (_contactIndex >= 1 && | |||||
_contact.nameTag == friendList[_contactIndex - 1].nameTag) { | |||||
_isGroupTitle = false; | |||||
} | |||||
return _ContactItem( | |||||
userId: _contact.friendId, | |||||
avatar: _contact.avatar, | |||||
title: _contact.name, | |||||
state: _contact.state, | |||||
isShowDivder: _isGroupTitle, | |||||
groupTitle: _isGroupTitle ? _contact.nameTag : null); | |||||
}, | |||||
itemCount: friendList.length, | |||||
)); | |||||
return _ContactItem( | |||||
userId: _contact.friendId, | |||||
avatar: _contact.avatar, | |||||
title: _contact.name, | |||||
state: _contact.state, | |||||
isShowDivder: _isGroupTitle, | |||||
groupTitle: _isGroupTitle ? _contact.nameTag : null); | |||||
}, | |||||
itemCount: friendList.length, | |||||
)); | |||||
} else { | } else { | ||||
_body.add(ListView.builder( | _body.add(ListView.builder( | ||||
controller: _scrollController, | controller: _scrollController, | ||||
@@ -329,7 +333,7 @@ class _ContactsPageState extends State<ContactsPage> { | |||||
color: const Color(0xFFEEEEEE), | color: const Color(0xFFEEEEEE), | ||||
borderRadius: BorderRadius.all(Radius.circular(8))), | borderRadius: BorderRadius.all(Radius.circular(8))), | ||||
child: TextField( | child: TextField( | ||||
keyboardAppearance: Brightness.light, | |||||
keyboardAppearance: Brightness.light, | |||||
keyboardType: TextInputType.text, | keyboardType: TextInputType.text, | ||||
textInputAction: TextInputAction.search, | textInputAction: TextInputAction.search, | ||||
controller: _txtCtrl, | controller: _txtCtrl, | ||||
@@ -22,6 +22,11 @@ Widget _createAvatar(avatar) { | |||||
borderRadius: BorderRadius.circular(6), | borderRadius: BorderRadius.circular(6), | ||||
child: CachedNetworkImage( | child: CachedNetworkImage( | ||||
imageUrl: avatar, | imageUrl: avatar, | ||||
placeholder: (context, url) => Image.asset( | |||||
Constants.DefaultHeadImgUrl, | |||||
width: Constants.ContactAvatarSize, | |||||
height: Constants.ContactAvatarSize, | |||||
), | |||||
width: Constants.ContactAvatarSize, | width: Constants.ContactAvatarSize, | ||||
height: Constants.ContactAvatarSize, | height: Constants.ContactAvatarSize, | ||||
)); | )); | ||||
@@ -151,7 +151,7 @@ class _LastMsgDescriptionState extends State<LastMsgDescription> { | |||||
break; | break; | ||||
case ChatType.FileChatType: | case ChatType.FileChatType: | ||||
desc = '[文件]'; | |||||
desc = '[${I18n.of(context).file}]'; | |||||
break; | break; | ||||
default: | default: | ||||
} | } | ||||