Browse Source

update gid and addr print & show

pull/18/head
Sun 4 years ago
parent
commit
2eaf159449
  1. 22
      lib/account.dart
  2. 11
      lib/apps/assistant/message.dart
  3. 47
      lib/apps/chat/add.dart
  4. 4
      lib/apps/chat/detail.dart
  5. 4
      lib/apps/device/models.dart
  6. 15
      lib/apps/device/page.dart
  7. 6
      lib/apps/domain/page.dart
  8. 49
      lib/apps/group_chat/add.dart
  9. 13
      lib/apps/group_chat/detail.dart
  10. 9
      lib/global.dart
  11. 14
      lib/pages/account_restore.dart
  12. 2
      lib/pages/home.dart
  13. 4
      lib/pages/setting/network.dart
  14. 12
      lib/pages/setting/profile.dart
  15. 4
      lib/provider.dart
  16. 3
      lib/security.dart
  17. 42
      lib/utils/better_print.dart
  18. 7
      lib/widgets/chat_message.dart
  19. 14
      lib/widgets/user_info.dart

22
lib/account.dart

@ -22,8 +22,6 @@ class Account {
this.hasNew = false; this.hasNew = false;
} }
String get id => 'EH' + this.gid.toUpperCase();
String encodeAvatar() { String encodeAvatar() {
if (this.avatar != null && this.avatar!.length > 1) { if (this.avatar != null && this.avatar!.length > 1) {
return base64.encode(this.avatar!); return base64.encode(this.avatar!);
@ -40,26 +38,6 @@ class Account {
} }
} }
String printShortId() {
final id = this.id;
final len = id.length;
if (len > 4) {
return id.substring(0, 4) + "..." + id.substring(len - 4, len);
} else {
return id;
}
}
String printId() {
final id = this.id;
final len = id.length;
if (len > 8) {
return id.substring(0, 8) + "..." + id.substring(len - 8, len);
} else {
return id;
}
}
Avatar showAvatar({double width = 45.0, bool online = false, bool needOnline = true}) { Avatar showAvatar({double width = 45.0, bool online = false, bool needOnline = true}) {
return Avatar( return Avatar(
width: width, width: width,

11
lib/apps/assistant/message.dart

@ -200,9 +200,8 @@ class AssistantMessage extends StatelessWidget {
const SizedBox(height: 10.0), const SizedBox(height: 10.0),
const Divider(height: 1.0, color: Color(0x40ADB0BB)), const Divider(height: 1.0, color: Color(0x40ADB0BB)),
const SizedBox(height: 10.0), const SizedBox(height: 10.0),
_infoListTooltip(Icons.person, color.primary, gid), _infoListTooltip(Icons.person, color.primary, gidText(gid), gidPrint(gid)),
_infoListTooltip( _infoListTooltip(Icons.location_on, color.primary, addrText(infos[2]), addrPrint(infos[2])),
Icons.location_on, color.primary, "0x" + infos[2]),
Container( Container(
width: 300.0, width: 300.0,
padding: const EdgeInsets.symmetric(vertical: 10.0), padding: const EdgeInsets.symmetric(vertical: 10.0),
@ -250,7 +249,7 @@ class AssistantMessage extends StatelessWidget {
style: TextStyle( style: TextStyle(
color: color.onPrimary, fontSize: 16.0)), color: color.onPrimary, fontSize: 16.0)),
SizedBox(height: 5.0), SizedBox(height: 5.0),
Text(betterPrint(gid), Text(gidPrint(gid),
style: TextStyle(color: Colors.grey, fontSize: 12.0)), style: TextStyle(color: Colors.grey, fontSize: 12.0)),
])), ])),
]), ]),
@ -262,7 +261,7 @@ class AssistantMessage extends StatelessWidget {
]))); ])));
} }
Widget _infoListTooltip(icon, color, text) { Widget _infoListTooltip(icon, color, text, short) {
return Container( return Container(
width: 300.0, width: 300.0,
padding: const EdgeInsets.symmetric(vertical: 10.0), padding: const EdgeInsets.symmetric(vertical: 10.0),
@ -273,7 +272,7 @@ class AssistantMessage extends StatelessWidget {
Expanded( Expanded(
child: Tooltip( child: Tooltip(
message: text, message: text,
child: Text(betterPrint(text)), child: Text(short),
) )
) )
] ]

47
lib/apps/chat/add.dart

@ -46,10 +46,13 @@ class _ChatAddPageState extends State<ChatAddPage> {
setState(() { setState(() {
this._showHome = false; this._showHome = false;
final avatar = Avatar(name: params[2], width: 100.0, colorSurface: false); final avatar = Avatar(name: params[2], width: 100.0, colorSurface: false);
String id = gidParse(params[0].trim());
String addr = addrParse(params[1]);
this._coreScreen = _InfoScreen( this._coreScreen = _InfoScreen(
callback: this._sendCallback, callback: this._sendCallback,
id: params[0], id: id,
addr: params[1], addr: addr,
name: params[2], name: params[2],
bio: '', bio: '',
avatar: avatar, avatar: avatar,
@ -86,7 +89,7 @@ class _ChatAddPageState extends State<ChatAddPage> {
return Column( return Column(
children: <Widget>[ children: <Widget>[
ListTile( ListTile(
contentPadding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 4.0), contentPadding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 4.0),
leading: Icon(Icons.create, color: color.primary), leading: Icon(Icons.create, color: color.primary),
title: Text(lang.input), title: Text(lang.input),
trailing: Icon(Icons.keyboard_arrow_right, size: 30.0), trailing: Icon(Icons.keyboard_arrow_right, size: 30.0),
@ -96,7 +99,7 @@ class _ChatAddPageState extends State<ChatAddPage> {
}), }),
), ),
ListTile( ListTile(
contentPadding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 4.0), contentPadding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 4.0),
leading: Icon(Icons.search, color: color.primary), leading: Icon(Icons.search, color: color.primary),
title: Text(lang.domainSearch), title: Text(lang.domainSearch),
trailing: Icon(Icons.keyboard_arrow_right, size: 30.0), trailing: Icon(Icons.keyboard_arrow_right, size: 30.0),
@ -106,7 +109,7 @@ class _ChatAddPageState extends State<ChatAddPage> {
}), }),
), ),
ListTile( ListTile(
contentPadding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 4.0), contentPadding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 4.0),
leading: Icon(Icons.camera_alt, color: color.primary), leading: Icon(Icons.camera_alt, color: color.primary),
title: Text(lang.scanQr), title: Text(lang.scanQr),
trailing: Icon(Icons.keyboard_arrow_right, size: 30.0), trailing: Icon(Icons.keyboard_arrow_right, size: 30.0),
@ -116,7 +119,7 @@ class _ChatAddPageState extends State<ChatAddPage> {
) )
), ),
ListTile( ListTile(
contentPadding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 4.0), contentPadding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 4.0),
leading: Icon(Icons.image, color: color.primary), leading: Icon(Icons.image, color: color.primary),
title: Text(lang.scanImage + " (${lang.wip})"), title: Text(lang.scanImage + " (${lang.wip})"),
trailing: Icon(Icons.keyboard_arrow_right, size: 30.0), trailing: Icon(Icons.keyboard_arrow_right, size: 30.0),
@ -189,7 +192,7 @@ class _ChatAddPageState extends State<ChatAddPage> {
Icons.info, Icons.info,
lang.info, lang.info,
UserInfo(app: 'add-friend', UserInfo(app: 'add-friend',
id: account.id, name: account.name, addr: Global.addr) id: account.gid, name: account.name, addr: Global.addr)
), ),
child: Padding( child: Padding(
padding: const EdgeInsets.only(right: 10.0), padding: const EdgeInsets.only(right: 10.0),
@ -402,22 +405,14 @@ class _InputScreenState extends State<_InputScreen> {
FocusNode remarkFocus = FocusNode(); FocusNode remarkFocus = FocusNode();
send() { send() {
var id = userIdEditingController.text; final id = gidParse(userIdEditingController.text.trim());
if (id == '') { final addr = addrParse(addrEditingController.text.trim());
if (id == '' || addr == '') {
return; return;
} }
if (id.substring(0, 2) == 'EH') { final name = nameEditingController.text.trim();
id = id.substring(2); final remark = remarkEditingController.text.trim();
}
var addr = addrEditingController.text;
if (addr.substring(0, 2) == '0x') {
//substring(2); if has 0x, need remove
addr = addr.substring(2);
}
var name = nameEditingController.text;
var remark = remarkEditingController.text;
context.read<ChatProvider>().requestCreate(Request(id, addr, name, remark)); context.read<ChatProvider>().requestCreate(Request(id, addr, name, remark));
setState(() { setState(() {
@ -506,7 +501,7 @@ class _InfoScreen extends StatelessWidget {
title: Text(gidPrint(this.id), style: TextStyle(fontSize: 16.0)), title: Text(gidPrint(this.id), style: TextStyle(fontSize: 16.0)),
trailing: TextButton( trailing: TextButton(
child: Icon(Icons.copy, size: 20.0), child: Icon(Icons.copy, size: 20.0),
onPressed: () => Clipboard.setData(ClipboardData(text: this.id)), onPressed: () => Clipboard.setData(ClipboardData(text: gidText(this.id))),
) )
), ),
ListTile( ListTile(
@ -515,7 +510,7 @@ class _InfoScreen extends StatelessWidget {
title: Text(addrPrint(this.addr), style: TextStyle(fontSize: 16.0)), title: Text(addrPrint(this.addr), style: TextStyle(fontSize: 16.0)),
trailing: TextButton( trailing: TextButton(
child: Icon(Icons.copy, size: 20.0), child: Icon(Icons.copy, size: 20.0),
onPressed: () => Clipboard.setData(ClipboardData(text: this.addr)), onPressed: () => Clipboard.setData(ClipboardData(text: addrText(this.addr))),
) )
), ),
ListTile( ListTile(
@ -558,7 +553,7 @@ class _RequestItem extends StatelessWidget {
); );
} }
Widget _infoListTooltip(icon, color, text) { Widget _infoListTooltip(icon, color, text, short) {
return Container( return Container(
width: 300.0, width: 300.0,
padding: const EdgeInsets.symmetric(vertical: 10.0), padding: const EdgeInsets.symmetric(vertical: 10.0),
@ -569,7 +564,7 @@ class _RequestItem extends StatelessWidget {
Expanded( Expanded(
child: Tooltip( child: Tooltip(
message: text, message: text,
child: Text(betterPrint(text)), child: Text(short),
) )
) )
] ]
@ -587,8 +582,8 @@ class _RequestItem extends StatelessWidget {
const SizedBox(height: 10.0), const SizedBox(height: 10.0),
const Divider(height: 1.0, color: Color(0x40ADB0BB)), const Divider(height: 1.0, color: Color(0x40ADB0BB)),
const SizedBox(height: 10.0), const SizedBox(height: 10.0),
_infoListTooltip(Icons.person, color.primary, 'EH' + request.gid.toUpperCase()), _infoListTooltip(Icons.person, color.primary, gidText(request.gid), gidPrint(request.gid)),
_infoListTooltip(Icons.location_on, color.primary, "0x" + request.addr), _infoListTooltip(Icons.location_on, color.primary, addrText(request.addr), addrPrint(request.addr)),
_infoList(Icons.turned_in, color.primary, request.remark), _infoList(Icons.turned_in, color.primary, request.remark),
_infoList(Icons.access_time_rounded, color.primary, request.time.toString()), _infoList(Icons.access_time_rounded, color.primary, request.time.toString()),
const SizedBox(height: 10.0), const SizedBox(height: 10.0),

4
lib/apps/chat/detail.dart

@ -247,9 +247,9 @@ class _ChatDetailState extends State<ChatDetail> {
lang.friendInfo, lang.friendInfo,
UserInfo( UserInfo(
app: 'add-friend', app: 'add-friend',
id: 'EH' + friend.gid.toUpperCase(), id: friend.gid,
name: friend.name, name: friend.name,
addr: '0x' + friend.addr, addr: friend.addr,
title: lang.qrFriend, title: lang.qrFriend,
remark: friend.remark, remark: friend.remark,
), ),

4
lib/apps/device/models.dart

@ -15,10 +15,6 @@ class Device {
this.addr = params[3], this.addr = params[3],
this.lastTime = RelativeTime.fromInt(params[4]), this.lastTime = RelativeTime.fromInt(params[4]),
this.online = params[5] == "1"; this.online = params[5] == "1";
String printAddr() {
return '0x' + this.addr.substring(0, 6) + "..." + this.addr.substring(64 - 8, 64);
}
} }
class DeviceStatus { class DeviceStatus {

15
lib/apps/device/page.dart

@ -5,6 +5,7 @@ import 'package:percent_indicator/percent_indicator.dart';
import 'package:qr_flutter/qr_flutter.dart'; import 'package:qr_flutter/qr_flutter.dart';
import 'package:esse/utils/adaptive.dart'; import 'package:esse/utils/adaptive.dart';
import 'package:esse/utils/better_print.dart';
import 'package:esse/l10n/localizations.dart'; import 'package:esse/l10n/localizations.dart';
import 'package:esse/widgets/shadow_dialog.dart'; import 'package:esse/widgets/shadow_dialog.dart';
import 'package:esse/widgets/input_text.dart'; import 'package:esse/widgets/input_text.dart';
@ -35,11 +36,7 @@ class _DevicesPageState extends State<DevicesPage> {
const SizedBox(height: 32.0), const SizedBox(height: 32.0),
ButtonText( ButtonText(
action: () { action: () {
var addr = this._addrController.text; final addr = addrParse(this._addrController.text.trim());
if (addr.substring(0, 2) == '0x') {
//substring(2); if has 0x, need remove
addr = addr.substring(2);
}
if (addr.length > 0) { if (addr.length > 0) {
Provider.of<DeviceProvider>(context, listen: false).connect(addr); Provider.of<DeviceProvider>(context, listen: false).connect(addr);
Navigator.pop(context); Navigator.pop(context);
@ -55,7 +52,7 @@ class _DevicesPageState extends State<DevicesPage> {
final res = await httpPost(Global.httpRpc, 'account-mnemonic', [lock]); final res = await httpPost(Global.httpRpc, 'account-mnemonic', [lock]);
if (res.isOk) { if (res.isOk) {
final words = res.params[0]; final words = res.params[0];
final info = json.encode({'app': 'distribute', 'params': [name, id, addr, words]}); final info = json.encode({'app': 'distribute', 'params': [name, gidText(id), addrText(addr), words]});
showShadowDialog(context, Icons.qr_code_rounded, lang.deviceQrcode, showShadowDialog(context, Icons.qr_code_rounded, lang.deviceQrcode,
Column( Column(
children: [ children: [
@ -112,7 +109,7 @@ class _DevicesPageState extends State<DevicesPage> {
} }
Widget deviceWidget(ColorScheme color, Device device, bool isDesktop, double widgetWidth, lang) { Widget deviceWidget(ColorScheme color, Device device, bool isDesktop, double widgetWidth, lang) {
final bool isLocal = '0x' + device.addr == Global.addr; final bool isLocal = device.addr == Global.addr;
final String name = isLocal ? (device.name + " (${lang.deviceLocal})") : device.name; final String name = isLocal ? (device.name + " (${lang.deviceLocal})") : device.name;
return Container( return Container(
@ -131,7 +128,7 @@ class _DevicesPageState extends State<DevicesPage> {
title: Text(name), title: Text(name),
subtitle: Container( subtitle: Container(
padding: const EdgeInsets.only(top: 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Text(device.printAddr()) child: Text(addrPrint(device.addr))
), ),
), ),
Row( Row(
@ -226,7 +223,7 @@ class _DevicesPageState extends State<DevicesPage> {
Navigator.of(context).pop(); Navigator.of(context).pop();
_showQrCode( _showQrCode(
account.name, account.name,
account.id, account.gid,
Global.addr, Global.addr,
account.lock, account.lock,
color, color,

6
lib/apps/domain/page.dart

@ -372,9 +372,9 @@ class _AddProviderScreenState extends State<_AddProviderScreen> {
ButtonText( ButtonText(
enable: !this._waiting, enable: !this._waiting,
action: () { action: () {
String addr = _addrController.text.trim(); final addr = addrParse(_addrController.text.trim());
if (addr.substring(0, 2) == '0x') { if (addr.length < 2) {
addr = addr.substring(2); return;
} }
rpc.send('domain-provider-add', [addr]); rpc.send('domain-provider-add', [addr]);
setState(() { setState(() {

49
lib/apps/group_chat/add.dart

@ -100,41 +100,31 @@ class _GroupAddPageState extends State<GroupAddPage> {
} }
_checkGroupAddr() { _checkGroupAddr() {
String addr = _createAddrController.text; final addr = addrParse(_createAddrController.text.trim());
if (addr.substring(0, 2) == '0x') { if (addr.length > 0) {
addr = addr.substring(2);
}
context.read<GroupChatProvider>().check(addr); context.read<GroupChatProvider>().check(addr);
} }
}
_scanCallback(bool isOk, String app, List params) { _scanCallback(bool isOk, String app, List params) {
Navigator.of(context).pop(); Navigator.of(context).pop();
print(app); print(app);
print(params); print(params);
if (isOk && app == 'add-group' && params.length == 3) { if (isOk && app == 'add-group' && params.length == 3) {
this._joinIdController.text = params[0]; this._joinIdController.text = gidText(params[0]);
this._joinAddrController.text = params[1]; this._joinAddrController.text = addrText(params[1]);
this._joinNameController.text = params[2]; this._joinNameController.text = params[2];
setState(() {}); setState(() {});
} }
} }
_join() { _join() {
var id = _joinIdController.text; final id = gidParse(_joinIdController.text.trim(), 'EG');
if (id == '') { if (id.length < 2) {
return; return;
} }
final addr = addrParse(_joinAddrController.text.trim());
if (id.substring(0, 2) == 'EG') { final name = _joinNameController.text.trim();
id = id.substring(2);
}
var addr = _joinAddrController.text;
// if has 0x, need remove
if (addr.substring(0, 2) == '0x') {
addr = addr.substring(2);
}
var name = _joinNameController.text;
context.read<GroupChatProvider>().join(GroupType.Open, id, addr, name, ""); context.read<GroupChatProvider>().join(GroupType.Open, id, addr, name, "");
setState(() { setState(() {
_joinIdController.text = ''; _joinIdController.text = '';
@ -144,10 +134,9 @@ class _GroupAddPageState extends State<GroupAddPage> {
} }
_create() { _create() {
var addr = _createAddrController.text.trim(); final addr = addrParse(_createAddrController.text.trim());
// if has 0x, need remove if (_groupLocation == 0 && addr.length < 2) {
if (addr.length > 2 && addr.substring(0, 2) == '0x') { return;
addr = addr.substring(2);
} }
final name = _createNameController.text.trim(); final name = _createNameController.text.trim();
final bio = _createBioController.text.trim(); final bio = _createBioController.text.trim();
@ -165,8 +154,8 @@ class _GroupAddPageState extends State<GroupAddPage> {
super.initState(); super.initState();
_addrChecked = false; _addrChecked = false;
_joinIdController.text = widget.id; _joinIdController.text = gidText(widget.id, 'EG');
_joinAddrController.text = widget.addr; _joinAddrController.text = addrText(widget.addr);
_joinNameController.text = widget.name; _joinNameController.text = widget.name;
_joinIdFocus.addListener(() { _joinIdFocus.addListener(() {
@ -563,7 +552,7 @@ class _RequestItem extends StatelessWidget {
); );
} }
Widget _infoListTooltip(icon, color, text) { Widget _infoListTooltip(icon, color, text, short) {
return Container( return Container(
width: 300.0, width: 300.0,
padding: const EdgeInsets.symmetric(vertical: 10.0), padding: const EdgeInsets.symmetric(vertical: 10.0),
@ -574,7 +563,7 @@ class _RequestItem extends StatelessWidget {
Expanded( Expanded(
child: Tooltip( child: Tooltip(
message: text, message: text,
child: Text(betterPrint(text)), child: Text(short),
) )
) )
] ]
@ -593,8 +582,10 @@ class _RequestItem extends StatelessWidget {
const Divider(height: 1.0, color: Color(0x40ADB0BB)), const Divider(height: 1.0, color: Color(0x40ADB0BB)),
const SizedBox(height: 10.0), const SizedBox(height: 10.0),
_infoListTooltip(Icons.person, color.primary, _infoListTooltip(Icons.person, color.primary,
(request.isMe ? 'EG' : 'EH') + request.gid.toUpperCase()), request.isMe ? gidText(request.gid, 'EG') : gidText(request.gid),
_infoListTooltip(Icons.location_on, color.primary, "0x" + request.addr), request.isMe ? gidPrint(request.gid, 'EG') : gidPrint(request.gid),
),
_infoListTooltip(Icons.location_on, color.primary, addrText(request.addr), addrPrint(request.addr)),
_infoList(Icons.turned_in, color.primary, request.remark), _infoList(Icons.turned_in, color.primary, request.remark),
_infoList(Icons.access_time_rounded, color.primary, request.time.toString()), _infoList(Icons.access_time_rounded, color.primary, request.time.toString()),
const SizedBox(height: 10.0), const SizedBox(height: 10.0),

13
lib/apps/group_chat/detail.dart

@ -262,11 +262,12 @@ class _GroupChatDetailState extends State<GroupChatDetail> {
showShadowDialog(context, Icons.info, lang.groupChat, showShadowDialog(context, Icons.info, lang.groupChat,
UserInfo( UserInfo(
app: 'add-group', app: 'add-group',
id: 'EG' + this.group!.gid.toUpperCase(), id: this.group!.gid,
name: this.group!.name, name: this.group!.name,
addr: '0x' + this.group!.addr, addr: this.group!.addr,
title: this.group!.type.lang(lang), title: this.group!.type.lang(lang),
bio: this.group!.bio, bio: this.group!.bio,
pre: 'EG',
), ),
0.0, 0.0,
); );
@ -696,7 +697,7 @@ class MemberDetail extends StatefulWidget {
} }
class _MemberDetailState extends State<MemberDetail> { class _MemberDetailState extends State<MemberDetail> {
Widget _infoListTooltip(icon, color, text) { Widget _infoListTooltip(icon, color, text, short) {
return Container( return Container(
width: 300.0, width: 300.0,
padding: const EdgeInsets.symmetric(vertical: 10.0), padding: const EdgeInsets.symmetric(vertical: 10.0),
@ -707,7 +708,7 @@ class _MemberDetailState extends State<MemberDetail> {
Expanded( Expanded(
child: Tooltip( child: Tooltip(
message: text, message: text,
child: Text(betterPrint(text)), child: Text(short),
) )
) )
] ]
@ -730,8 +731,8 @@ class _MemberDetailState extends State<MemberDetail> {
const SizedBox(height: 10.0), const SizedBox(height: 10.0),
const Divider(height: 1.0, color: Color(0x40ADB0BB)), const Divider(height: 1.0, color: Color(0x40ADB0BB)),
const SizedBox(height: 10.0), const SizedBox(height: 10.0),
_infoListTooltip(Icons.person, color.primary, widget.member.mid), _infoListTooltip(Icons.person, color.primary, gidText(widget.member.mid), gidPrint(widget.member.mid)),
_infoListTooltip(Icons.location_on, color.primary, widget.member.addr), _infoListTooltip(Icons.location_on, color.primary, addrText(widget.member.addr), addrPrint(widget.member.addr)),
if (widget.isGroupOwner) if (widget.isGroupOwner)
Container( Container(
padding: const EdgeInsets.only(top: 20.0, bottom: 10.0), padding: const EdgeInsets.only(top: 20.0, bottom: 10.0),

9
lib/global.dart

@ -34,13 +34,4 @@ class Global {
static changeHttp(String newHttp) { static changeHttp(String newHttp) {
Global.httpRpc = newHttp; Global.httpRpc = newHttp;
} }
static printAddr() {
final len = Global.addr.length;
if (len > 8) {
return Global.addr.substring(0, 8) + '...' + Global.addr.substring(len - 6, len);
} else {
return Global.addr;
}
}
} }

14
lib/pages/account_restore.dart

@ -4,6 +4,7 @@ import 'package:provider/provider.dart';
import 'package:esse/l10n/localizations.dart'; import 'package:esse/l10n/localizations.dart';
import 'package:esse/utils/device_info.dart'; import 'package:esse/utils/device_info.dart';
import 'package:esse/utils/better_print.dart';
import 'package:esse/widgets/button_text.dart'; import 'package:esse/widgets/button_text.dart';
import 'package:esse/widgets/shadow_dialog.dart'; import 'package:esse/widgets/shadow_dialog.dart';
import 'package:esse/widgets/show_pin.dart'; import 'package:esse/widgets/show_pin.dart';
@ -294,8 +295,8 @@ class _AccountRestorePageState extends State<AccountRestorePage> {
Navigator.of(context).pop(); Navigator.of(context).pop();
if (app == 'distribute' && params.length == 4) { if (app == 'distribute' && params.length == 4) {
final name = params[0]; final name = params[0];
//final id = params[1]; //final id = gidParse(params[1]);
final addr = params[2]; final addr = addrParse(params[2]);
final mnemonicWords = params[3]; final mnemonicWords = params[3];
setState(() { setState(() {
this._addrOnline = true; this._addrOnline = true;
@ -304,7 +305,7 @@ class _AccountRestorePageState extends State<AccountRestorePage> {
this._wordChecked = false; this._wordChecked = false;
this._statusChecked = true; this._statusChecked = true;
this._name = name; this._name = name;
this._addrController.text = addr; this._addrController.text = addrText(addr);
this._mnemoicWords = mnemonicWords.split(" "); this._mnemoicWords = mnemonicWords.split(" ");
}); });
} }
@ -356,10 +357,9 @@ class _AccountRestorePageState extends State<AccountRestorePage> {
if (this._name == '') { if (this._name == '') {
this._name = defaultName; this._name = defaultName;
} }
var addr = this._addrController.text; final addr = addrParse(this._addrController.text.trim());
if (addr.length > 2 && addr.substring(0, 2) == '0x') { if (addr.length < 2) {
//substring(2); if has 0x, need remove return;
addr = addr.substring(2);
} }
final info = await deviceInfo(); final info = await deviceInfo();

2
lib/pages/home.dart

@ -179,7 +179,7 @@ class _HomeListState extends State<HomeList> {
lang.info, lang.info,
UserInfo( UserInfo(
app: 'add-friend', app: 'add-friend',
id: provider.activedAccount.id, id: provider.id,
name: provider.activedAccount.name, name: provider.activedAccount.name,
addr: Global.addr)); addr: Global.addr));
} }

4
lib/pages/setting/network.dart

@ -157,7 +157,7 @@ class _NetworkDetailState extends State<NetworkDetail> {
size: 18.0, size: 18.0,
color: color.primary), color: color.primary),
SizedBox(width: 15.0), SizedBox(width: 15.0),
Text(betterPrint(item[0]), Text(addrPrint(item[0]),
style: TextStyle(fontSize: 14.0)) style: TextStyle(fontSize: 14.0))
])); ]));
}), }),
@ -177,7 +177,7 @@ class _NetworkDetailState extends State<NetworkDetail> {
Icon(Icons.cloud_done_outlined, Icon(Icons.cloud_done_outlined,
size: 18.0, color: color.primary), size: 18.0, color: color.primary),
SizedBox(width: 15.0), SizedBox(width: 15.0),
Text(betterPrint(item), Text(addrPrint(item),
style: TextStyle(fontSize: 14.0)), style: TextStyle(fontSize: 14.0)),
])); ]));
}), }),

12
lib/pages/setting/profile.dart

@ -23,7 +23,7 @@ class _ProfileDetailState extends State<ProfileDetail> {
bool _mnemoicShow = false; bool _mnemoicShow = false;
List<String> _mnemoicWords = []; List<String> _mnemoicWords = [];
Widget _infoListTooltip(icon, color, text) { Widget _infoListTooltip(icon, color, text, short) {
return SizedBox( return SizedBox(
width: 300.0, width: 300.0,
height: 40.0, height: 40.0,
@ -33,7 +33,7 @@ class _ProfileDetailState extends State<ProfileDetail> {
Expanded( Expanded(
child: Tooltip( child: Tooltip(
message: text, message: text,
child: Text(betterPrint(text)), child: Text(short),
)) ))
]), ]),
); );
@ -157,8 +157,8 @@ class _ProfileDetailState extends State<ProfileDetail> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
children: [ children: [
_infoListTooltip(Icons.person, color.primary, account.id), _infoListTooltip(Icons.person, color.primary, gidText(account.gid), gidPrint(account.gid)),
_infoListTooltip(Icons.location_on, color.primary, Global.addr), _infoListTooltip(Icons.location_on, color.primary, addrText(Global.addr), addrPrint(Global.addr)),
SizedBox( SizedBox(
width: 300.0, width: 300.0,
height: 40.0, height: 40.0,
@ -168,7 +168,7 @@ class _ProfileDetailState extends State<ProfileDetail> {
const SizedBox(width: 20.0), const SizedBox(width: 20.0),
TextButton( TextButton(
onPressed: () => _pinCheck(account.lock, onPressed: () => _pinCheck(account.lock,
() => _changePin(context, account.id, account.lock, lang.setPin), () => _changePin(context, account.gid, account.lock, lang.setPin),
lang.verifyPin, lang.verifyPin,
), ),
child: Text(lang.change + ' PIN'), child: Text(lang.change + ' PIN'),
@ -192,7 +192,7 @@ class _ProfileDetailState extends State<ProfileDetail> {
) )
: TextButton( : TextButton(
onPressed: () => _pinCheck(account.lock, onPressed: () => _pinCheck(account.lock,
() => _showMnemonic(account.id, account.lock), lang.verifyPin), () => _showMnemonic(account.gid, account.lock), lang.verifyPin),
child: Text(lang.show + ' ' + lang.mnemonic), child: Text(lang.show + ' ' + lang.mnemonic),
), ),
]), ]),

4
lib/provider.dart

@ -19,7 +19,7 @@ class AccountProvider extends ChangeNotifier {
Account get activedAccount => this.accounts[activedAccountId]!; Account get activedAccount => this.accounts[activedAccountId]!;
/// current user's did. /// current user's did.
String get id => this.activedAccount.id; String get id => this.activedAccount.gid;
bool systemAppFriendAddNew = false; bool systemAppFriendAddNew = false;
@ -239,7 +239,7 @@ class AccountProvider extends ChangeNotifier {
// -- callback when receive rpc info. -- // // -- callback when receive rpc info. -- //
_systemInfo(List params) { _systemInfo(List params) {
Global.addr = '0x' + params[0]; Global.addr = params[0];
} }
_accountLogin(List _params) { _accountLogin(List _params) {

3
lib/security.dart

@ -9,6 +9,7 @@ import 'package:esse/widgets/show_pin.dart';
import 'package:esse/pages/account_generate.dart'; import 'package:esse/pages/account_generate.dart';
import 'package:esse/pages/account_restore.dart'; import 'package:esse/pages/account_restore.dart';
import 'package:esse/utils/logined_cache.dart'; import 'package:esse/utils/logined_cache.dart';
import 'package:esse/utils/better_print.dart';
import 'package:esse/account.dart'; import 'package:esse/account.dart';
import 'package:esse/global.dart'; import 'package:esse/global.dart';
import 'package:esse/rpc.dart'; import 'package:esse/rpc.dart';
@ -268,7 +269,7 @@ class _SecurityPageState extends State<SecurityPage> {
style: TextStyle(fontSize: 16) style: TextStyle(fontSize: 16)
), ),
), ),
Text(" (${account.printShortId()})", style: TextStyle(fontSize: 16)), Text(" (${gidPrint(account.gid)})", style: TextStyle(fontSize: 16)),
] ]
), ),
); );

42
lib/utils/better_print.dart

@ -1,16 +1,11 @@
String betterPrint(String? info) { String gidText(String? gid, [String pre='EH']) {
if (info == null) { if (gid == null) {
return ''; return '';
} }
final len = info.length; return pre + gid.toUpperCase();
if (len > 8) {
return info.substring(0, 8) + '...' + info.substring(len - 6, len);
} else {
return info;
}
} }
String gidPrint(String? gid) { String gidPrint(String? gid, [String pre='EH']) {
if (gid == null) { if (gid == null) {
return ''; return '';
} }
@ -18,12 +13,27 @@ String gidPrint(String? gid) {
final info = gid.toUpperCase(); final info = gid.toUpperCase();
final len = info.length; final len = info.length;
if (len > 8) { if (len > 8) {
return 'EH' + info.substring(0, 6) + '...' + info.substring(len - 4, len); return pre + info.substring(0, 4) + '...' + info.substring(len - 4, len);
} else { } else {
return info; return info;
} }
} }
String gidParse(String gid, [String pre='EH']) {
if (gid.length > 2 && gid.substring(0, 2) == pre) {
return gid.substring(2);
} else {
return gid;
}
}
String addrText(String? addr) {
if (addr == null) {
return '';
}
return '0x' + addr.toLowerCase();
}
String addrPrint(String? addr) { String addrPrint(String? addr) {
if (addr == null) { if (addr == null) {
return ''; return '';
@ -31,9 +41,17 @@ String addrPrint(String? addr) {
final info = addr.toLowerCase(); final info = addr.toLowerCase();
final len = info.length; final len = info.length;
if (len > 8) { if (len > 12) {
return '0x' + info.substring(0, 8) + '...' + info.substring(len - 6, len); return '0x' + info.substring(0, 6) + '...' + info.substring(len - 6, len);
} else { } else {
return info; return info;
} }
} }
String addrParse(String addr) {
if (addr.length > 2 && addr.substring(0, 2) == '0x') {
return addr.substring(2);
} else {
return addr;
}
}

7
lib/widgets/chat_message.dart

@ -43,7 +43,7 @@ class ChatMessage extends StatelessWidget {
child: Column(children: [ child: Column(children: [
Text(name, maxLines: 1, overflow: TextOverflow.ellipsis, style: TextStyle(color: color.onPrimary, fontSize: 16.0)), Text(name, maxLines: 1, overflow: TextOverflow.ellipsis, style: TextStyle(color: color.onPrimary, fontSize: 16.0)),
const SizedBox(height: 4.0), const SizedBox(height: 4.0),
Text(betterPrint(gid), style: TextStyle(color: Colors.grey, fontSize: 12.0)), Text(gidPrint(gid), style: TextStyle(color: Colors.grey, fontSize: 12.0)),
]))]), ]))]),
const SizedBox(height: 5.0), const SizedBox(height: 5.0),
const Divider(height: 1.0, color: Color(0x40ADB0BB)), const Divider(height: 1.0, color: Color(0x40ADB0BB)),
@ -216,14 +216,13 @@ class ChatMessage extends StatelessWidget {
// contact [name, gid, addr, avatar] // contact [name, gid, addr, avatar]
final infos = message.showContact(); final infos = message.showContact();
if (infos[1].length > 0) { if (infos[1].length > 0) {
final gid = 'EH' + infos[1].toUpperCase();
return GestureDetector( return GestureDetector(
onTap: () => showShadowDialog( onTap: () => showShadowDialog(
context, context,
Icons.person_rounded, Icons.person_rounded,
lang.contactCard, lang.contactCard,
UserInfo( UserInfo(
showQr: false, id: gid, addr: '0x' + infos[2], name: infos[0], showQr: false, id: infos[1], addr: infos[2], name: infos[0],
remark: lang.fromContactCard(name), remark: lang.fromContactCard(name),
avatar: Avatar(width: 100.0, name: infos[0], avatarPath: infos[3]), avatar: Avatar(width: 100.0, name: infos[0], avatarPath: infos[3]),
callback: () { callback: () {
@ -236,7 +235,7 @@ class ChatMessage extends StatelessWidget {
), ),
child: _showContactCard( child: _showContactCard(
Avatar(width: 40.0, name: infos[0], avatarPath: infos[3]), Avatar(width: 40.0, name: infos[0], avatarPath: infos[3]),
gid, infos[0], lang.contactCard, color infos[1], infos[0], lang.contactCard, color
) )
); );
} else { } else {

14
lib/widgets/user_info.dart

@ -19,6 +19,7 @@ class UserInfo extends StatefulWidget {
final bool showQr; final bool showQr;
final Widget? avatar; final Widget? avatar;
Map? qrInfo; Map? qrInfo;
final String pre;
UserInfo({Key? key, UserInfo({Key? key,
required this.id, required this.id,
@ -30,12 +31,13 @@ class UserInfo extends StatefulWidget {
this.callback, this.callback,
this.avatar, this.avatar,
this.title, this.title,
this.showQr = true this.showQr = true,
this.pre = 'EH',
}) : super(key: key) { }) : super(key: key) {
if (this.showQr) { if (this.showQr) {
this.qrInfo = { this.qrInfo = {
"app": this.app, "app": this.app,
"params": [this.id, this.addr, this.name], "params": [gidText(this.id, this.pre), addrText(this.addr), this.name],
}; };
} }
} }
@ -112,7 +114,7 @@ class _UserInfoState extends State<UserInfo> {
const SizedBox(height: 20), const SizedBox(height: 20),
InkWell( InkWell(
onTap: () { onTap: () {
Clipboard.setData(ClipboardData(text: widget.id)); Clipboard.setData(ClipboardData(text: gidText(widget.id)));
setState(() { setState(() {
idCopy = true; idCopy = true;
addrCopy = false; addrCopy = false;
@ -124,7 +126,7 @@ class _UserInfoState extends State<UserInfo> {
children: [ children: [
Icon(Icons.person, size: 20.0, color: color.primary), Icon(Icons.person, size: 20.0, color: color.primary),
Spacer(), Spacer(),
Text(betterPrint(widget.id), style: TextStyle(fontSize: 14, color: idColor)), Text(gidPrint(widget.id, widget.pre), style: TextStyle(fontSize: 14, color: idColor)),
Spacer(), Spacer(),
Icon(idCopy ? Icons.file_copy : Icons.copy, size: 20.0, color: color.primary), Icon(idCopy ? Icons.file_copy : Icons.copy, size: 20.0, color: color.primary),
] ]
@ -134,7 +136,7 @@ class _UserInfoState extends State<UserInfo> {
const SizedBox(height: 16), const SizedBox(height: 16),
InkWell( InkWell(
onTap: () { onTap: () {
Clipboard.setData(ClipboardData(text: widget.addr)); Clipboard.setData(ClipboardData(text: addrText(widget.addr)));
setState(() { setState(() {
idCopy = false; idCopy = false;
addrCopy = true; addrCopy = true;
@ -146,7 +148,7 @@ class _UserInfoState extends State<UserInfo> {
children: [ children: [
Icon(Icons.location_on, size: 20.0, color: color.primary), Icon(Icons.location_on, size: 20.0, color: color.primary),
Spacer(), Spacer(),
Text(betterPrint(widget.addr), style: TextStyle(fontSize: 14, color: addrColor)), Text(addrPrint(widget.addr), style: TextStyle(fontSize: 14, color: addrColor)),
Spacer(), Spacer(),
Icon(addrCopy ? Icons.file_copy : Icons.copy, size: 20.0, color: color.primary), Icon(addrCopy ? Icons.file_copy : Icons.copy, size: 20.0, color: color.primary),
] ]

Loading…
Cancel
Save