redesign | merged with dev branch

This commit is contained in:
OleksandrSobol 2020-09-14 22:07:44 +03:00
parent cc4a1f1d80
commit 18ccd5de35
6 changed files with 301 additions and 294 deletions

View file

@ -257,8 +257,8 @@ Future setup(
getIt.registerFactory( getIt.registerFactory(
() => SendPage(sendViewModel: getIt.get<SendViewModel>())); () => SendPage(sendViewModel: getIt.get<SendViewModel>()));
// getIt.registerFactory( getIt.registerFactory(
// () => SendTemplatePage(sendViewModel: getIt.get<SendViewModel>())); () => SendTemplatePage(sendViewModel: getIt.get<SendViewModel>()));
getIt.registerFactory(() => WalletListViewModel( getIt.registerFactory(() => WalletListViewModel(
walletInfoSource, getIt.get<AppStore>(), getIt.get<KeyService>())); walletInfoSource, getIt.get<AppStore>(), getIt.get<KeyService>()));

View file

@ -24,8 +24,8 @@ import 'package:cake_wallet/store/dashboard/fiat_convertation_store.dart';
// FIXME: move me // FIXME: move me
Future<void> loadCurrentWallet() async { Future<void> loadCurrentWallet() async {
final appStore = getIt.get<AppStore>(); final appStore = getIt.get<AppStore>();
final name = 'test'; //final name = 'test';
getIt.get<SharedPreferences>().getString('current_wallet_name'); final name = getIt.get<SharedPreferences>().getString('current_wallet_name');
final typeRaw = final typeRaw =
getIt.get<SharedPreferences>().getInt('current_wallet_type') ?? 0; getIt.get<SharedPreferences>().getInt('current_wallet_type') ?? 0;
final type = deserializeFromInt(typeRaw); final type = deserializeFromInt(typeRaw);

View file

@ -104,9 +104,12 @@ class DashboardPage extends BasePage {
)), )),
Container( Container(
width: double.infinity, width: double.infinity,
padding: EdgeInsets.only(left: 44, right: 0, bottom: 24), padding: EdgeInsets.only(
left: 45,
right: 45,
bottom: 24
),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
Flexible( Flexible(
child: ActionButton( child: ActionButton(
@ -120,7 +123,16 @@ class DashboardPage extends BasePage {
child: ActionButton( child: ActionButton(
image: exchangeImage, image: exchangeImage,
title: S.of(context).exchange, title: S.of(context).exchange,
route: Routes.exchange), route: Routes.exchange
),
),
Flexible(
child: ActionButton(
image: receiveImage,
title: S.of(context).receive,
route: Routes.receive,
alignment: Alignment.centerRight,
),
) )
], ],
), ),

View file

@ -79,13 +79,13 @@ class WalletMenu {
return AlertWithTwoActions( return AlertWithTwoActions(
alertTitle: S.of(context).reconnection, alertTitle: S.of(context).reconnection,
alertContent: S.of(context).reconnect_alert_text, alertContent: S.of(context).reconnect_alert_text,
leftButtonText: S.of(context).ok, rightButtonText: S.of(context).ok,
rightButtonText: S.of(context).cancel, leftButtonText: S.of(context).cancel,
actionLeftButton: () async { actionRightButton: () async {
await reconnect?.call(); await reconnect?.call();
Navigator.of(context).pop(); Navigator.of(context).pop();
}, },
actionRightButton: () => Navigator.of(context).pop()); actionLeftButton: () => Navigator.of(context).pop());
}); });
} }
} }

View file

@ -10,6 +10,7 @@ import 'package:cake_wallet/view_model/send/send_view_model.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:mobx/mobx.dart'; import 'package:mobx/mobx.dart';
import 'package:cake_wallet/palette.dart';
import 'package:cake_wallet/src/widgets/address_text_field.dart'; import 'package:cake_wallet/src/widgets/address_text_field.dart';
import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/src/widgets/top_panel.dart'; import 'package:cake_wallet/src/widgets/top_panel.dart';
@ -25,9 +26,9 @@ import 'package:cake_wallet/routes.dart';
class BaseSendWidget extends StatelessWidget { class BaseSendWidget extends StatelessWidget {
BaseSendWidget( BaseSendWidget(
{@required this.sendViewModel, {@required this.sendViewModel,
@required this.leading, @required this.leading,
@required this.middle, @required this.middle,
this.isTemplate = false}); this.isTemplate = false});
final SendViewModel sendViewModel; final SendViewModel sendViewModel;
final bool isTemplate; final bool isTemplate;
@ -72,32 +73,33 @@ class BaseSendWidget extends StatelessWidget {
children: <Widget>[ children: <Widget>[
isTemplate isTemplate
? BaseTextFormField( ? BaseTextFormField(
controller: _nameController, controller: _nameController,
hintText: S.of(context).send_name, hintText: S.of(context).send_name,
borderColor: Theme.of(context) borderColor: Theme.of(context)
.primaryTextTheme .primaryTextTheme
.headline .headline
.color, .color,
textStyle: TextStyle( textStyle: TextStyle(
fontSize: 14, fontSize: 14,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
color: Colors.white), color: Colors.white),
placeholderTextStyle: TextStyle( placeholderTextStyle: TextStyle(
color: Theme.of(context) color: Theme.of(context)
.primaryTextTheme .primaryTextTheme
.headline .headline
.decorationColor, .decorationColor,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
fontSize: 14), fontSize: 14),
validator: sendViewModel.templateValidator, validator: sendViewModel.templateValidator,
) )
: Offstage(), : Offstage(),
Padding( Padding(
padding: EdgeInsets.only(top: isTemplate ? 20 : 0), padding: EdgeInsets.only(top: isTemplate ? 20 : 0),
child: AddressTextField( child: AddressTextField(
controller: _addressController, controller: _addressController,
placeholder: S.of(context).send_address( // placeholder: S
sendViewModel.cryptoCurrencyTitle), // .of(context)
// .send_address(sendViewModel.cryptoCurrencyTitle),
focusNode: _focusNode, focusNode: _focusNode,
onURIScanned: (uri) { onURIScanned: (uri) {
var address = ''; var address = '';
@ -119,9 +121,9 @@ class BaseSendWidget extends StatelessWidget {
AddressTextFieldOption.addressBook AddressTextFieldOption.addressBook
], ],
buttonColor: buttonColor:
Theme.of(context).primaryTextTheme.display1.color, Theme.of(context).primaryTextTheme.display1.color,
borderColor: borderColor:
Theme.of(context).primaryTextTheme.headline.color, Theme.of(context).primaryTextTheme.headline.color,
textStyle: TextStyle( textStyle: TextStyle(
fontSize: 14, fontSize: 14,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
@ -150,43 +152,43 @@ class BaseSendWidget extends StatelessWidget {
prefixIcon: Padding( prefixIcon: Padding(
padding: EdgeInsets.only(top: 9), padding: EdgeInsets.only(top: 9),
child: child:
Text(sendViewModel.currency.title + ':', Text(sendViewModel.currency.title + ':',
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 16,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
color: Colors.white, color: Colors.white,
)), )),
), ),
suffixIcon: isTemplate suffixIcon: isTemplate
? Offstage() ? Offstage()
: Container( : Container(
height: 32, height: 32,
width: 32, width: 32,
margin: EdgeInsets.only( margin: EdgeInsets.only(
left: 14, top: 4, bottom: 10), left: 14, top: 4, bottom: 10),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Theme.of(context) color: Theme.of(context)
.primaryTextTheme .primaryTextTheme
.display1 .display1
.color, .color,
borderRadius: BorderRadius.all( borderRadius: BorderRadius.all(
Radius.circular(6))), Radius.circular(6))),
child: InkWell( child: InkWell(
onTap: () => onTap: () =>
sendViewModel.setSendAll(), sendViewModel.setSendAll(),
child: Center( child: Center(
child: Text(S.of(context).all, child: Text(S.of(context).all,
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle( style: TextStyle(
fontSize: 12, fontSize: 12,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: Theme.of(context) color: Theme.of(context)
.primaryTextTheme .primaryTextTheme
.display1 .display1
.decorationColor)), .decorationColor)),
), ),
), ),
), ),
hintText: '0.0000', hintText: '0.0000',
borderColor: Theme.of(context) borderColor: Theme.of(context)
.primaryTextTheme .primaryTextTheme
@ -208,37 +210,37 @@ class BaseSendWidget extends StatelessWidget {
isTemplate isTemplate
? Offstage() ? Offstage()
: Observer( : Observer(
builder: (_) => Padding( builder: (_) => Padding(
padding: EdgeInsets.only(top: 10), padding: EdgeInsets.only(top: 10),
child: Row( child: Row(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
mainAxisAlignment: mainAxisAlignment:
MainAxisAlignment.spaceBetween, MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
Expanded( Expanded(
child: Text( child: Text(
S.of(context).available_balance + ':', S.of(context).available_balance + ':',
style: TextStyle( style: TextStyle(
fontSize: 12, fontSize: 12,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
color: Theme.of(context) color: Theme.of(context)
.primaryTextTheme .primaryTextTheme
.headline .headline
.decorationColor), .decorationColor),
)), )),
Text( Text(
sendViewModel.balance, sendViewModel.balance,
style: TextStyle( style: TextStyle(
fontSize: 12, fontSize: 12,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
color: Theme.of(context) color: Theme.of(context)
.primaryTextTheme .primaryTextTheme
.headline .headline
.decorationColor), .decorationColor),
) )
], ],
), ),
)), )),
Padding( Padding(
padding: const EdgeInsets.only(top: 20), padding: const EdgeInsets.only(top: 20),
child: BaseTextFormField( child: BaseTextFormField(
@ -278,52 +280,52 @@ class BaseSendWidget extends StatelessWidget {
isTemplate isTemplate
? Offstage() ? Offstage()
: Observer( : Observer(
builder: (_) => GestureDetector( builder: (_) => GestureDetector(
onTap: () => onTap: () =>
_setTransactionPriority(context), _setTransactionPriority(context),
child: Container( child: Container(
padding: EdgeInsets.only(top: 24), padding: EdgeInsets.only(top: 24),
child: Row( child: Row(
mainAxisAlignment: mainAxisAlignment:
MainAxisAlignment.spaceBetween, MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
Text(S.of(context).send_estimated_fee, Text(S.of(context).send_estimated_fee,
style: TextStyle( style: TextStyle(
fontSize: 12, fontSize: 12,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
//color: Theme.of(context).primaryTextTheme.display2.color, //color: Theme.of(context).primaryTextTheme.display2.color,
color: Colors.white)), color: Colors.white)),
Container( Container(
child: Row( child: Row(
children: <Widget>[ children: <Widget>[
Text( Text(
sendViewModel.estimatedFee sendViewModel.estimatedFee
.toString() + .toString() +
' ' + ' ' +
sendViewModel sendViewModel
.currency.title, .currency.title,
style: TextStyle( style: TextStyle(
fontSize: 12, fontSize: 12,
fontWeight: fontWeight:
FontWeight.w600, FontWeight.w600,
//color: Theme.of(context).primaryTextTheme.display2.color, //color: Theme.of(context).primaryTextTheme.display2.color,
color: Colors.white)), color: Colors.white)),
Padding( Padding(
padding: padding:
EdgeInsets.only(left: 5), EdgeInsets.only(left: 5),
child: Icon( child: Icon(
Icons.arrow_forward_ios, Icons.arrow_forward_ios,
size: 12, size: 12,
color: Colors.white, color: Colors.white,
), ),
) )
], ],
),
)
],
),
), ),
)) )
],
),
),
))
], ],
), ),
) )
@ -333,117 +335,117 @@ class BaseSendWidget extends StatelessWidget {
isTemplate isTemplate
? Offstage() ? Offstage()
: Padding( : Padding(
padding: EdgeInsets.only(top: 30, left: 24, bottom: 24), padding: EdgeInsets.only(top: 30, left: 24, bottom: 24),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Text( Text(
S.of(context).send_templates, S.of(context).send_templates,
style: TextStyle( style: TextStyle(
fontSize: 18, fontSize: 18,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
color: Theme.of(context) color: Theme.of(context)
.primaryTextTheme .primaryTextTheme
.display4 .display4
.color), .color),
) )
], ],
), ),
), ),
isTemplate isTemplate
? Offstage() ? Offstage()
: Container( : Container(
height: 40, height: 40,
width: double.infinity, width: double.infinity,
padding: EdgeInsets.only(left: 24), padding: EdgeInsets.only(left: 24),
child: SingleChildScrollView( child: SingleChildScrollView(
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
child: Row( child: Row(
children: <Widget>[ children: <Widget>[
GestureDetector( GestureDetector(
onTap: () => Navigator.of(context) onTap: () => Navigator.of(context)
.pushNamed(Routes.sendTemplate), .pushNamed(Routes.sendTemplate),
child: Container(
padding: EdgeInsets.only(left: 1, right: 10),
child: DottedBorder(
borderType: BorderType.RRect,
dashPattern: [6, 4],
color: Theme.of(context)
.primaryTextTheme
.display2
.decorationColor,
strokeWidth: 2,
radius: Radius.circular(20),
child: Container( child: Container(
padding: EdgeInsets.only(left: 1, right: 10), height: 34,
child: DottedBorder( width: 75,
borderType: BorderType.RRect, padding: EdgeInsets.only(left: 10, right: 10),
dashPattern: [6, 4], alignment: Alignment.center,
color: Theme.of(context) decoration: BoxDecoration(
.primaryTextTheme borderRadius:
.display2 BorderRadius.all(Radius.circular(20)),
.decorationColor, color: Colors.transparent,
strokeWidth: 2, ),
radius: Radius.circular(20), child: Text(
child: Container( S.of(context).send_new,
height: 34, style: TextStyle(
width: 75, fontSize: 14,
padding: EdgeInsets.only(left: 10, right: 10), fontWeight: FontWeight.w600,
alignment: Alignment.center, color: Theme.of(context)
decoration: BoxDecoration( .primaryTextTheme
borderRadius: .display3
BorderRadius.all(Radius.circular(20)), .color),
color: Colors.transparent, ),
), )),
child: Text( ),
S.of(context).send_new, ),
style: TextStyle( // Observer(
fontSize: 14, // builder: (_) {
fontWeight: FontWeight.w600, // final templates = sendViewModel.templates;
color: Theme.of(context) // final itemCount = templates.length;
.primaryTextTheme
.display3
.color),
),
)),
),
),
// Observer(
// builder: (_) {
// final templates = sendViewModel.templates;
// final itemCount = templates.length;
// return ListView.builder( // return ListView.builder(
// scrollDirection: Axis.horizontal, // scrollDirection: Axis.horizontal,
// shrinkWrap: true, // shrinkWrap: true,
// physics: NeverScrollableScrollPhysics(), // physics: NeverScrollableScrollPhysics(),
// itemCount: itemCount, // itemCount: itemCount,
// itemBuilder: (context, index) { // itemBuilder: (context, index) {
// final template = templates[index]; // final template = templates[index];
return TemplateTile( // return TemplateTile(
key: UniqueKey(), // key: UniqueKey(),
to: template.name, // to: template.name,
amount: template.amount, // amount: template.amount,
from: template.cryptoCurrency, // from: template.cryptoCurrency,
onTap: () { // onTap: () {
_addressController.text = template.address; // _addressController.text = template.address;
_cryptoAmountController.text = template.amount; // _cryptoAmountController.text = template.amount;
getOpenaliasRecord(context); // getOpenaliasRecord(context);
}, // },
onRemove: () { // onRemove: () {
showDialog<void>( // showDialog<void>(
context: context, // context: context,
builder: (dialogContext) { // builder: (dialogContext) {
return AlertWithTwoActions( // return AlertWithTwoActions(
alertTitle: S.of(context).template, // alertTitle: S.of(context).template,
alertContent: S.of(context).confirm_delete_template, // alertContent: S.of(context).confirm_delete_template,
rightButtonText: S.of(context).delete, // leftButtonText: S.of(context).delete,
leftButtonText: S.of(context).cancel, // rightButtonText: S.of(context).cancel,
actionRightButton: () { // actionLeftButton: () {
Navigator.of(dialogContext).pop(); // Navigator.of(dialogContext).pop();
sendViewModel.sendTemplateStore.remove(template: template); // sendViewModel.sendTemplateStore.remove(template: template);
sendViewModel.sendTemplateStore.update(); // sendViewModel.sendTemplateStore.update();
}, // },
actionLeftButton: () => Navigator.of(dialogContext).pop() // actionRightButton: () => Navigator.of(dialogContext).pop()
); // );
} // }
); // );
}, // },
); // );
} // }
); // );
} // }
) // )
], ],
), ),
), ),
@ -453,20 +455,20 @@ class BaseSendWidget extends StatelessWidget {
bottomSectionPadding: EdgeInsets.only(left: 24, right: 24, bottom: 24), bottomSectionPadding: EdgeInsets.only(left: 24, right: 24, bottom: 24),
bottomSection: isTemplate bottomSection: isTemplate
? PrimaryButton( ? PrimaryButton(
onPressed: () { onPressed: () {
if (_formKey.currentState.validate()) { if (_formKey.currentState.validate()) {
// sendViewModel.sendTemplateStore.addTemplate( // sendViewModel.sendTemplateStore.addTemplate(
// name: _nameController.text, // name: _nameController.text,
// address: _addressController.text, // address: _addressController.text,
// cryptoCurrency: sendViewModel.currency.title, // cryptoCurrency: sendViewModel.currency.title,
// amount: _cryptoAmountController.text); // amount: _cryptoAmountController.text);
// sendViewModel.sendTemplateStore.update(); // sendViewModel.sendTemplateStore.update();
Navigator.of(context).pop(); Navigator.of(context).pop();
} }
}, },
text: S.of(context).save, text: S.of(context).save,
color: Colors.green, color: Colors.green,
textColor: Colors.white) textColor: Colors.white)
: Observer(builder: (_) { : Observer(builder: (_) {
return LoadingPrimaryButton( return LoadingPrimaryButton(
onPressed: () { onPressed: () {
@ -552,7 +554,7 @@ class BaseSendWidget extends StatelessWidget {
alertTitle: S.of(context).confirm_sending, alertTitle: S.of(context).confirm_sending,
amount: S.of(context).send_amount, amount: S.of(context).send_amount,
amountValue: amountValue:
sendViewModel.pendingTransaction.amountFormatted, sendViewModel.pendingTransaction.amountFormatted,
fee: S.of(context).send_fee, fee: S.of(context).send_fee,
feeValue: sendViewModel.pendingTransaction.feeFormatted, feeValue: sendViewModel.pendingTransaction.feeFormatted,
leftButtonText: S.of(context).ok, leftButtonText: S.of(context).ok,
@ -694,14 +696,14 @@ class BaseSendWidget extends StatelessWidget {
await showDialog<void>( await showDialog<void>(
builder: (_) => Picker( builder: (_) => Picker(
items: items, items: items,
selectedAtIndex: selectedItem, selectedAtIndex: selectedItem,
title: S.of(context).please_select, title: S.of(context).please_select,
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
onItemSelected: (TransactionPriority priority) => null, onItemSelected: (TransactionPriority priority) => null,
// sendViewModel.setTransactionPriority(priority), // sendViewModel.setTransactionPriority(priority),
isAlwaysShowScrollThumb: true, isAlwaysShowScrollThumb: true,
), ),
context: context); context: context);
} }
} }

View file

@ -42,7 +42,7 @@ packages:
name: async name: async
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.4.2" version: "2.4.1"
auto_size_text: auto_size_text:
dependency: "direct main" dependency: "direct main"
description: description:
@ -210,7 +210,7 @@ packages:
name: collection name: collection
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.14.13" version: "1.14.12"
convert: convert:
dependency: transitive dependency: transitive
description: description:
@ -224,7 +224,7 @@ packages:
name: crypto name: crypto
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.5" version: "2.1.4"
csslib: csslib:
dependency: transitive dependency: transitive
description: description:
@ -302,13 +302,6 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.2" version: "1.0.2"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
ffi: ffi:
dependency: transitive dependency: transitive
description: description:
@ -475,7 +468,7 @@ packages:
name: image name: image
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.14" version: "2.1.12"
intl: intl:
dependency: "direct main" dependency: "direct main"
description: description:
@ -524,7 +517,7 @@ packages:
name: matcher name: matcher
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.12.8" version: "0.12.6"
meta: meta:
dependency: transitive dependency: transitive
description: description:
@ -594,7 +587,7 @@ packages:
name: path name: path
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.7.0" version: "1.6.4"
path_drawing: path_drawing:
dependency: transitive dependency: transitive
description: description:
@ -650,7 +643,7 @@ packages:
name: petitparser name: petitparser
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.0.4" version: "2.4.0"
platform: platform:
dependency: transitive dependency: transitive
description: description:
@ -830,7 +823,7 @@ packages:
name: stack_trace name: stack_trace
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.9.5" version: "1.9.3"
stream_channel: stream_channel:
dependency: transitive dependency: transitive
description: description:
@ -865,7 +858,7 @@ packages:
name: test_api name: test_api
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.2.17" version: "0.2.15"
time: time:
dependency: transitive dependency: transitive
description: description:
@ -886,7 +879,7 @@ packages:
name: typed_data name: typed_data
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.0" version: "1.1.6"
url_launcher: url_launcher:
dependency: "direct main" dependency: "direct main"
description: description:
@ -963,7 +956,7 @@ packages:
name: xml name: xml
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.2.0" version: "3.6.1"
yaml: yaml:
dependency: "direct main" dependency: "direct main"
description: description:
@ -972,5 +965,5 @@ packages:
source: hosted source: hosted
version: "2.2.1" version: "2.2.1"
sdks: sdks:
dart: ">=2.9.0-14.0.dev <3.0.0" dart: ">=2.7.0 <3.0.0"
flutter: ">=1.12.13+hotfix.5 <2.0.0" flutter: ">=1.12.13+hotfix.5 <2.0.0"