diff --git a/assets/images/ic_memory_card.png b/assets/images/ic_memory_card.png new file mode 100644 index 0000000..78f03c3 Binary files /dev/null and b/assets/images/ic_memory_card.png differ diff --git a/lib/beans/invite_new_bean.dart b/lib/beans/invite_new_bean.dart new file mode 100644 index 0000000..36bd1b3 --- /dev/null +++ b/lib/beans/invite_new_bean.dart @@ -0,0 +1,17 @@ +import 'package:json_annotation/json_annotation.dart'; + +part 'invite_new_bean.g.dart'; + +///标签 +@JsonSerializable(explicitToJson: true) +class InviteNewBean { + String? imgUrl; + int? type; + + + InviteNewBean(this.imgUrl, this.type); + + factory InviteNewBean.fromJson(Map json) => _$InviteNewBeanFromJson(json); + + Map toJson() => _$InviteNewBeanToJson(this); +} diff --git a/lib/beans/invite_new_bean.g.dart b/lib/beans/invite_new_bean.g.dart new file mode 100644 index 0000000..0de5db8 --- /dev/null +++ b/lib/beans/invite_new_bean.g.dart @@ -0,0 +1,19 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'invite_new_bean.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +InviteNewBean _$InviteNewBeanFromJson(Map json) => + InviteNewBean( + json['imgUrl'] as String?, + (json['type'] as num?)?.toInt(), + ); + +Map _$InviteNewBeanToJson(InviteNewBean instance) => + { + 'imgUrl': instance.imgUrl, + 'type': instance.type, + }; diff --git a/lib/beans/user_info_bean.dart b/lib/beans/user_info_bean.dart index 933c14f..c5aa76d 100644 --- a/lib/beans/user_info_bean.dart +++ b/lib/beans/user_info_bean.dart @@ -1,5 +1,6 @@ import 'package:json_annotation/json_annotation.dart'; +import 'invite_new_bean.dart'; import 'me_character_info_bean.dart'; part 'user_info_bean.g.dart'; @@ -14,6 +15,9 @@ class UserInfoBean { int? remainingChatCount; List? characterInfo; int? memoryCardCount; + InviteNewBean? inviteNewUser; + int? hasTalked; + int? photographs; UserInfoBean(this.currency, this.userIconUrl, this.userId, this.nickName, this.remainingChatCount, this.characterInfo, this.memoryCardCount); diff --git a/lib/beans/user_info_bean.g.dart b/lib/beans/user_info_bean.g.dart index 250bb62..a15d58b 100644 --- a/lib/beans/user_info_bean.g.dart +++ b/lib/beans/user_info_bean.g.dart @@ -16,7 +16,13 @@ UserInfoBean _$UserInfoBeanFromJson(Map json) => UserInfoBean( ?.map((e) => MeCharacterInfoBean.fromJson(e as Map)) .toList(), (json['memoryCardCount'] as num?)?.toInt(), - ); + ) + ..inviteNewUser = json['inviteNewUser'] == null + ? null + : InviteNewBean.fromJson( + json['inviteNewUser'] as Map) + ..hasTalked = (json['hasTalked'] as num?)?.toInt() + ..photographs = (json['photographs'] as num?)?.toInt(); Map _$UserInfoBeanToJson(UserInfoBean instance) => { @@ -27,4 +33,7 @@ Map _$UserInfoBeanToJson(UserInfoBean instance) => 'remainingChatCount': instance.remainingChatCount, 'characterInfo': instance.characterInfo?.map((e) => e.toJson()).toList(), 'memoryCardCount': instance.memoryCardCount, + 'inviteNewUser': instance.inviteNewUser?.toJson(), + 'hasTalked': instance.hasTalked, + 'photographs': instance.photographs, }; diff --git a/lib/dialog/memory_card_dialog.dart b/lib/dialog/memory_card_dialog.dart new file mode 100644 index 0000000..680518c --- /dev/null +++ b/lib/dialog/memory_card_dialog.dart @@ -0,0 +1,85 @@ +import 'package:flutter/material.dart'; + +import '../network/NetworkConfig.dart'; + +class MemoryCardDialog extends StatefulWidget { + Function onTap; + + MemoryCardDialog({required this.onTap}); + + @override + State createState() => _MemoryCardDialogState(); +} + +class _MemoryCardDialogState extends State { + @override + void initState() { + // TODO: implement initState + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Material( + type: MaterialType.transparency, //透明类型 + color: Color(0x1A000000), + child: Container( + decoration: + BoxDecoration(color: Color(0xFF19191A), borderRadius: BorderRadius.only(topLeft: Radius.circular(7), topRight: Radius.circular(7))), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + width: 24.7, + height: 3, + margin: EdgeInsets.only(top: 12), + decoration: BoxDecoration(color: Color(0xFF272734), borderRadius: BorderRadius.all(Radius.circular(7))), + ), + Container( + margin: EdgeInsets.only(top: 38, left: 22, bottom: 19), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + decoration: BoxDecoration(color: Color(0xFF2A2A2A), borderRadius: BorderRadius.all(Radius.circular(7))), + child: Image( + width: 155, + height: 100, + image: AssetImage('assets/images/ic_memory_card.png'), + ), + ), + Container( + margin: EdgeInsets.only(left: 30), + child: Text( + "x ${NetworkConfig.userInfoBean?.memoryCardCount}", + style: TextStyle(color: Color(0xFFFF9000)), + ), + ) + ], + ), + ), + GestureDetector( + onTap: () { + widget.onTap(); + }, + child: Container( + width: double.infinity, + height: 40, + margin: EdgeInsets.all(18), + alignment: Alignment.center, + decoration: BoxDecoration( + color: Color(0xFFFF9000), + borderRadius: BorderRadius.all(Radius.circular(7)), + ), + child: Text( + '使用记忆提升卡', + style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600), + ), + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/network/NetworkConfig.dart b/lib/network/NetworkConfig.dart index 1a453dc..2e5efcc 100644 --- a/lib/network/NetworkConfig.dart +++ b/lib/network/NetworkConfig.dart @@ -1,3 +1,5 @@ +import '../beans/user_info_bean.dart'; + class NetworkConfig { static String ServerDomain_Online = BASE_URLS[SELECT_INDEX]; static String deviceID = ""; //设备ID @@ -25,6 +27,7 @@ class NetworkConfig { static String userName = ""; static String Version = "1.0.0"; static String Language = "en"; + static UserInfoBean? userInfoBean; static const String accountLogin = "api/Account/AccountLogIn"; //登录 static const String sendPhoneNumber = "api/Account/SendPhoneNumber"; //获取验证码 diff --git a/lib/tools/chat/chat_page.dart b/lib/tools/chat/chat_page.dart index 6e50366..ed7832e 100644 --- a/lib/tools/chat/chat_page.dart +++ b/lib/tools/chat/chat_page.dart @@ -13,7 +13,9 @@ import '../../beans/send_message_bean.dart'; import '../../common/func.dart'; import '../../custom/custom_popup.dart'; import '../../dialog/delete_dialog.dart'; +import '../../dialog/memory_card_dialog.dart'; import '../../dialog/restart_chat_dialog.dart'; +import '../../network/NetworkConfig.dart'; import 'chat_info_page.dart'; import 'chat_model.dart'; @@ -341,25 +343,25 @@ class _ChatPageState extends State { ), ///关注 - Positioned( - right: 0, - child: GestureDetector( - onTap: () { - isHalf = !isHalf; - setState(() {}); - }, - child: Container( - width: 50, - height: 24, - alignment: Alignment.center, - decoration: BoxDecoration(color: Color(0x33000000), borderRadius: BorderRadius.all(Radius.circular(12))), - child: Text( - '+ 关注', - style: TextStyle(fontSize: 12, color: Colors.white), - ), - ), - ), - ), + // Positioned( + // right: 0, + // child: GestureDetector( + // onTap: () { + // isHalf = !isHalf; + // setState(() {}); + // }, + // child: Container( + // width: 50, + // height: 24, + // alignment: Alignment.center, + // decoration: BoxDecoration(color: Color(0x33000000), borderRadius: BorderRadius.all(Radius.circular(12))), + // child: Text( + // '+ 关注', + // style: TextStyle(fontSize: 12, color: Colors.white), + // ), + // ), + // ), + // ), ], ), ), @@ -567,8 +569,15 @@ class _ChatPageState extends State { setState(() { isMore = false; }); - // EasyLoading.show(status: 'loading...'); - // _viewmodel.delChat(widget.characterId); + if (NetworkConfig.userInfoBean!.memoryCardCount! > 0) { + FunctionUtil.bottomSheetDialog(context, MemoryCardDialog( + onTap: () { + EasyLoading.showToast("status"); + }, + )); + } else { + Navigator.pushNamed(context, "/ShopPage"); + } }, child: Column( mainAxisSize: MainAxisSize.min, @@ -758,7 +767,7 @@ class _ChatPageState extends State { child: Text( chatList[index].content!, style: const TextStyle( - fontSize: 16, + fontSize: 14, color: Color(0xFFE8E8E8), ), ), diff --git a/lib/tools/home/home_chat_page.dart b/lib/tools/home/home_chat_page.dart index 340977a..fef1d60 100644 --- a/lib/tools/home/home_chat_page.dart +++ b/lib/tools/home/home_chat_page.dart @@ -13,6 +13,7 @@ import '../../beans/send_message_bean.dart'; import '../../common/func.dart'; import '../../custom/custom_popup.dart'; import '../../dialog/delete_dialog.dart'; +import '../../dialog/memory_card_dialog.dart'; import '../../dialog/restart_chat_dialog.dart'; import '../../network/NetworkConfig.dart'; import '../chat/chat_info_page.dart'; @@ -565,6 +566,15 @@ class _HomeChatPageState extends State with AutomaticKeepAliveClie }); // EasyLoading.show(status: 'loading...'); // _viewmodel.delChat(widget.characterId); + if (NetworkConfig.userInfoBean!.memoryCardCount! > 0) { + FunctionUtil.bottomSheetDialog(context, MemoryCardDialog( + onTap: () { + EasyLoading.showToast("status"); + }, + )); + } else { + Navigator.pushNamed(context, "/ShopPage"); + } }, child: Column( mainAxisSize: MainAxisSize.min, @@ -758,7 +768,7 @@ class _HomeChatPageState extends State with AutomaticKeepAliveClie child: Text( chatList[index].content!, style: const TextStyle( - fontSize: 16, + fontSize: 14, color: Color(0xFFE8E8E8), ), ), diff --git a/lib/tools/login/login_model.dart b/lib/tools/login/login_model.dart index d7e59e2..48077ed 100644 --- a/lib/tools/login/login_model.dart +++ b/lib/tools/login/login_model.dart @@ -5,6 +5,7 @@ import 'package:talk/network/NetworkConfig.dart'; import 'package:talk/network/RequestCenter.dart'; import '../../beans/login_bean.dart'; +import '../../beans/user_info_bean.dart'; import '../../network/BaseEntity.dart'; class LoginModel { @@ -59,6 +60,8 @@ class LoginModel { final SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.setString('token', loginBean.token!); + getUserInfo(); + streamController.sink.add({ 'code': "login", //有数据 'data': dataEntity.message, @@ -73,4 +76,27 @@ class LoginModel { print("errorEntity==${errorEntity.message}"); }); } + + ///用户信息 + Future getUserInfo() async { + RequestCenter.instance.requestGet(NetworkConfig.getUserInfo, {}, (BaseEntity dataEntity) { + if (dataEntity.code == 0) { + UserInfoBean userInfoBean = UserInfoBean.fromJson(dataEntity.data); + NetworkConfig.userInfoBean = userInfoBean; + + streamController.sink.add({ + 'code': "getUserInfo", //有数据 + 'data': userInfoBean, + }); + } else { + streamController.sink.add({ + 'code': "error", // + 'data': dataEntity.message, + }); + } + }, (ErrorEntity errorEntity) { + print("errorEntity==${errorEntity.message}"); + }); + } + } diff --git a/lib/tools/login/login_page.dart b/lib/tools/login/login_page.dart index 584b903..b7b173c 100644 --- a/lib/tools/login/login_page.dart +++ b/lib/tools/login/login_page.dart @@ -85,6 +85,10 @@ class _LoginPageState extends State { break; case "login": EasyLoading.showToast(newData['data']); + break; + + case "getUserInfo": + EasyLoading.dismiss(); Navigator.pushReplacementNamed(context, "/HomePage"); break; @@ -204,7 +208,7 @@ class _LoginPageState extends State { onTap: () { if (phoneText != "" && codeText != "") { if (isCheck) { - EasyLoading.showToast("登录"); + EasyLoading.show(status: "'loading...'"); _viewmodel.login(phoneText, codeText, 1, ""); } else { EasyLoading.showToast("请选中协议"); diff --git a/lib/tools/me/me_model.dart b/lib/tools/me/me_model.dart index 33d39e3..e027b28 100644 --- a/lib/tools/me/me_model.dart +++ b/lib/tools/me/me_model.dart @@ -21,6 +21,7 @@ class MeModel { RequestCenter.instance.requestGet(NetworkConfig.getUserInfo, {}, (BaseEntity dataEntity) { if (dataEntity.code == 0) { UserInfoBean userInfoBean = UserInfoBean.fromJson(dataEntity.data); + NetworkConfig.userInfoBean = userInfoBean; streamController.sink.add({ 'code': "getUserInfo", //有数据