WIP: remplace file storage with Hive boxes storage
This commit is contained in:
parent
3a160cb9bc
commit
b3bf79075c
|
@ -1,5 +1,6 @@
|
|||
import 'dart:io';
|
||||
import 'package:gecko/models/myWallets.dart';
|
||||
import 'package:gecko/models/walletData.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:logger/logger.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
|
@ -14,6 +15,9 @@ String appVersion;
|
|||
SharedPreferences prefs;
|
||||
String endPointGVA;
|
||||
int ramSys;
|
||||
Box<WalletData> walletBox;
|
||||
Box chestBox;
|
||||
Box configBox;
|
||||
|
||||
// String cesiumPod = "https://g1.data.le-sou.org";
|
||||
String cesiumPod = "https://g1.data.e-is.pro";
|
||||
|
|
|
@ -22,13 +22,14 @@ import 'package:gecko/models/generateWallets.dart';
|
|||
import 'package:gecko/models/history.dart';
|
||||
import 'package:gecko/models/home.dart';
|
||||
import 'package:gecko/models/myWallets.dart';
|
||||
import 'package:gecko/models/walletData.dart';
|
||||
import 'package:gecko/models/walletOptions.dart';
|
||||
import 'package:gecko/screens/home.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/screens/myWallets/walletsHome.dart';
|
||||
import 'package:graphql_flutter/graphql_flutter.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:hive_flutter/hive_flutter.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:responsive_framework/responsive_framework.dart';
|
||||
|
@ -41,16 +42,18 @@ Future<void> main() async {
|
|||
WidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
HomeProvider _homeProvider = HomeProvider();
|
||||
MyWalletsProvider _walletsProvider = MyWalletsProvider();
|
||||
await _homeProvider.getAppPath();
|
||||
await _homeProvider.createDefaultAvatar();
|
||||
await _walletsProvider.initWalletFolder();
|
||||
// _walletsProvider.getDefaultWallet();
|
||||
appVersion = await _homeProvider.getAppVersion();
|
||||
prefs = await SharedPreferences.getInstance();
|
||||
|
||||
Hive.init(appPath.path);
|
||||
await Hive.openBox("walletBox");
|
||||
// Configure Hive and open boxes
|
||||
await Hive.initFlutter(appPath.path);
|
||||
Hive.registerAdapter(WalletDataAdapter());
|
||||
walletBox = await Hive.openBox<WalletData>("walletBox");
|
||||
chestBox = await Hive.openBox("chestBox");
|
||||
configBox = await Hive.openBox("configBox");
|
||||
|
||||
// final HiveStore _store =
|
||||
// await HiveStore.open(path: '${appPath.path}/gqlCache');
|
||||
|
|
|
@ -6,6 +6,7 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/walletData.dart';
|
||||
import 'package:pdf/pdf.dart';
|
||||
import 'package:pdf/widgets.dart' as pw;
|
||||
import 'package:printing/printing.dart';
|
||||
|
@ -38,7 +39,17 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
bool canImport = false;
|
||||
bool isPinChanged = false;
|
||||
|
||||
Future storeHDWChest(
|
||||
void storeHDWChest(
|
||||
NewWallet _wallet, String _name, BuildContext context) async {
|
||||
WalletData myWallet =
|
||||
WalletData(chest: 0, number: 0, name: _name, derivation: 3);
|
||||
walletBox.add(myWallet);
|
||||
chestBox.put(0, _wallet.dewif);
|
||||
configBox.put('currentChest', 0);
|
||||
// walletBox.get(1)
|
||||
}
|
||||
|
||||
Future storeHDWChestOld(
|
||||
NewWallet _wallet, String _name, BuildContext context) async {
|
||||
// Directory walletDirectory;
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'dart:async';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/walletData.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class MyWalletsProvider with ChangeNotifier {
|
||||
|
@ -10,33 +11,6 @@ class MyWalletsProvider with ChangeNotifier {
|
|||
String pinCode;
|
||||
int pinLenght;
|
||||
|
||||
Future initWalletFolder() async {
|
||||
// getDefaultWallet();
|
||||
|
||||
final bool isWalletFolderExist = await walletsDirectory.exists();
|
||||
if (!isWalletFolderExist) {
|
||||
await Directory(walletsDirectory.path).create();
|
||||
}
|
||||
|
||||
File _currentChestFile = File('${walletsDirectory.path}/currentChest.conf');
|
||||
|
||||
await _currentChestFile.create();
|
||||
await _currentChestFile.writeAsString('0');
|
||||
|
||||
final bool isChestsExist =
|
||||
await Directory('${walletsDirectory.path}/0').exists();
|
||||
if (!isChestsExist) {
|
||||
await Directory('${walletsDirectory.path}/0').create();
|
||||
await Directory('${walletsDirectory.path}/1').create();
|
||||
await File('${walletsDirectory.path}/0/list.conf').create();
|
||||
await File('${walletsDirectory.path}/0/order.conf').create();
|
||||
await File('${walletsDirectory.path}/1/list.conf').create();
|
||||
await File('${walletsDirectory.path}/1/order.conf').create();
|
||||
// getDefaultWallet();
|
||||
}
|
||||
await getDefaultWalletAsync();
|
||||
}
|
||||
|
||||
int getCurrentChest() {
|
||||
File _currentChestFile = File('${walletsDirectory.path}/currentChest.conf');
|
||||
|
||||
|
@ -63,69 +37,35 @@ class MyWalletsProvider with ChangeNotifier {
|
|||
}
|
||||
}
|
||||
|
||||
List readAllWallets(int _chest) {
|
||||
// log.d(walletsDirectory.path);
|
||||
|
||||
listWallets = [];
|
||||
|
||||
File _walletConfig = File('${walletsDirectory.path}/$_chest/list.conf');
|
||||
_walletConfig.readAsLinesSync().forEach((element) {
|
||||
listWallets.add(WalletData(element));
|
||||
List<WalletData> readAllWallets(int _chest) {
|
||||
walletBox.toMap().forEach((key, value) {
|
||||
if (value.chest == _chest) {
|
||||
listWallets.add(value);
|
||||
}
|
||||
});
|
||||
|
||||
log.i(listWallets.toString());
|
||||
return listWallets;
|
||||
}
|
||||
|
||||
WalletData getWalletData(String _id) {
|
||||
// log.d(_id);
|
||||
if (_id == '') return WalletData('');
|
||||
int chest = int.parse(_id.split(':')[0]);
|
||||
final _walletConfig = File('${walletsDirectory.path}/$chest/list.conf');
|
||||
if (_id == '') return WalletData();
|
||||
int _chest = int.parse(_id.split(':')[0]);
|
||||
int _nbr = int.parse(_id.split(':')[1]);
|
||||
|
||||
return WalletData(_walletConfig
|
||||
.readAsLinesSync()
|
||||
.firstWhere((element) => element.startsWith(_id)));
|
||||
}
|
||||
walletBox.toMap().forEach((key, value) {
|
||||
if (value.chest == _chest && value.number == _nbr) {
|
||||
return value;
|
||||
}
|
||||
});
|
||||
|
||||
Future<WalletData> getWalletDataAsync(String _id) async {
|
||||
// log.d(_id);
|
||||
if (_id == '') return WalletData('');
|
||||
int chest = int.parse(_id.split(':')[0]);
|
||||
final _walletConfig = File('${walletsDirectory.path}/$chest/list.conf');
|
||||
|
||||
List configLines = await _walletConfig.readAsLines();
|
||||
//log.d(configLines);
|
||||
|
||||
if (configLines.isEmpty) {
|
||||
return WalletData('');
|
||||
}
|
||||
|
||||
return WalletData(
|
||||
configLines.firstWhere((element) => element.startsWith(_id)));
|
||||
return WalletData();
|
||||
}
|
||||
|
||||
void getDefaultWallet() {
|
||||
defaultWalletFile = File('${appPath.path}/defaultWallet');
|
||||
|
||||
if (!defaultWalletFile.existsSync()) {
|
||||
File(defaultWalletFile.path).createSync();
|
||||
defaultWalletFile.writeAsStringSync("0:0");
|
||||
}
|
||||
|
||||
defaultWallet = getWalletData(defaultWalletFile.readAsStringSync());
|
||||
}
|
||||
|
||||
Future getDefaultWalletAsync() async {
|
||||
defaultWalletFile = File('${appPath.path}/defaultWallet');
|
||||
|
||||
if (!await defaultWalletFile.exists()) {
|
||||
await File(defaultWalletFile.path).create();
|
||||
await defaultWalletFile.writeAsString("0:0");
|
||||
} else {
|
||||
defaultWallet =
|
||||
await getWalletDataAsync(await defaultWalletFile.readAsString());
|
||||
if (defaultWallet == null) {
|
||||
configBox.put('defaultWallet', [0, 0]);
|
||||
}
|
||||
defaultWallet = configBox.get('defaultWallet');
|
||||
}
|
||||
|
||||
Future<int> deleteAllWallet(context) async {
|
||||
|
@ -139,7 +79,6 @@ class MyWalletsProvider with ChangeNotifier {
|
|||
await walletsDirectory.delete(recursive: true);
|
||||
await defaultWalletFile.delete();
|
||||
await walletsDirectory.create();
|
||||
await initWalletFolder();
|
||||
// await Future.delayed(Duration(milliseconds: 500));
|
||||
// scheduleMicrotask(() {
|
||||
notifyListeners();
|
||||
|
@ -215,44 +154,3 @@ class MyWalletsProvider with ChangeNotifier {
|
|||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
// wallet data contains elements identifying wallet
|
||||
class WalletData {
|
||||
int chest;
|
||||
int number;
|
||||
String name;
|
||||
int derivation;
|
||||
|
||||
// constructor from ':'-separated string
|
||||
WalletData(String element) {
|
||||
if (element != '') {
|
||||
List parts = element.split(':');
|
||||
|
||||
this.chest = int.parse(parts[0]);
|
||||
this.number = int.parse(parts[1]);
|
||||
this.name = parts[2];
|
||||
this.derivation = int.parse(parts[3]);
|
||||
}
|
||||
}
|
||||
|
||||
// default wallet
|
||||
static WalletData defaultWallet() {
|
||||
return WalletData("0:0:default:3");
|
||||
}
|
||||
|
||||
// representation of WalletData when debugging
|
||||
@override
|
||||
String toString() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
// creates the ':'-separated string from the WalletData
|
||||
String inLine() {
|
||||
return "${this.chest}:${this.number}:${this.name}:${this.derivation}";
|
||||
}
|
||||
|
||||
// returns only the id part of the ':'-separated string
|
||||
String id() {
|
||||
return "${this.chest}:${this.number}";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
import 'package:hive_flutter/hive_flutter.dart';
|
||||
|
||||
part 'walletData.g.dart';
|
||||
|
||||
@HiveType(typeId: 0)
|
||||
class WalletData extends HiveObject {
|
||||
@HiveField(0)
|
||||
int chest;
|
||||
|
||||
@HiveField(1)
|
||||
int number;
|
||||
|
||||
@HiveField(2)
|
||||
String name;
|
||||
|
||||
@HiveField(3)
|
||||
int derivation;
|
||||
|
||||
WalletData({this.chest, this.number, this.name, this.derivation});
|
||||
|
||||
// representation of WalletData when debugging
|
||||
@override
|
||||
String toString() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
// creates the ':'-separated string from the WalletData
|
||||
String inLine() {
|
||||
return "${this.chest}:${this.number}:${this.name}:${this.derivation}";
|
||||
}
|
||||
|
||||
// returns only the id part of the ':'-separated string
|
||||
String id() {
|
||||
return "${this.chest}:${this.number}";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'walletData.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// TypeAdapterGenerator
|
||||
// **************************************************************************
|
||||
|
||||
class WalletDataAdapter extends TypeAdapter<WalletData> {
|
||||
@override
|
||||
final int typeId = 0;
|
||||
|
||||
@override
|
||||
WalletData read(BinaryReader reader) {
|
||||
final numOfFields = reader.readByte();
|
||||
final fields = <int, dynamic>{
|
||||
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
|
||||
};
|
||||
return WalletData(
|
||||
chest: fields[0] as int,
|
||||
number: fields[1] as int,
|
||||
name: fields[2] as String,
|
||||
derivation: fields[3] as int,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void write(BinaryWriter writer, WalletData obj) {
|
||||
writer
|
||||
..writeByte(4)
|
||||
..writeByte(0)
|
||||
..write(obj.chest)
|
||||
..writeByte(1)
|
||||
..write(obj.number)
|
||||
..writeByte(2)
|
||||
..write(obj.name)
|
||||
..writeByte(3)
|
||||
..write(obj.derivation);
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => typeId.hashCode;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
other is WalletDataAdapter &&
|
||||
runtimeType == other.runtimeType &&
|
||||
typeId == other.typeId;
|
||||
}
|
|
@ -8,7 +8,7 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'dart:async';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/myWallets.dart';
|
||||
import 'package:gecko/models/walletData.dart';
|
||||
import 'package:image_picker/image_picker.dart';
|
||||
import 'package:truncate/truncate.dart';
|
||||
import 'package:qrscan/qrscan.dart' as scanner;
|
||||
|
|
|
@ -22,6 +22,12 @@ class HomeScreen extends StatelessWidget {
|
|||
Provider.of<MyWalletsProvider>(context);
|
||||
final bool isWalletsExists = _myWalletProvider.checkIfWalletExist();
|
||||
|
||||
// walletBox.toMap().forEach((key, value) {
|
||||
// if (value.chest == 0) {
|
||||
// print('$key: ${value.derivation}');
|
||||
// }
|
||||
// });
|
||||
|
||||
isTall = false;
|
||||
ratio = 1;
|
||||
if (MediaQuery.of(context).size.height >= 930) {
|
||||
|
|
|
@ -134,8 +134,8 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier {
|
|||
onPressed: (_generateWalletProvider
|
||||
.isAskedWordValid &&
|
||||
this.walletName.text != '')
|
||||
? () async {
|
||||
await _generateWalletProvider.storeHDWChest(
|
||||
? () {
|
||||
_generateWalletProvider.storeHDWChest(
|
||||
generatedWallet,
|
||||
walletName.text,
|
||||
context);
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import 'dart:async';
|
||||
|
||||
import 'package:dubp/dubp.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:gecko/models/history.dart';
|
||||
import 'package:gecko/models/myWallets.dart';
|
||||
import 'package:gecko/models/walletData.dart';
|
||||
import 'package:gecko/models/walletOptions.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:pin_code_fields/pin_code_fields.dart';
|
||||
|
|
|
@ -5,6 +5,7 @@ import 'package:gecko/globals.dart';
|
|||
import 'package:gecko/models/history.dart';
|
||||
import 'package:gecko/models/myWallets.dart';
|
||||
import 'package:gecko/models/queries.dart';
|
||||
import 'package:gecko/models/walletData.dart';
|
||||
import 'package:gecko/models/walletOptions.dart';
|
||||
import 'package:graphql_flutter/graphql_flutter.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import 'package:flutter/services.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/myWallets.dart';
|
||||
import 'package:gecko/models/walletData.dart';
|
||||
import 'package:gecko/models/walletOptions.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/screens/commonElements.dart';
|
||||
|
|
|
@ -119,10 +119,10 @@ class OnboardingStepFourteen extends StatelessWidget {
|
|||
generatedWallet.dewif, _pin.toUpperCase(), _pinLenght);
|
||||
if (resultWallet) {
|
||||
pinColor = Colors.green[500];
|
||||
await _generateWalletProvider.storeHDWChest(
|
||||
_generateWalletProvider.storeHDWChest(
|
||||
generatedWallet, 'Mon portefeuille courant', context);
|
||||
_myWalletProvider.readAllWallets(_currentChest);
|
||||
await _myWalletProvider.getDefaultWalletAsync();
|
||||
_myWalletProvider.getDefaultWallet();
|
||||
scheduleMicrotask(() {
|
||||
_walletOptions.reloadBuild();
|
||||
_myWalletProvider.rebuildWidget();
|
||||
|
|
147
pubspec.lock
147
pubspec.lock
|
@ -57,6 +57,62 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.1"
|
||||
build:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.1"
|
||||
build_config:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build_config
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.0"
|
||||
build_daemon:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build_daemon
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.0.1"
|
||||
build_resolvers:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build_resolvers
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.4"
|
||||
build_runner:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: build_runner
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.4"
|
||||
build_runner_core:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build_runner_core
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "7.2.2"
|
||||
built_collection:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: built_collection
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "5.1.1"
|
||||
built_value:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: built_value
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "8.1.3"
|
||||
characters:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -71,6 +127,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.1"
|
||||
checked_yaml:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: checked_yaml
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
cli_util:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -85,6 +148,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
code_builder:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: code_builder
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "4.1.0"
|
||||
collection:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -162,6 +232,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.0.1"
|
||||
dart_style:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dart_style
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.2.0"
|
||||
dbus:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -211,6 +288,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.1"
|
||||
fixnum:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: fixnum
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.0"
|
||||
flutter:
|
||||
dependency: "direct main"
|
||||
description: flutter
|
||||
|
@ -348,6 +432,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "5.0.0"
|
||||
graphs:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: graphs
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
hive:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -355,6 +446,20 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.4"
|
||||
hive_flutter:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: hive_flutter
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
hive_generator:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: hive_generator
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.1"
|
||||
http:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -451,6 +556,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.6.3"
|
||||
json_annotation:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: json_annotation
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "4.3.0"
|
||||
logger:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -717,6 +829,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
pubspec_parse:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pubspec_parse
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
qr:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -841,6 +960,20 @@ packages:
|
|||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.99"
|
||||
source_gen:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: source_gen
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.1"
|
||||
source_helper:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: source_helper
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.0"
|
||||
source_map_stack_trace:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -876,6 +1009,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
stream_transform:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stream_transform
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.0"
|
||||
string_scanner:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -932,6 +1072,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.4.0"
|
||||
timing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: timing
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.0"
|
||||
truncate:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
|
@ -25,6 +25,7 @@ dependencies:
|
|||
flutter_svg: ^0.22.0
|
||||
graphql_flutter: ^5.0.0
|
||||
hive: ^2.0.4
|
||||
hive_flutter: ^1.1.0
|
||||
http: ^0.13.0
|
||||
image_gallery_saver: ^1.6.9
|
||||
image_picker: ^0.8.4
|
||||
|
@ -64,6 +65,8 @@ dev_dependencies:
|
|||
sdk: flutter
|
||||
integration_test:
|
||||
sdk: flutter
|
||||
hive_generator: ^1.1.1
|
||||
build_runner: ^2.1.2
|
||||
|
||||
# The following section is specific to Flutter.
|
||||
flutter:
|
||||
|
|
Loading…
Reference in New Issue