mirror of
https://github.com/Linloir/Simple-TCP-Client.git
synced 2026-02-04 14:23:35 +08:00
New Feature
- User Avatar!!
This commit is contained in:
parent
ce714e5820
commit
a5d5fe5eef
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* @Author : Linloir
|
* @Author : Linloir
|
||||||
* @Date : 2022-10-13 21:49:53
|
* @Date : 2022-10-13 21:49:53
|
||||||
* @LastEditTime : 2022-10-14 10:32:50
|
* @LastEditTime : 2022-10-20 11:52:12
|
||||||
* @Description :
|
* @Description :
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -17,11 +17,13 @@ class UserAvatar extends StatelessWidget {
|
|||||||
const UserAvatar({
|
const UserAvatar({
|
||||||
required this.userid,
|
required this.userid,
|
||||||
this.size = 48,
|
this.size = 48,
|
||||||
|
this.onTap,
|
||||||
super.key
|
super.key
|
||||||
});
|
});
|
||||||
|
|
||||||
final int userid;
|
final int userid;
|
||||||
final double size;
|
final double size;
|
||||||
|
final void Function()? onTap;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -35,12 +37,19 @@ class UserAvatar extends StatelessWidget {
|
|||||||
return Container(
|
return Container(
|
||||||
width: size,
|
width: size,
|
||||||
height: size,
|
height: size,
|
||||||
alignment: Alignment.center,
|
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: Colors.grey[600],
|
color: Colors.grey[600],
|
||||||
borderRadius: BorderRadius.circular(5.0),
|
borderRadius: BorderRadius.circular(5.0),
|
||||||
boxShadow: [BoxShadow(blurRadius: 10.0, color: Colors.grey[850]!.withOpacity(0.15))]
|
boxShadow: [BoxShadow(blurRadius: 10.0, color: Colors.grey[850]!.withOpacity(0.15))]
|
||||||
),
|
),
|
||||||
|
child: ClipRRect(
|
||||||
|
borderRadius: BorderRadius.circular(5.0),
|
||||||
|
child: Material(
|
||||||
|
color: Colors.transparent,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: onTap,
|
||||||
|
child: Align(
|
||||||
|
alignment: Alignment.center,
|
||||||
child: Text(
|
child: Text(
|
||||||
state.userInfo.userName[0].toUpperCase(),
|
state.userInfo.userName[0].toUpperCase(),
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
@ -50,6 +59,10 @@ class UserAvatar extends StatelessWidget {
|
|||||||
shadows: [Shadow(blurRadius: 5.0, color: Colors.white.withOpacity(0.15))]
|
shadows: [Shadow(blurRadius: 5.0, color: Colors.white.withOpacity(0.15))]
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -62,14 +75,20 @@ class UserAvatar extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
child: ClipRRect(
|
child: ClipRRect(
|
||||||
borderRadius: BorderRadius.circular(5.0),
|
borderRadius: BorderRadius.circular(5.0),
|
||||||
|
child: Material(
|
||||||
|
color: Colors.transparent,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: onTap,
|
||||||
child: OverflowBox(
|
child: OverflowBox(
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
child: FittedBox(
|
child: FittedBox(
|
||||||
fit: BoxFit.fitWidth,
|
fit: BoxFit.cover,
|
||||||
child: Image.memory(base64.decode(state.userInfo.avatarEncoded!)),
|
child: Image.memory(base64.decode(state.userInfo.avatarEncoded!)),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1,20 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
* @Author : Linloir
|
* @Author : Linloir
|
||||||
* @Date : 2022-10-12 23:36:12
|
* @Date : 2022-10-12 23:36:12
|
||||||
* @LastEditTime : 2022-10-14 12:10:34
|
* @LastEditTime : 2022-10-20 11:45:15
|
||||||
* @Description :
|
* @Description :
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:tcp_client/common/avatar/avatar.dart';
|
import 'package:tcp_client/common/avatar/avatar.dart';
|
||||||
import 'package:tcp_client/common/username/username.dart';
|
import 'package:tcp_client/common/username/username.dart';
|
||||||
|
import 'package:tcp_client/home/cubit/home_cubit.dart';
|
||||||
import 'package:tcp_client/home/view/profile_page/cubit/log_out_cubit.dart';
|
import 'package:tcp_client/home/view/profile_page/cubit/log_out_cubit.dart';
|
||||||
import 'package:tcp_client/home/view/profile_page/cubit/log_out_state.dart';
|
import 'package:tcp_client/home/view/profile_page/cubit/log_out_state.dart';
|
||||||
import 'package:tcp_client/home/view/profile_page/view/log_out_button.dart';
|
import 'package:tcp_client/home/view/profile_page/view/log_out_button.dart';
|
||||||
import 'package:tcp_client/login/login_page.dart';
|
import 'package:tcp_client/login/login_page.dart';
|
||||||
|
import 'package:tcp_client/repositories/common_models/userinfo.dart';
|
||||||
import 'package:tcp_client/repositories/local_service_repository/local_service_repository.dart';
|
import 'package:tcp_client/repositories/local_service_repository/local_service_repository.dart';
|
||||||
|
import 'package:tcp_client/repositories/tcp_repository/models/tcp_request.dart';
|
||||||
import 'package:tcp_client/repositories/tcp_repository/tcp_repository.dart';
|
import 'package:tcp_client/repositories/tcp_repository/tcp_repository.dart';
|
||||||
|
import 'package:tcp_client/repositories/user_repository/user_repository.dart';
|
||||||
|
|
||||||
class MyProfilePage extends StatelessWidget {
|
class MyProfilePage extends StatelessWidget {
|
||||||
const MyProfilePage({
|
const MyProfilePage({
|
||||||
@ -62,7 +70,29 @@ class MyProfilePage extends StatelessWidget {
|
|||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
UserAvatar(userid: userID, size: 96,),
|
UserAvatar(
|
||||||
|
userid: userID,
|
||||||
|
size: 96,
|
||||||
|
onTap: () async {
|
||||||
|
var homeCubit = context.read<HomeCubit>();
|
||||||
|
var userInfo = context.read<UserRepository>().getUserInfo(userid: userID);
|
||||||
|
homeCubit.localServiceRepository.pickFile(FileType.image).then((img) async {
|
||||||
|
if(img != null) {
|
||||||
|
var pref = await SharedPreferences.getInstance();
|
||||||
|
var token = pref.getInt('token');
|
||||||
|
var newRequest = ModifyProfileRequest(
|
||||||
|
userInfo: UserInfo(
|
||||||
|
userid: userID,
|
||||||
|
username: userInfo.userName,
|
||||||
|
avatar: base64.encode(await img.readAsBytes())
|
||||||
|
),
|
||||||
|
token: token
|
||||||
|
);
|
||||||
|
homeCubit.tcpRepository.pushRequest(newRequest);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
const SizedBox(height: 48,),
|
const SizedBox(height: 48,),
|
||||||
UserNameText(
|
UserNameText(
|
||||||
userid: userID,
|
userid: userID,
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* @Author : Linloir
|
* @Author : Linloir
|
||||||
* @Date : 2022-10-14 08:54:32
|
* @Date : 2022-10-14 08:54:32
|
||||||
* @LastEditTime : 2022-10-20 11:28:22
|
* @LastEditTime : 2022-10-20 11:30:46
|
||||||
* @Description :
|
* @Description :
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -24,7 +24,6 @@ class UserProfileCubit extends Cubit<UserProfileState> {
|
|||||||
final TCPRepository tcpRepository;
|
final TCPRepository tcpRepository;
|
||||||
|
|
||||||
Future<void> updateContactStatus() async {
|
Future<void> updateContactStatus() async {
|
||||||
var curUserId = (await SharedPreferences.getInstance()).getInt('userid');
|
|
||||||
if(userID == (await SharedPreferences.getInstance()).getInt('userid')) {
|
if(userID == (await SharedPreferences.getInstance()).getInt('userid')) {
|
||||||
emit(const UserProfileState(status: ContactStatus.none));
|
emit(const UserProfileState(status: ContactStatus.none));
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* @Author : Linloir
|
* @Author : Linloir
|
||||||
* @Date : 2022-10-13 20:18:14
|
* @Date : 2022-10-13 20:18:14
|
||||||
* @LastEditTime : 2022-10-13 21:26:16
|
* @LastEditTime : 2022-10-20 11:50:26
|
||||||
* @Description : Repository to cache user info
|
* @Description : Repository to cache user info
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -40,6 +40,12 @@ class UserRepository {
|
|||||||
_userInfoStreamController.add(response.userInfo!);
|
_userInfoStreamController.add(response.userInfo!);
|
||||||
localServiceRepository.storeUserInfo(userInfo: response.userInfo!);
|
localServiceRepository.storeUserInfo(userInfo: response.userInfo!);
|
||||||
}
|
}
|
||||||
|
else if(response.type == TCPResponseType.modifyProfile && response.status == TCPResponseStatus.ok) {
|
||||||
|
response as ModifyProfileResponse;
|
||||||
|
users.update(response.userInfo!.userID, (value) => response.userInfo!, ifAbsent: () => response.userInfo!);
|
||||||
|
_userInfoStreamController.add(response.userInfo!);
|
||||||
|
localServiceRepository.storeUserInfo(userInfo: response.userInfo!);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Fetch user info
|
//Fetch user info
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user