add_friend.dart 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import 'package:dio/dio.dart';
  2. import 'package:e2ee_chat/common/api.dart';
  3. import 'package:e2ee_chat/common/global.dart';
  4. import 'package:e2ee_chat/l10n/localization_intl.dart';
  5. import 'package:e2ee_chat/presenter/login.dart';
  6. import 'package:e2ee_chat/presenter/theme.dart';
  7. import 'package:flutter/material.dart';
  8. import 'package:provider/provider.dart';
  9. import 'package:fluttertoast/fluttertoast.dart';
  10. class AddFriendView extends StatefulWidget {
  11. @override
  12. _AddFriendViewState createState() => _AddFriendViewState();
  13. }
  14. class _AddFriendViewState extends State<AddFriendView> {
  15. TextEditingController _unameController = new TextEditingController();
  16. GlobalKey _formKey = new GlobalKey<FormState>();
  17. @override
  18. Widget build(BuildContext context) {
  19. return Scaffold(
  20. appBar: AppBar(title: Text(GmLocalizations.of(context).searchUser)),
  21. body: Padding(
  22. padding: const EdgeInsets.all(16.0),
  23. child: Form(
  24. key: _formKey,
  25. autovalidateMode: AutovalidateMode.always, // TODO: what is AutovalidateMode?
  26. child: Column(
  27. children: <Widget>[
  28. TextFormField(
  29. controller: _unameController,
  30. decoration: InputDecoration(
  31. labelText: GmLocalizations.of(context).userName,
  32. hintText: GmLocalizations.of(context).userNameOrEmail,
  33. prefixIcon: Icon(Icons.search),
  34. ),
  35. validator: (v) {
  36. return v!.trim().isNotEmpty ? null : GmLocalizations.of(context).userNameRequired;
  37. }),
  38. Padding(
  39. padding: const EdgeInsets.only(top: 25),
  40. child: ConstrainedBox(
  41. constraints: BoxConstraints.expand(height: 55.0),
  42. child: ElevatedButton(
  43. style: ButtonStyle(
  44. foregroundColor: MaterialStateProperty.all<Color>(Provider.of<ThemeModel>(context).theme),
  45. //TODO: something wrong with text color
  46. textStyle: MaterialStateProperty.all<TextStyle>(TextStyle(color: Colors.white)),
  47. ),
  48. onPressed: _findUser,
  49. child: Text(GmLocalizations.of(context).search),
  50. ),
  51. ),
  52. ),
  53. ],
  54. ),
  55. ),
  56. ),
  57. );
  58. }
  59. void _findUser() async {
  60. // 提交前,先验证各个表单字段是否合法
  61. if ((_formKey.currentState as FormState).validate()) {
  62. Fluttertoast.showToast(msg: GmLocalizations.of(context).loading);
  63. bool result = await Api().addFriend(_unameController.text);
  64. if (!result) {
  65. Fluttertoast.showToast(msg: "发送好友申请失败");
  66. } else {
  67. Fluttertoast.showToast(msg: "好友申请已发送");
  68. }
  69. }
  70. // TODO: get user details
  71. }
  72. }