Skip to content
Snippets Groups Projects
home.dart 3.56 KiB
Newer Older
import 'dart:convert';
poka's avatar
poka committed
import 'dart:io';
import 'dart:math';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
poka's avatar
poka committed
import 'package:flutter/services.dart';
poka's avatar
poka committed
import 'dart:async';
import 'package:gecko/globals.dart';
import 'package:package_info/package_info.dart';
import 'package:path_provider/path_provider.dart';

class HomeProvider with ChangeNotifier {
  int _currentIndex = 0;
poka's avatar
poka committed
  bool isSearching;
  Icon searchIcon = Icon(Icons.search);
  final TextEditingController searchQuery = new TextEditingController();
  Widget appBarTitle = Text('Ğecko', style: TextStyle(color: Colors.grey[850]));
poka's avatar
poka committed

  get currentIndex => _currentIndex;

  set currentIndex(int index) {
    _currentIndex = index;
    notifyListeners();
  }

  Future<String> getAppVersion() async {
poka's avatar
poka committed
    PackageInfo packageInfo = await PackageInfo.fromPlatform();
    String version = packageInfo.version;
    String buildNumber = packageInfo.buildNumber;

    notifyListeners();
    return version + '+' + buildNumber;
  }

  Future<String> getValidEndpoint() async {
    List _listEndpoints = await rootBundle
        .loadString('config/gva_endpoints.json')
        .then((jsonStr) => jsonDecode(jsonStr));
    _listEndpoints.shuffle();
poka's avatar
poka committed

    int i = 0;
    String _endpoint;
poka's avatar
poka committed
    int _statusCode = 0;
poka's avatar
poka committed
    final _client = new HttpClient();
    _client.connectionTimeout = const Duration(milliseconds: 800);
poka's avatar
poka committed

    do {
      i++;
      print(i.toString() + ' ème essai de recherche de endpoint GVA.');
      print('Try GVA endpoint: ${_listEndpoints[i]}');
      if (i > 2) {
        print('NO VALID GVA ENDPOINT FOUND');
        _endpoint = 'HS';
        break;
      }
      if (i != 0) {
        await Future.delayed(const Duration(milliseconds: 300));
      }

poka's avatar
poka committed
        final request = await _client.postUrl(Uri.parse(_listEndpoints[i]));
        final response = await request.close();

        _endpoint = _listEndpoints[i];
poka's avatar
poka committed
        _statusCode = response.statusCode;
      } on TimeoutException catch (_) {
        print('This endpoint is timeout, next');
poka's avatar
poka committed
        _statusCode = 50;
        continue;
      } on SocketException catch (_) {
        print('This endpoint is a bad endpoint, next');
poka's avatar
poka committed
        _statusCode = 70;
      } on Exception {
        print('Unknown error');
poka's avatar
poka committed
        _statusCode = 60;
poka's avatar
poka committed
    } while (_statusCode != 400);

    print('ENDPOINT: ' + _endpoint);
poka's avatar
poka committed
    return _endpoint;
  }

  Future getAppPath() async {
    appPath = await getApplicationDocumentsDirectory();
    walletsDirectory = Directory('${appPath.path}/wallets');

    bool isWalletFolderExist = await walletsDirectory.exists();

    if (!isWalletFolderExist) {
      await Directory(walletsDirectory.path).create();
    }
poka's avatar
poka committed
  }

poka's avatar
poka committed
  Future createDefaultAvatar() async {
    File defaultAvatar = File(appPath.path + '/default_avatar.png');
    final bool isAvatarExist = await defaultAvatar.exists();
    if (!isAvatarExist) {
      final byteData = await rootBundle.load('assets/icon_user.png');
      await defaultAvatar.writeAsBytes(byteData.buffer
          .asUint8List(byteData.offsetInBytes, byteData.lengthInBytes));
    }
  }

poka's avatar
poka committed
  T getRandomElement<T>(List<T> list) {
poka's avatar
poka committed
    final random = Random();
poka's avatar
poka committed
    var i = random.nextInt(list.length);
    return list[i];
  }
poka's avatar
poka committed

  void handleSearchStart() {
    isSearching = true;
    notifyListeners();
  }

  void handleSearchEnd() {
    searchIcon = Icon(
      Icons.search,
      color: Colors.grey[850],
    );
    appBarTitle = Text('Ğecko', style: TextStyle(color: Colors.grey[850]));
    isSearching = false;
    searchQuery.clear();

    notifyListeners();
  }
poka's avatar
poka committed
}