Hibok
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

128 行
4.3 KiB

  1. import 'dart:convert';
  2. import 'package:cached_network_image/cached_network_image.dart';
  3. import 'package:chat/data/UserData.dart';
  4. import 'package:chat/data/WebData.dart';
  5. import 'package:chat/data/constants.dart';
  6. import 'package:chat/generated/i18n.dart';
  7. import 'package:chat/models/ref_name_provider.dart';
  8. import 'package:chat/utils/screen.dart';
  9. import 'package:flutter/material.dart';
  10. import 'package:provider/provider.dart';
  11. import 'package:qr_flutter/qr_flutter.dart';
  12. class MyQr extends StatelessWidget {
  13. @override
  14. Widget build(BuildContext context) {
  15. return Container(
  16. alignment: Alignment.center,
  17. margin: EdgeInsets.only(top: 55.5, left: 25, right: 25),
  18. height: 400,
  19. decoration: BoxDecoration(
  20. color: Colors.white,
  21. borderRadius: BorderRadius.circular(10),
  22. ),
  23. child: Column(
  24. mainAxisSize: MainAxisSize.min,
  25. children: <Widget>[
  26. _head(context),
  27. _qrImg(),
  28. Container(
  29. padding: EdgeInsets.all(20),
  30. child: Text(
  31. I18n.of(context).scan_and_add,
  32. style: TextStyle(fontSize: 12.5),
  33. ),
  34. )
  35. ],
  36. ),
  37. );
  38. }
  39. _qrImg() {
  40. //var headImg = UserData().basicInfo.headimgurl;
  41. final size = 205.5;
  42. var dayAfter =
  43. new DateTime.now().add(new Duration(minutes: 5)).millisecondsSinceEpoch;
  44. var myId = UserData().basicInfo.userId;
  45. final groupIdAndTime = 'type=0&sessionId=$myId&expirationTime=$dayAfter';
  46. var encodeStr = base64Encode(utf8.encode(groupIdAndTime));
  47. return QrImage(
  48. data: 'https://henho.jphgames.com/?$encodeStr',
  49. version: QrVersions.auto,
  50. size: size,
  51. );
  52. }
  53. _head(BuildContext context) {
  54. var userInfo = UserData().basicInfo;
  55. var headImg = userInfo.headimgurl;
  56. var name = Provider.of<RefNameProvider>(context)
  57. .getRefName(userInfo.userId, userInfo.nickName);
  58. var isMan = userInfo.sex == 1;
  59. var city = userInfo.city;
  60. var country = userInfo.country;
  61. return Container(
  62. padding: EdgeInsets.all(20),
  63. child: Row(
  64. children: <Widget>[
  65. ClipRRect(
  66. borderRadius: BorderRadius.circular(10),
  67. child: Container(
  68. width: 60,
  69. height: 60,
  70. child: headImg == null || headImg == ''
  71. ? Image.asset(Constants.DefaultHeadImgUrl)
  72. : CachedNetworkImage(
  73. imageUrl: headImg,
  74. placeholder: (context, url) =>
  75. Image.asset(Constants.DefaultHeadImgUrl)))),
  76. SizedBox(width: 10),
  77. Column(
  78. crossAxisAlignment: CrossAxisAlignment.start,
  79. children: <Widget>[
  80. Row(
  81. children: <Widget>[
  82. Container(
  83. constraints: BoxConstraints(maxWidth: 170),
  84. child: Text(name,
  85. textScaleFactor: 1.0,
  86. overflow: TextOverflow.ellipsis,
  87. style: TextStyle(
  88. color: Constants.BlackTextColor,
  89. fontWeight: FontWeight.w500,
  90. fontSize: 16))),
  91. SizedBox(width: 5),
  92. Icon(
  93. IconData(
  94. isMan ? 0xe639 : 0xe638,
  95. fontFamily: 'iconfont',
  96. ),
  97. color: isMan
  98. ? const Color(0xff0072ff)
  99. : const Color(0xffff0486),
  100. size: 13,
  101. )
  102. ],
  103. ),
  104. //地址
  105. SizedBox(height: 10),
  106. fixedText(
  107. country == 'China'
  108. ? '${WebData().getCountry(country)}'
  109. : '${WebData().getCountry(country)} ${WebData().getCity(city)}',
  110. fontSize: 11,
  111. color: Constants.GreyTextColor)
  112. ],
  113. )
  114. ],
  115. ));
  116. }
  117. }