Hibok
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

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