SearchUserPage.dart 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_habit/common/I18N.dart';
  3. import 'package:flutter_habit/common/components/PopMenus.dart';
  4. import 'package:flutter_habit/common/components/UserListTile.dart';
  5. import 'package:flutter_habit/provider/UserProvider.dart';
  6. import 'package:flutter_habit/common/utils/VerificationUtils.dart';
  7. import 'package:flutter_habit/network/Repository.dart';
  8. import 'package:provider/provider.dart';
  9. class SearchUserPage extends StatefulWidget {
  10. @override
  11. _SearchUserPageState createState() => _SearchUserPageState();
  12. }
  13. class _SearchUserPageState extends State<SearchUserPage> {
  14. late bool isRequesting;
  15. List? res;
  16. TextEditingController? nameController;
  17. @override
  18. void initState() {
  19. super.initState();
  20. isRequesting = false;
  21. res = [];
  22. nameController = TextEditingController();
  23. nameController!.text =
  24. Provider.of<UserProvider>(context, listen: false).userName!;
  25. }
  26. @override
  27. Widget build(BuildContext context) {
  28. return Scaffold(
  29. appBar: AppBar(
  30. title: Text(I18N.of("搜索用户")),
  31. ),
  32. body: Padding(
  33. padding: EdgeInsets.all(16),
  34. child: ListView(
  35. children: <Widget>[
  36. TextFormField(
  37. autovalidateMode: AutovalidateMode.always,
  38. validator: (v) {
  39. if (VerifyUtils.isUserName(v)) {
  40. return null;
  41. }
  42. return I18N.of("长度为2-10个不包括任何符号的字符");
  43. },
  44. controller: nameController,
  45. decoration: InputDecoration(
  46. prefixIcon: Icon(Icons.perm_contact_calendar),
  47. labelText: I18N.of("用户名"),
  48. hintText: I18N.of("输入用户名查询"),
  49. suffixIcon: Padding(
  50. padding: EdgeInsets.only(top: 10),
  51. child: ElevatedButton(
  52. child: Text(
  53. I18N.of("搜索"),
  54. style: TextStyle(
  55. color: Theme.of(context).cardColor,
  56. ),
  57. ),
  58. style: ButtonStyle(
  59. backgroundColor: MaterialStateProperty.all(
  60. Theme.of(context).colorScheme.secondary),
  61. shape: MaterialStateProperty.all(RoundedRectangleBorder(
  62. borderRadius: BorderRadius.circular(1.0),
  63. ))),
  64. onPressed: isRequesting
  65. ? null
  66. : () async {
  67. isRequesting = true;
  68. setState(() {});
  69. res!.clear();
  70. if (VerifyUtils.isUserName(nameController!.text)) {
  71. res = await Repository.getInstance()!
  72. .getUserInfoLikeUserName(
  73. context, nameController!.text);
  74. }
  75. isRequesting = false;
  76. setState(() {});
  77. },
  78. ),
  79. ),
  80. ),
  81. ),
  82. Column(
  83. children: res!.map((i) {
  84. return UserListTile(
  85. uid: i,
  86. onPress: () async {
  87. await PopMenus.userInfo(context: context, uid: i);
  88. },
  89. );
  90. }).toList(),
  91. )
  92. ],
  93. ),
  94. ),
  95. );
  96. }
  97. }