Forked from
vjrj / ginkgo
792 commits behind the upstream repository.
contact_search_page.dart 10.36 KiB
import 'dart:convert';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_nfc_kit/flutter_nfc_kit.dart';
import 'package:http/http.dart';
import '../../../data/models/contact.dart';
import '../../../data/models/contact_cubit.dart';
import '../../../data/models/contact_state.dart';
import '../../../data/models/payment_cubit.dart';
import '../../../data/models/payment_state.dart';
import '../../../g1/api.dart';
import '../../../g1/g1_helper.dart';
import '../../contacts_cache.dart';
import '../../logger.dart';
import '../../nfc_helper.dart';
import '../../qr_manager.dart';
import '../../ui_helpers.dart';
import '../connectivity_widget_wrapper_wrapper.dart';
import '../custom_error_widget.dart';
import '../loading_box.dart';
import '../third_screen/contacts_page.dart';
import 'contact_fav_icon.dart';
class ContactSearchPage extends StatefulWidget {
const ContactSearchPage({super.key, this.uri, this.forPayment = true});
final String? uri;
final bool forPayment;
@override
State<ContactSearchPage> createState() => _ContactSearchPageState();
}
class _ContactSearchPageState extends State<ContactSearchPage> {
final TextEditingController _searchController = TextEditingController();
String _searchTerm = '';
List<Contact> _results = <Contact>[];
bool _isLoading = false;
Future<void> _search() async {
if (_searchTerm.length < 3) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(tr('search_limitation'))),
);
return;
}
final bool isConnected = await ConnectivityWidgetWrapperWrapper.isConnected;
setState(() {
_isLoading = true;
});
final ContactsCubit contactsCubit = context.read<ContactsCubit>();
setState(() {
_results = contactsCubit.search(_searchTerm);
if (inDevelopment) {
logger('Found: ${_results.length} in contacts');
}
});
if (isConnected) {
final Response cPlusResponse = await searchCPlusUser(_searchTerm);
if (cPlusResponse.statusCode != 404) {
// Add cplus users
final List<dynamic> hits = ((const JsonDecoder()