|
|
- import 'dart:convert';
-
- import 'package:flutter/material.dart';
- import 'package:http/http.dart' as http;
- import 'package:flutter_dotenv/flutter_dotenv.dart';
-
- import '/utils/storage/session_cookie.dart';
- import '/components/user_search_result.dart';
- import '/data_models/user_search.dart';
-
-
- class FriendAddSearch extends StatefulWidget {
- const FriendAddSearch({
- Key? key,
- }) : super(key: key);
-
- @override
- State<FriendAddSearch> createState() => _FriendAddSearchState();
- }
-
- class _FriendAddSearchState extends State<FriendAddSearch> {
- UserSearch? user;
- Text centerMessage = const Text('Search to add friends...');
-
- TextEditingController searchController = TextEditingController();
-
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- appBar: AppBar(
- elevation: 0,
- automaticallyImplyLeading: false,
- flexibleSpace: SafeArea(
- child: Container(
- padding: const EdgeInsets.only(right: 16),
- child: Row(
- children: <Widget>[
- IconButton(
- onPressed: () {
- Navigator.pop(context);
- },
- icon: Icon(
- Icons.arrow_back,
- color: Theme.of(context).appBarTheme.iconTheme?.color,
- ),
- ),
- const SizedBox(width: 2),
- Expanded(
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- mainAxisAlignment: MainAxisAlignment.center,
- children: <Widget>[
- Text(
- 'Add Friends',
- style: TextStyle(
- fontSize: 16,
- fontWeight: FontWeight.w600,
- color: Theme.of(context).appBarTheme.toolbarTextStyle?.color
- )
- ),
- ],
- )
- )
- ]
- ),
- ),
- ),
- ),
- body: Stack(
- children: <Widget>[
- Padding(
- padding: const EdgeInsets.only(top: 16,left: 16,right: 16),
- child: TextField(
- autofocus: true,
- decoration: InputDecoration(
- hintText: 'Search...',
- prefixIcon: const Icon(
- Icons.search,
- size: 20
- ),
- suffixIcon: Padding(
- padding: const EdgeInsets.only(top: 4, bottom: 4, right: 8),
- child: OutlinedButton(
- style: ButtonStyle(
- backgroundColor: MaterialStateProperty.all(Theme.of(context).colorScheme.secondary),
- foregroundColor: MaterialStateProperty.all(Theme.of(context).colorScheme.onSecondary),
- shape: MaterialStateProperty.all(RoundedRectangleBorder(borderRadius: BorderRadius.circular(16.0))),
- elevation: MaterialStateProperty.all(4),
- ),
- onPressed: searchUsername,
- child: const Icon(Icons.search, size: 25),
- ),
- ),
- ),
- controller: searchController,
- ),
- ),
- Padding(
- padding: const EdgeInsets.only(top: 90),
- child: showFriend(),
- ),
- ],
- ),
- );
- }
-
- Widget showFriend() {
- if (user == null) {
- return Center(
- child: centerMessage,
- );
- }
-
- return UserSearchResult(
- user: user!,
- );
- }
-
- Future<void> searchUsername() async {
- if (searchController.text.isEmpty) {
- return;
- }
-
- Map<String, String> params = {};
- params['username'] = searchController.text;
- var uri = Uri.parse('${dotenv.env["SERVER_URL"]}api/v1/auth/users');
- uri = uri.replace(queryParameters: params);
-
- var resp = await http.get(
- uri,
- headers: {
- 'cookie': await getSessionCookie(),
- }
- );
-
- if (resp.statusCode != 200) {
- user = null;
- centerMessage = const Text('User not found');
- setState(() {});
- return;
- }
-
- user = UserSearch.fromJson(
- jsonDecode(resp.body)
- );
-
- setState(() {});
- FocusScope.of(context).unfocus();
- searchController.clear();
- }
- }
|