import 'dart:html';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:get/get.dart';
import 'package:link/utils/storage.dart';
import 'package:link/view/component/link_btn.dart';
import 'package:file_picker/file_picker.dart';
import 'package:link/view/component/link_step.dart';
import 'package:link/view/component/toast.dart';
import '../constants.dart';
import '../utils/api.dart';
import '../utils/http_utils.dart';
import '../utils/size_fit.dart';
import 'component/top_container.dart';
import 'package:dio/dio.dart' as adio;
import 'package:dio/dio.dart';
import 'component/upload_file.dart';
import 'edit_avatar.dart';
class EditAvatrNick extends StatefulWidget {
const EditAvatrNick({Key? key}) : super(key: key);
@override
State createState() => _EditAvatrNickState();
}
class _EditAvatrNickState extends State {
TextEditingController controller = TextEditingController();
FocusNode focusNode = FocusNode();
bool isFocus = false;
String strContent = '';
String avatar = '';
Uint8List? chooseImage;
@override
void initState() {
// TODO: implement initState
// var userInfo = StorageUtil().getJSON('userInfo');
var userInfo = StorageUtil().getJSON('tempUser0');
if (userInfo != null) {
if (userInfo['nickname'] != null) {
strContent = userInfo['nickname'];
controller.text = strContent;
}
if (userInfo['avatar'] != null) {
avatar = userInfo['avatar'];
}
} else {
StorageUtil().setJSON('tempUser0', {});
}
focusNode.addListener(() {
setState(() {
isFocus = focusNode.hasFocus;
});
});
super.initState();
}
updateCache() {
StorageUtil()
.setJSON('tempUser0', {"avatar": avatar, "nickname": strContent});
}
Future uploadImage(Uint8List? imgData) async {
// Toast().showHud(context: context);
Map data = await HttpUtils.get(Api.ossFormUpload,
params: {'type': 'AVATAR', 'file_ext': 'png'});
Dio dio = Dio();
Map map = data['fields'];
map['file'] =
await adio.MultipartFile.fromBytes(imgData!, filename: 'avatar.png');
adio.FormData formData = adio.FormData.fromMap(map);
adio.Response response = await dio.post(data['upload_url'], data: formData);
var data2 =
await HttpUtils.post(Api.userInfo, data: {'avatar': data['view_url']});
if (data2 != null) {
print(data['view_url']);
// getUserInfo();
}
setState(() {
avatar = data['view_url'];
});
updateCache();
// Toast().hideHud();
}
Future commit() async {
if (chooseImage == null && avatar.isEmpty) {
Toast().showInfoText('请上传头像', context: context);
return;
}
if (strContent.isEmpty) {
Toast().showInfoText('请输入昵称', context: context);
return;
}
Toast().showHud(context: context);
var data2 =
await HttpUtils.post(Api.userInfo, data: {'nickname': strContent});
if (data2 != null) {
print(data2.toString());
}
Toast().hideHud();
Get.toNamed('/edit_base_info');
StorageUtil().remove('tempUser0');
}
body() {
return Material(
color: kBgColor,
child: TopContainer(
child: Stack(children: [
Column(
children: [
SizedBox(
height: 32.px,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
LinkStep(step: 1, content: '完善基本信息', hasShadow: true),
Container(
width: 60.px,
height: 8.px,
transform: Matrix4.translationValues(-1, 0, 0),
decoration: const BoxDecoration(
gradient: LinearGradient(
begin: Alignment.centerLeft,
end: Alignment.centerRight,
colors: [kThemeColor, Color(0xFF74747A)])),
),
Container(
transform: Matrix4.translationValues(-2, 0, 0),
child: LinkStep(step: 2, content: '', hasShadow: false),
)
],
),
SizedBox(
height: 64.px,
),
UploadFile(
child: ClipRRect(
borderRadius: BorderRadius.circular(70.px),
child: Container(
width: 140.px,
height: 140.px,
alignment: Alignment.bottomCenter,
decoration: BoxDecoration(
image: chooseImage != null
? DecorationImage(
image: MemoryImage(chooseImage!),
fit: BoxFit.cover)
: avatar.isNotEmpty
? DecorationImage(
image: NetworkImage(avatar),
fit: BoxFit.cover)
: const DecorationImage(
image: AssetImage(
'assets/images/default_avatar.png'))),
child: Container(
height: 28.px,
color: kThemeColor,
alignment: Alignment.center,
child: SvgPicture.asset(
'assets/icons/edit.svg',
width: 24.px,
height: 24.px,
color: Colors.black,
),
),
)),
callback: (Uint8List file) {
showDialog(
context: context,
barrierDismissible: false,
barrierColor: Colors.transparent,
useSafeArea: false,
builder: (BuildContext context) {
return EditAvatar(
image: file,
callback: (Uint8List img) {
setState(() {
chooseImage = img;
});
uploadImage(img);
},
);
});
// setState(() {
// chooseImage = file;
// });
// uploadImage(file);
},
),
// GestureDetector(
// onTap: () {
// chooseFile();
// },
// child: ClipRRect(
// borderRadius: BorderRadius.circular(70.px),
// child: Container(
// width: 140.px,
// height: 140.px,
// alignment: Alignment.bottomCenter,
// decoration: BoxDecoration(
// image: chooseImage != null
// ? DecorationImage(
// image: MemoryImage(chooseImage!),
// fit: BoxFit.cover)
// : avatar.isNotEmpty
// ? DecorationImage(
// image: NetworkImage(avatar),
// fit: BoxFit.cover)
// : const DecorationImage(
// image: AssetImage(
// 'assets/images/default_avatar.png'))),
// child: Container(
// height: 28.px,
// color: kThemeColor,
// alignment: Alignment.center,
// child: SvgPicture.asset(
// 'assets/icons/edit.svg',
// width: 13.px,
// height: 13.px,
// color: Colors.black,
// ),
// ),
// )),
// ),
SizedBox(
height: 24.px,
),
Container(
width: 315.px,
height: 68.px,
alignment: Alignment.centerLeft,
padding: EdgeInsets.only(left: 16.px, right: 16.px),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16.px),
color: const Color(0xFF2C2C2E)),
child: TextField(
// autofocus: true,
controller: controller,
focusNode: focusNode,
maxLength: 50,
cursorColor: kBtnColor,
onChanged: (value) {
setState(() {
strContent = value;
});
updateCache();
},
textAlign: TextAlign.center,
style: TextStyle(color: Colors.white, fontSize: 18.px),
decoration: InputDecoration(
border: InputBorder.none,
hintText: isFocus ? '' : '请输入您的昵称',
hintStyle: TextStyle(
fontSize: 18.px, color: const Color(0xFF74747A)),
counterText: "",
),
)),
Expanded(child: Container()),
LinkButton(
title: '下一步',
disable: false,
isBlack: false,
callback: () {
commit();
// Get.toNamed('/edit_base_info');
}),
SizedBox(
height: 56.px,
)
],
),
])));
}
@override
Widget build(BuildContext context) {
SizeFit.initialize(context);
return body();
// return Padding(padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),child: body(),);
// return Scaffold(resizeToAvoidBottomInset: true,body: body(),);
}
}