import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:hyzp_ybqx511528_xingwen/components/commonFun.dart'; import 'package:hyzp_ybqx511528_xingwen/components/dioFun.dart'; import '../../../components/customDialogH.dart'; import '../../../components/hyxx_data_handle.dart'; import '../../../res/listContacts.dart'; import '../../../services/EventBus.dart'; import '../../../services/Storage.dart'; import '../../../widget/JdButton.dart'; class PersonalData extends StatefulWidget { PersonalData({Key key}) : super(key: key); _LoginPageState createState() => _LoginPageState(); } class _LoginPageState extends State { List listController = []; String imagePath = ''; Image _image; void initState() { // TODO: implement initState getListFlields(); super.initState(); } //监听登录页面销毁的事件 dispose() { super.dispose(); eventBus.fire(new UserEvent('登录成功...')); } getListFlields() async { Storage.getString('userAvatarPath').then((value) { if (null != value) { imagePath = value; } }); print('imagePath = $imagePath'); //mapUserInfo = mapUserInfoRet['data']['profile']; await getMyUserinfo(); // print('mapUserInfoRet = $mapUserInfoRet'); // print('mapUserInfo = $mapUserInfo'); listController = List.generate(mapUserInfo.length, (index) { String key = mapUserInfo.keys.elementAt(index); if ("reg_time" == key) { var strtime = DateTime.fromMillisecondsSinceEpoch(mapUserInfo[key]); //将拿到的时间戳转化为日期 print('时间戳:${mapUserInfo[key]}'); print('转换为日期时间:${strtime.toLocal().toString()}'); // I/flutter (25364): 时间戳:1606653977 // I/flutter (25364): 转换为日期时间:1970-01-19 14:17:33.977 return TextEditingController(text: strtime.toLocal().toString()); } else { var controller = TextEditingController(text: mapUserInfo[key].toString()); controller.selection = TextSelection.fromPosition( TextPosition(affinity: TextAffinity.downstream, offset: '${controller.text}'.length), ); return controller; } }); setState(() {}); } Widget getTrail(String key, int index, double widthTrail) { if (0 == listController.length) { return Container(); } //print('key = $key'); if ('avatar' == key) { if (imagePath.isEmpty) { imagePath = listController[index].text; } return getAvatar(width: widthTrail); } else { return Container( alignment: Alignment(1, 0), //widthTrail = 400报错,360刚能显示,300换行,260 width: widthTrail, child: TextField( //textAlign: TextAlign.right, style: TextStyle(fontSize: 16), decoration: InputDecoration( //hintText: '請輸入字段信息', border: InputBorder.none, //TextField去掉下划线 contentPadding: EdgeInsets.only(right: 0), ), controller: listController[index], enabled: mapUserInfoModifyable[key], //利用控制器初始化文本 onChanged: (value) { mapUserInfo[key] = value; }, ), ); } } Future doContacts() async { bFlash = false; return showDialog( context: context, builder: (BuildContext context) { return customDialogH( title: "请选择头像修改操作", content: "头像修改", index: 0, ); }, ).then((value) { if (null == value) { return; } imagePath = value; print('Page2_Contacts bFlash = $bFlash'); if (imagePath?.isNotEmpty) { Storage.setString('userAvatarPath', imagePath); _image = Image.file(File(imagePath), fit: BoxFit.cover); setState(() {}); } }); } Widget getAvatar({double width = 260.0}) { if (imagePath.isEmpty) { _image = Image.asset('assets/images/user.png', fit: BoxFit.cover); } else { String head = imagePath.substring(0, 4).trim().toLowerCase(); if ('http' == head) { _image = Image.network(imagePath, fit: BoxFit.cover); } else { _image = Image.file(File(imagePath), fit: BoxFit.cover); } } return Container( alignment: Alignment(-1, 0), width: width, child: InkWell( onTap: () async { //doContacts(); }, child: Container( width: 40, child: _image, ), ), ); } static onNullFun() {} Widget _getListTile(String key, int index, double widthTrail, {onTapFun = onNullFun, onLongPressFun = onNullFun, size = 16.0}) { return ListTile( //leading: new Icon(Icons.phone), title: Text(mapUserInfoText.containsKey(key) ? '${mapUserInfoText[key]} :' : '$key :', style: TextStyle(fontSize: 16)), trailing: getTrail(key, index, widthTrail), contentPadding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 0), enabled: true, onTap: () async { // if ('avatar' == key) { // print('选择图片或拍照'); // await doContacts(); // } }, onLongPress: () {}, ); } @override Widget build(BuildContext context) { return Scaffold( appBar: PreferredSize( preferredSize: Size.fromHeight(ScreenUtil().setHeight(173)), // 设置appBar高度 // 设置appBar高度 child: AppBar( automaticallyImplyLeading: false, centerTitle: true, titleSpacing: 0.0, //设置title的左边距 flexibleSpace: Container( //SizedBox(height: ScreenUtil().statusBarHeight), //显示顶部状态栏 // SizedBox(height: ScreenUtil().setHeight(10)), //显示顶部状态栏 padding: EdgeInsets.only(top: ScreenUtil().statusBarHeight), //留出顶部状态栏高度 child: Container( //height: ScreenUtil().setHeight(173), decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.centerLeft, end: Alignment.centerRight, colors: [ Color.fromRGBO(12, 186, 156, 1), Color.fromRGBO(39, 127, 235, 1), ], ), ), // decoration: BoxDecoration( // gradient: LinearGradient(colors: [ // Color(0xFF0018EB), // Color(0xFF01C1D9), // ], begin: Alignment.bottomCenter, end: Alignment.topCenter), // ), ), ), title: Padding( padding: EdgeInsets.only(left: 0, right: 0), child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ getIconAndTextButton( iconColor: Colors.white, iconData: Icons.chevron_left_outlined, onPress: () { Navigator.pop(context); }, ), Expanded( child: Text("个人资料", style: TextStyle(color: Colors.white, fontSize: 20), textAlign: TextAlign.center, overflow: TextOverflow.ellipsis), ), SizedBox(width: 50), ], ), ), ), ), body: Container( child: Column( children: [ Expanded( //https://www.it1352.com/2028416.html //用Map而不是List的Flutter ListView.builder(Flutter listview with Map instead of List) child: ListView.builder( itemCount: mapUserInfo.length, itemBuilder: (BuildContext context, index) { String key = mapUserInfo.keys.elementAt(index); return Column( children: [ _getListTile(key, index, 220.0), Divider( height: 1.0, ), ], ); }, ), ), SizedBox(height: 40), JdButton( height: 126, width: 899, text: "确认", color: Colors.blueAccent, onTop: () async { Navigator.pop(context); }, ), SizedBox(height: 40), ], ), ), ); } }