gecko/lib/providers/home.dart

247 lines
7.6 KiB
Dart
Raw Normal View History

// ignore_for_file: use_build_context_synchronously
import 'dart:convert';
2021-01-26 21:00:26 +01:00
import 'dart:io';
import 'dart:math';
2021-09-12 06:47:50 +02:00
// import 'package:audioplayers/audio_cache.dart';
// import 'package:audioplayers/audioplayers.dart';
2022-06-17 01:13:14 +02:00
import 'package:easy_localization/easy_localization.dart';
2021-01-26 21:00:26 +01:00
import 'package:flutter/material.dart';
2021-02-02 20:33:09 +01:00
import 'package:flutter/services.dart';
2021-01-26 21:00:26 +01:00
import 'dart:async';
import 'package:gecko/globals.dart';
2022-05-27 16:58:03 +02:00
import 'package:gecko/models/wallet_data.dart';
2022-08-24 21:53:16 +02:00
import 'package:gecko/models/widgets_keys.dart';
2022-05-27 16:58:03 +02:00
import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/wallets_profiles.dart';
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:gecko/screens/myWallets/wallets_home.dart';
2022-05-27 16:58:03 +02:00
import 'package:gecko/screens/search.dart';
2021-12-20 21:33:03 +01:00
import 'package:hive_flutter/hive_flutter.dart';
2022-05-28 21:15:47 +02:00
import 'package:flutter/foundation.dart' show kDebugMode, kIsWeb;
2021-12-20 21:33:03 +01:00
import 'package:path_provider/path_provider.dart' as pp;
import 'package:package_info_plus/package_info_plus.dart';
import 'package:path_provider/path_provider.dart';
2022-05-27 16:58:03 +02:00
import 'package:provider/provider.dart';
2021-01-26 21:00:26 +01:00
class HomeProvider with ChangeNotifier {
2021-12-23 12:36:09 +01:00
bool? isSearching;
2021-11-14 19:21:20 +01:00
Icon searchIcon = const Icon(Icons.search);
final TextEditingController searchQuery = TextEditingController();
2021-02-16 04:57:13 +01:00
Widget appBarTitle = Text('Ğecko', style: TextStyle(color: Colors.grey[850]));
2022-06-17 01:13:14 +02:00
String homeMessage = "loading".tr();
String defaultMessage = "noLizard".tr();
2021-12-20 21:33:03 +01:00
Future<void> initHive() async {
2021-12-23 12:36:09 +01:00
late Directory hivePath;
2021-12-20 21:33:03 +01:00
2021-12-21 06:56:42 +01:00
if (!kIsWeb) {
if (Platform.isLinux || Platform.isMacOS) {
final home = Platform.environment['HOME'];
hivePath = Directory('$home/.gecko/db');
} else if (Platform.isWindows) {
final home = Platform.environment['UserProfile'];
hivePath = Directory('$home/.gecko/db');
} else if (Platform.isAndroid || Platform.isIOS) {
final home = await pp.getApplicationDocumentsDirectory();
hivePath = Directory('${home.path}/db');
}
if (!await hivePath.exists()) {
await hivePath.create(recursive: true);
}
await Hive.initFlutter(hivePath.path);
} else {
await Hive.initFlutter();
2021-12-20 21:33:03 +01:00
}
// Init app folders
final documentDir = await getApplicationDocumentsDirectory();
imageDirectory = Directory('${documentDir.path}/images');
if (!await imageDirectory.exists()) {
await imageDirectory.create();
}
2021-12-20 21:33:03 +01:00
}
Future<String> getAppVersion() async {
2021-04-19 23:22:45 +02:00
String version;
String buildNumber;
PackageInfo packageInfo = await PackageInfo.fromPlatform();
version = packageInfo.version;
2022-05-28 21:15:47 +02:00
buildNumber = kDebugMode
? packageInfo.buildNumber
: (int.parse(packageInfo.buildNumber) - 1000).toString();
2021-01-26 21:00:26 +01:00
notifyListeners();
return '$version+$buildNumber';
2021-01-26 21:00:26 +01:00
}
Future changeMessage(String newMessage, int seconds) async {
homeMessage = newMessage;
notifyListeners();
await Future.delayed(Duration(seconds: seconds));
2022-06-01 21:00:17 +02:00
if (seconds != 0) homeMessage = defaultMessage;
notifyListeners();
}
Future<List?> getValidEndpoints() async {
await configBox.delete('endpoint');
if (!configBox.containsKey('autoEndpoint')) {
configBox.put('autoEndpoint', true);
}
List listEndpoints = [];
if (!configBox.containsKey('endpoint') ||
configBox.get('endpoint') == [] ||
configBox.get('endpoint') == '') {
listEndpoints = await rootBundle
.loadString('config/gdev_endpoints.json')
.then((jsonStr) => jsonDecode(jsonStr));
listEndpoints.shuffle();
configBox.put('endpoint', listEndpoints);
}
log.i('ENDPOINT: $listEndpoints');
return listEndpoints;
2021-01-26 21:00:26 +01:00
}
T getRandomElement<T>(List<T> list) {
2021-02-16 04:57:13 +01:00
final random = Random();
2021-01-26 21:00:26 +01:00
var i = random.nextInt(list.length);
return list[i];
}
2021-02-16 04:57:13 +01:00
void handleSearchStart() {
isSearching = true;
notifyListeners();
}
2021-09-12 06:47:50 +02:00
// void playSound(String customSound, double volume) async {
// await player.play('$customSound.wav',
// volume: volume, mode: PlayerMode.LOW_LATENCY, stayAwake: false);
// }
Widget bottomAppBar(BuildContext context) {
MyWalletsProvider myWalletProvider =
2022-05-27 16:58:03 +02:00
Provider.of<MyWalletsProvider>(context, listen: false);
WalletsProfilesProvider historyProvider =
2022-05-27 16:58:03 +02:00
Provider.of<WalletsProfilesProvider>(context, listen: false);
2022-05-30 14:48:12 +02:00
final size = MediaQuery.of(context).size;
const bool showBottomBar = true;
2022-05-27 16:58:03 +02:00
return Visibility(
visible: showBottomBar,
2022-05-27 16:58:03 +02:00
child: Container(
color: yellowC,
2022-05-30 14:48:12 +02:00
width: size.width,
2022-05-27 16:58:03 +02:00
height: 80,
2022-05-30 14:48:12 +02:00
child:
// Stack(
// children: [
// // CustomPaint(
// // size: Size(size.width, 110),
// // painter: CustomRoundedButton(),
// // ),
2022-06-04 15:08:22 +02:00
Row(mainAxisAlignment: MainAxisAlignment.start, children: [
// SizedBox(width: 0),
const Spacer(),
const SizedBox(width: 11),
2022-05-30 14:48:12 +02:00
IconButton(
2022-08-24 21:53:16 +02:00
key: keyAppBarSearch,
2022-05-30 14:48:12 +02:00
iconSize: 40,
icon: const Image(image: AssetImage('assets/loupe-noire.png')),
onPressed: () {
Navigator.popUntil(
context,
ModalRoute.withName('/'),
);
Navigator.push(
context,
MaterialPageRoute(builder: (homeContext) {
return const SearchScreen();
}),
);
},
),
2022-06-04 15:08:22 +02:00
const SizedBox(width: 22),
const Spacer(),
2022-08-24 23:59:51 +02:00
IconButton(
key: keyAppBarQrcode,
2022-05-30 14:48:12 +02:00
iconSize: 70,
icon: const Image(image: AssetImage('assets/qrcode-scan.png')),
onPressed: () async {
Navigator.popUntil(
context,
ModalRoute.withName('/'),
);
historyProvider.scan(homeContext);
2022-05-30 14:48:12 +02:00
},
),
2022-06-04 15:08:22 +02:00
const Spacer(),
const SizedBox(width: 15),
2022-08-24 23:59:51 +02:00
IconButton(
key: keyAppBarChest,
2022-05-30 14:48:12 +02:00
iconSize: 60,
icon: const Image(image: AssetImage('assets/wallet.png')),
onPressed: () async {
WalletData? defaultWallet = myWalletProvider.getDefaultWallet();
String? pin;
if (myWalletProvider.pinCode == '') {
pin = await Navigator.push(
context,
MaterialPageRoute(
builder: (homeContext) {
return UnlockingWallet(wallet: defaultWallet);
},
),
);
}
if (pin != null || myWalletProvider.pinCode != '') {
Navigator.popUntil(
context,
ModalRoute.withName('/'),
);
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return const WalletsHome();
}),
);
}
2022-05-30 14:48:12 +02:00
},
),
2022-06-04 15:08:22 +02:00
const Spacer(),
2022-05-30 14:48:12 +02:00
]),
2022-05-27 16:58:03 +02:00
),
);
}
2022-09-09 01:12:17 +02:00
void reload() {
2021-04-05 20:48:28 +02:00
notifyListeners();
}
2021-01-26 21:00:26 +01:00
}
2022-05-30 14:48:12 +02:00
class CustomRoundedButton extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
Paint paint = Paint()
..color = yellowC
..style = PaintingStyle.fill;
Path path = Path();
path.lineTo(size.width * 0.4, 0);
path.quadraticBezierTo(size.width * 0.5, -40, size.width * 0.6, 0);
path.lineTo(size.width, 0);
path.lineTo(size.width, size.height);
path.lineTo(0, size.height);
canvas.drawPath(path, paint);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
return false;
}
}