Hibok
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

174 regels
5.1 KiB

  1. import 'dart:convert';
  2. import 'dart:typed_data';
  3. import 'package:chat/data/UserData.dart';
  4. import 'package:chat/data/constants.dart';
  5. import 'package:chat/generated/i18n.dart';
  6. import 'package:chat/map/location_result.dart';
  7. import 'package:chat/utils/app_navigator.dart';
  8. import 'package:chat/utils/screen.dart';
  9. import 'package:chat/utils/upload_util.dart';
  10. import 'package:flutter/material.dart';
  11. import 'package:flutter/services.dart';
  12. import 'package:menu/menu.dart';
  13. class PlaceItem extends StatelessWidget {
  14. final bool isMe;
  15. final List<int> placeContent;
  16. PlaceItem({this.isMe, this.placeContent});
  17. @override
  18. Widget build(BuildContext context) {
  19. LocationResult location =
  20. LocationResult.fromJson(json.decode(utf8.decode(placeContent)));
  21. print('地图截屏大小:${location.screen.length}');
  22. var provider = MemoryImage(Uint8List.fromList(location.screen));
  23. return ClipRRect(
  24. borderRadius: BorderRadius.circular(8),
  25. child: Container(
  26. width: Screen.width - 160,
  27. child: Column(
  28. children: <Widget>[
  29. AddressTitle(address: location.address),
  30. GestureDetector(
  31. child: Container(
  32. height: 100,
  33. width: double.infinity,
  34. child: Image(fit: BoxFit.cover, image: provider),
  35. ),
  36. onTap: () {
  37. print('点击地图');
  38. AppNavigator.pushMapPage(context, location);
  39. },
  40. )
  41. ],
  42. ),
  43. ),
  44. );
  45. }
  46. }
  47. class AddressTitle extends StatefulWidget {
  48. final String address;
  49. AddressTitle({this.address});
  50. @override
  51. _AddressTitleState createState() => _AddressTitleState();
  52. }
  53. class _AddressTitleState extends State<AddressTitle> {
  54. String transTitle;
  55. int curLan = 0;
  56. List<String> transList = [];
  57. Map translateMap = {};
  58. String translateTitle;
  59. bool isTranslating = false;
  60. @override
  61. void initState() {
  62. super.initState();
  63. }
  64. @override
  65. Widget build(BuildContext context) {
  66. return Stack(
  67. children: <Widget>[
  68. InkWell(
  69. onTap: isTranslating ? null : _changeTitle,
  70. child: Menu(
  71. items: [
  72. MenuItem(I18n.of(context).copy, () {
  73. ClipboardData clipboardData = new ClipboardData(
  74. text: translateTitle ?? widget.address);
  75. Clipboard.setData(clipboardData);
  76. }),
  77. ],
  78. child: Container(
  79. padding: EdgeInsets.symmetric(vertical: 5, horizontal: 8),
  80. width: Screen.width - 160,
  81. color: Colors.white,
  82. child: Text(translateTitle ?? widget.address, textScaleFactor: 1.0,)))),
  83. Positioned(
  84. right: 0,
  85. bottom: 0,
  86. child: isTranslating
  87. ? Container(
  88. width: 10,
  89. height: 10,
  90. padding: EdgeInsets.all(1.0),
  91. child: CircularProgressIndicator(
  92. strokeWidth: 1.0,
  93. ))
  94. : InkWell(
  95. child: Icon(
  96. IconData(0xe6a5, fontFamily: Constants.IconFontFamily),
  97. color: Color(0xFF3FBAFD),
  98. size: 20,
  99. ),
  100. onTap: _changeTitle))
  101. ],
  102. );
  103. }
  104. _changeTitle() async {
  105. curLan += 1;
  106. curLan %= 3;
  107. var lang;
  108. switch (curLan) {
  109. case 0:
  110. //lang = 'zh-cn';
  111. lang = LanguageType.SimplifiedChinese;
  112. break;
  113. case 1:
  114. //lang = 'en';
  115. lang = LanguageType.English;
  116. break;
  117. case 2:
  118. //lang = 'vi';
  119. lang = LanguageType.Vietnamese;
  120. break;
  121. default:
  122. }
  123. if (translateMap[lang] != null) {
  124. translateTitle = translateMap[lang];
  125. isTranslating = false;
  126. setState(() {});
  127. return;
  128. }
  129. try {
  130. isTranslating = true;
  131. print('开始翻译 to $lang');
  132. setState(() {});
  133. UploadUtil()
  134. .commitTranslateSource(1, UserData().language, lang, widget.address)
  135. .then((title) {
  136. print('翻译结果 to $title');
  137. if (title != null) {
  138. translateTitle = title;
  139. if (lang == LanguageType.SimplifiedChinese) {
  140. //替换street
  141. translateTitle = translateTitle.replaceAll(
  142. RegExp('street', caseSensitive: false), '街道');
  143. translateTitle = translateTitle.replaceAll(
  144. RegExp('Binh Tan', caseSensitive: false), '平新郡');
  145. translateTitle = translateTitle.replaceAll(
  146. RegExp('Tan Tao', caseSensitive: false), '新桃村');
  147. }
  148. translateMap[lang] = translateTitle;
  149. }
  150. isTranslating = false;
  151. if (mounted) {
  152. setState(() {});
  153. }
  154. });
  155. } catch (e) {
  156. print('翻译错误 $e');
  157. }
  158. }
  159. }