From cd8dfc8a72e45e1395ab081f1e3da71113246de6 Mon Sep 17 00:00:00 2001 From: origogi Date: Sat, 3 Apr 2021 22:20:43 +0900 Subject: [PATCH] [FIX] flutter 2.0 migration --- CHANGELOG.md | 6 ++- README.md | 4 +- example/pubspec.lock | 46 ++++++++++---------- lib/components/card_name.dart | 2 +- lib/components/card_sign.dart | 2 +- lib/components/card_valid.dart | 2 +- lib/components/front_card_view.dart | 4 +- lib/components/input_view_pager.dart | 34 +++++++-------- lib/components/reset_button.dart | 6 +-- lib/components/round_button.dart | 4 +- lib/components/yellow_border.dart | 4 +- lib/constants/captions.dart | 4 +- lib/credit_card_input_form.dart | 65 ++++++++++++++-------------- lib/model/card_info.dart | 8 ++-- lib/provider/state_provider.dart | 12 ++--- pubspec.lock | 44 +++++++++---------- pubspec.yaml | 8 ++-- 17 files changed, 130 insertions(+), 125 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f97417..acc0a99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -97,4 +97,8 @@ ### v2.2.0 -Add initial autofocus parameter \ No newline at end of file +Add initial autofocus parameter + +### v2.3.0 + +Flutter 2.0 migration \ No newline at end of file diff --git a/README.md b/README.md index 846e7d2..ba2442e 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ alt="Platform" /> - + @@ -42,7 +42,7 @@ This package provides visually beautiful UX through animation of credit card inf ```dart dependencies: - credit_card_input_form: ^2.2.0 + credit_card_input_form: ^2.3.0 ``` 2. Import the package diff --git a/example/pubspec.lock b/example/pubspec.lock index d430d72..23b0e79 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -7,49 +7,49 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.5.0-nullsafety" + version: "2.5.0" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety" + version: "2.1.0" characters: dependency: transitive description: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.2" + version: "1.1.0" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety" + version: "1.2.0" clock: dependency: transitive description: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety" + version: "1.1.0" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.15.0-nullsafety.2" + version: "1.15.0" credit_card_input_form: dependency: "direct main" description: path: ".." relative: true source: path - version: "2.2.0" + version: "2.3.0" cupertino_icons: dependency: "direct main" description: @@ -63,14 +63,14 @@ packages: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety" + version: "1.2.0" flip_card: dependency: transitive description: name: flip_card url: "https://pub.dartlang.org" source: hosted - version: "0.4.4" + version: "0.5.0" flutter: dependency: "direct main" description: flutter @@ -87,35 +87,35 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.10-nullsafety" + version: "0.12.10" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.2" + version: "1.3.0" nested: dependency: transitive description: name: nested url: "https://pub.dartlang.org" source: hosted - version: "0.0.4" + version: "1.0.0" path: dependency: transitive description: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety" + version: "1.8.0" provider: dependency: transitive description: name: provider url: "https://pub.dartlang.org" source: hosted - version: "4.3.2+2" + version: "5.0.0" sky_engine: dependency: transitive description: flutter @@ -127,56 +127,56 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety" + version: "1.8.0" stack_trace: dependency: transitive description: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.10.0-nullsafety" + version: "1.10.0" stream_channel: dependency: transitive description: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety" + version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety" + version: "1.1.0" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety" + version: "1.2.0" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.19-nullsafety" + version: "0.2.19" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.2" + version: "1.3.0" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.2" + version: "2.1.0" sdks: - dart: ">=2.10.0-0.0.dev <2.10.0" + dart: ">=2.12.0 <3.0.0" flutter: ">=1.16.0" diff --git a/lib/components/card_name.dart b/lib/components/card_name.dart index 9654908..092a6bd 100644 --- a/lib/components/card_name.dart +++ b/lib/components/card_name.dart @@ -8,7 +8,7 @@ class CardName extends StatelessWidget { @override Widget build(BuildContext context) { final defaultName = - Provider.of(context).getCaption('NAME_SURNAME').toUpperCase(); + Provider.of(context).getCaption('NAME_SURNAME')!.toUpperCase(); final String name = Provider.of(context).cardName.toUpperCase(); diff --git a/lib/components/card_sign.dart b/lib/components/card_sign.dart index 5eea180..7108795 100644 --- a/lib/components/card_sign.dart +++ b/lib/components/card_sign.dart @@ -5,7 +5,7 @@ import 'package:credit_card_input_form/constants/constanst.dart'; class CardSign extends StatelessWidget { const CardSign({ - Key key, + Key? key, }) : super(key: key); @override diff --git a/lib/components/card_valid.dart b/lib/components/card_valid.dart index e1f393f..5a206b2 100644 --- a/lib/components/card_valid.dart +++ b/lib/components/card_valid.dart @@ -10,7 +10,7 @@ class CardValid extends StatelessWidget { String inputCardValid = Provider.of(context).cardValid; var defaultCardValid = Provider.of(context) - .getCaption('MM_YY') + .getCaption('MM_YY')! .substring(inputCardValid.length); inputCardValid = inputCardValid.replaceAll("/", ""); diff --git a/lib/components/front_card_view.dart b/lib/components/front_card_view.dart index 285ced7..969e475 100644 --- a/lib/components/front_card_view.dart +++ b/lib/components/front_card_view.dart @@ -41,7 +41,7 @@ class FrontCardView extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.end, children: [ Text( - captions.getCaption('CARDHOLDER_NAME').toUpperCase(), + captions.getCaption('CARDHOLDER_NAME')!.toUpperCase(), style: kTextStyle, ), SizedBox( @@ -61,7 +61,7 @@ class FrontCardView extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.end, children: [ Text( - captions.getCaption('VALID_THRU').toUpperCase(), + captions.getCaption('VALID_THRU')!.toUpperCase(), style: kTextStyle, ), SizedBox( diff --git a/lib/components/input_view_pager.dart b/lib/components/input_view_pager.dart index 5e92dc3..a01eb35 100644 --- a/lib/components/input_view_pager.dart +++ b/lib/components/input_view_pager.dart @@ -46,7 +46,7 @@ class _InputViewPagerState extends State { Provider.of(context).addListener(() { int index = Provider.of(context, listen: false) - .getCurrentState() + .getCurrentState()! .index; if (index < focusNodes.length) { @@ -78,14 +78,14 @@ class _InputViewPagerState extends State { } class InputForm extends StatefulWidget { - final String title; - final int index; - final PageController pageController; - final FocusNode focusNode; + final String? title; + final int? index; + final PageController? pageController; + final FocusNode? focusNode; final isAutoFocus; InputForm( - {@required this.title, + {required this.title, this.index, this.pageController, this.focusNode, @@ -98,13 +98,13 @@ class InputForm extends StatefulWidget { class _InputFormState extends State { var opacicy = 0.3; - int maxLength; - TextInputType textInputType; + int? maxLength; + TextInputType? textInputType; TextEditingController textController = TextEditingController(); void onChange() { setState(() { - if (widget.index == widget.pageController.page.round()) { + if (widget.index == widget.pageController!.page!.round()) { opacicy = 1; } else { opacicy = 0.3; @@ -112,21 +112,21 @@ class _InputFormState extends State { }); } - String value; + String? value; @override void initState() { super.initState(); int index = Provider.of(context, listen: false) - .getCurrentState() + .getCurrentState()! .index; if (widget.index == index) { opacicy = 1; } - widget.pageController.addListener(onChange); + widget.pageController!.addListener(onChange); if (widget.index == InputState.NUMBER.index) { maxLength = 19; @@ -152,7 +152,7 @@ class _InputFormState extends State { @override void dispose() { - widget.pageController.removeListener(onChange); + widget.pageController!.removeListener(onChange); super.dispose(); } @@ -161,7 +161,7 @@ class _InputFormState extends State { @override Widget build(BuildContext context) { - String textValue = ""; + String? textValue = ""; if (widget.index == InputState.NUMBER.index) { textValue = @@ -177,7 +177,7 @@ class _InputFormState extends State { } int index = Provider.of(context, listen: false) - .getCurrentState() + .getCurrentState()! .index; return Opacity( @@ -187,7 +187,7 @@ class _InputFormState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - widget.title, + widget.title!, style: TextStyle(fontSize: 12, color: Colors.black38), ), SizedBox( @@ -200,7 +200,7 @@ class _InputFormState extends State { ..value = textController.value.copyWith( text: textValue, selection: TextSelection.fromPosition( - TextPosition(offset: textValue.length), + TextPosition(offset: textValue!.length), ), ), focusNode: widget.focusNode, diff --git a/lib/components/reset_button.dart b/lib/components/reset_button.dart index 88251f3..1d9389d 100644 --- a/lib/components/reset_button.dart +++ b/lib/components/reset_button.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class ResetButton extends StatefulWidget { - final Function onTap; + final Function? onTap; final decoration; final textStyle; @@ -21,7 +21,7 @@ class _ResetButtonState extends State { final captions = Provider.of(context); return GestureDetector( - onTap: widget.onTap, + onTap: widget.onTap as void Function()?, onTapDown: (_) { setState(() { pressed = true; @@ -46,7 +46,7 @@ class _ResetButtonState extends State { Icons.refresh, color: Colors.white, ), - Text(captions.getCaption('RESET'), style: widget.textStyle) + Text(captions.getCaption('RESET')!, style: widget.textStyle) ], ), )), diff --git a/lib/components/round_button.dart b/lib/components/round_button.dart index 3089538..1471e9c 100644 --- a/lib/components/round_button.dart +++ b/lib/components/round_button.dart @@ -6,7 +6,7 @@ import 'package:provider/provider.dart'; import '../constants/constanst.dart'; class RoundButton extends StatefulWidget { - final Function onTap; + final Function? onTap; final buttonTitle; final decoration; final textStyle; @@ -23,7 +23,7 @@ class _RoundButtonState extends State { @override Widget build(BuildContext context) { return GestureDetector( - onTap: widget.onTap, + onTap: widget.onTap as void Function()?, onTapDown: (_) { final currentState = Provider.of(context, listen: false) .getCurrentState(); diff --git a/lib/components/yellow_border.dart b/lib/components/yellow_border.dart index 1666cb8..456c989 100644 --- a/lib/components/yellow_border.dart +++ b/lib/components/yellow_border.dart @@ -58,7 +58,7 @@ class YellowBorder extends StatelessWidget { return align; } - double getHeight(InputState currentState) { + double getHeight(InputState? currentState) { var height = 0.0; switch (currentState) { case InputState.NUMBER: @@ -98,7 +98,7 @@ class YellowBorder extends StatelessWidget { return width; } - getMargin(InputState currentState) { + getMargin(InputState? currentState) { var lefrMargin = 0.0; var rightMargin = 0.0; switch (currentState) { diff --git a/lib/constants/captions.dart b/lib/constants/captions.dart index 59ca2da..47c49e0 100644 --- a/lib/constants/captions.dart +++ b/lib/constants/captions.dart @@ -12,7 +12,7 @@ class Captions { 'RESET': 'Reset', }; - Map _captions; + late Map _captions; Captions({customCaptions}) { _captions = {}; @@ -20,7 +20,7 @@ class Captions { if (customCaptions != null) _captions.addAll(customCaptions); } - String getCaption(String key) { + String? getCaption(String key) { return _captions.containsKey(key) ? _captions[key] : key; } } diff --git a/lib/credit_card_input_form.dart b/lib/credit_card_input_form.dart index 1e3b4da..ab9d839 100644 --- a/lib/credit_card_input_form.dart +++ b/lib/credit_card_input_form.dart @@ -42,12 +42,12 @@ class CreditCardInputForm extends StatelessWidget { this.prevButtonDecoration = defaultNextPrevButtonDecoration, this.resetButtonDecoration = defaultResetButtonDecoration}); - final Function onStateChange; - final double cardHeight; - final BoxDecoration frontCardDecoration; - final BoxDecoration backCardDecoration; + final Function? onStateChange; + final double? cardHeight; + final BoxDecoration? frontCardDecoration; + final BoxDecoration? backCardDecoration; final bool showResetButton; - final Map customCaptions; + final Map? customCaptions; final BoxDecoration nextButtonDecoration; final BoxDecoration prevButtonDecoration; final BoxDecoration resetButtonDecoration; @@ -85,7 +85,8 @@ class CreditCardInputForm extends StatelessWidget { ), ], child: CreditCardInputImpl( - onCardModelChanged: onStateChange, + onCardModelChanged: + onStateChange as void Function(InputState, CardInfo)?, backDecoration: backCardDecoration, frontDecoration: frontCardDecoration, cardHeight: cardHeight, @@ -104,18 +105,18 @@ class CreditCardInputForm extends StatelessWidget { } class CreditCardInputImpl extends StatefulWidget { - final CardInfoCallback onCardModelChanged; - final double cardHeight; - final BoxDecoration frontDecoration; - final BoxDecoration backDecoration; - final bool showResetButton; - final BoxDecoration nextButtonDecoration; - final BoxDecoration prevButtonDecoration; - final BoxDecoration resetButtonDecoration; - final TextStyle nextButtonTextStyle; - final TextStyle prevButtonTextStyle; - final TextStyle resetButtonTextStyle; - final InputState initialCardState; + final CardInfoCallback? onCardModelChanged; + final double? cardHeight; + final BoxDecoration? frontDecoration; + final BoxDecoration? backDecoration; + final bool? showResetButton; + final BoxDecoration? nextButtonDecoration; + final BoxDecoration? prevButtonDecoration; + final BoxDecoration? resetButtonDecoration; + final TextStyle? nextButtonTextStyle; + final TextStyle? prevButtonTextStyle; + final TextStyle? resetButtonTextStyle; + final InputState? initialCardState; final initialAutoFocus; CreditCardInputImpl( @@ -138,7 +139,7 @@ class CreditCardInputImpl extends StatefulWidget { } class _CreditCardInputImplState extends State { - PageController pageController; + PageController? pageController; final GlobalKey cardKey = GlobalKey(); @@ -155,7 +156,7 @@ class _CreditCardInputImplState extends State { pageController = PageController( viewportFraction: 0.92, - initialPage: widget.initialCardState.index, + initialPage: widget.initialCardState!.index, ); } @@ -177,7 +178,7 @@ class _CreditCardInputImplState extends State { _currentState = newState; Future(() { - widget.onCardModelChanged( + widget.onCardModelChanged!( _currentState, CardInfo( name: name, cardNumber: cardNumber, validate: valid, cvv: cvv)); @@ -187,8 +188,8 @@ class _CreditCardInputImplState extends State { double cardWidth = MediaQuery.of(context).size.width - (2 * cardHorizontalpadding); - double cardHeight; - if (widget.cardHeight != null && widget.cardHeight > 0) { + double? cardHeight; + if (widget.cardHeight != null && widget.cardHeight! > 0) { cardHeight = widget.cardHeight; } else { cardHeight = cardWidth / cardRatio; @@ -228,7 +229,7 @@ class _CreditCardInputImplState extends State { Align( alignment: Alignment.center, child: AnimatedOpacity( - opacity: widget.showResetButton && + opacity: widget.showResetButton! && _currentState == InputState.DONE ? 1 : 0, @@ -239,18 +240,18 @@ class _CreditCardInputImplState extends State { decoration: widget.resetButtonDecoration, textStyle: widget.resetButtonTextStyle, onTap: () { - if (!widget.showResetButton) { + if (!widget.showResetButton!) { return; } Provider.of(context, listen: false) .moveFirstState(); - pageController.animateToPage(0, + pageController!.animateToPage(0, duration: Duration(milliseconds: 300), curve: Curves.easeIn); - if (!cardKey.currentState.isFront) { - cardKey.currentState.toggleCard(); + if (!cardKey.currentState!.isFront) { + cardKey.currentState!.toggleCard(); } }, ), @@ -274,13 +275,13 @@ class _CreditCardInputImplState extends State { } if (InputState.NUMBER != _currentState) { - pageController.previousPage( + pageController!.previousPage( duration: Duration(milliseconds: 300), curve: Curves.easeIn); } if (InputState.CVV == _currentState) { - cardKey.currentState.toggleCard(); + cardKey.currentState!.toggleCard(); } Provider.of(context, listen: false) .movePrevState(); @@ -301,13 +302,13 @@ class _CreditCardInputImplState extends State { : captions.getCaption('NEXT'), onTap: () { if (InputState.CVV != _currentState) { - pageController.nextPage( + pageController!.nextPage( duration: Duration(milliseconds: 300), curve: Curves.easeIn); } if (InputState.VALIDATE == _currentState) { - cardKey.currentState.toggleCard(); + cardKey.currentState!.toggleCard(); } Provider.of(context, listen: false) diff --git a/lib/model/card_info.dart b/lib/model/card_info.dart index 90691f4..2e4e37f 100644 --- a/lib/model/card_info.dart +++ b/lib/model/card_info.dart @@ -1,8 +1,8 @@ class CardInfo { - String cardNumber; - String name; - String validate; - String cvv; + String? cardNumber; + String? name; + String? validate; + String? cvv; CardInfo({this.cardNumber, this.name, this.validate, this.cvv}); diff --git a/lib/provider/state_provider.dart b/lib/provider/state_provider.dart index c1ecfd9..67b49ab 100644 --- a/lib/provider/state_provider.dart +++ b/lib/provider/state_provider.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:credit_card_input_form/constants/constanst.dart'; class StateProvider with ChangeNotifier { - InputState _currentState; + InputState? _currentState; StateProvider(initValue) { _currentState = initValue; @@ -17,8 +17,8 @@ class StateProvider with ChangeNotifier { ]; void moveNextState() { - if (_currentState.index < _states.length - 1) { - _currentState = _states[_currentState.index + 1]; + if (_currentState!.index < _states.length - 1) { + _currentState = _states[_currentState!.index + 1]; notifyListeners(); } } @@ -29,13 +29,13 @@ class StateProvider with ChangeNotifier { } void movePrevState() { - if (_currentState.index > 0) { - _currentState = _states[_currentState.index - 1]; + if (_currentState!.index > 0) { + _currentState = _states[_currentState!.index - 1]; notifyListeners(); } } - InputState getCurrentState() { + InputState? getCurrentState() { return _currentState; } } diff --git a/pubspec.lock b/pubspec.lock index 8b95eaa..c3f1fab 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,56 +7,56 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.5.0-nullsafety" + version: "2.5.0" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety" + version: "2.1.0" characters: dependency: transitive description: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.2" + version: "1.1.0" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety" + version: "1.2.0" clock: dependency: transitive description: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety" + version: "1.1.0" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.15.0-nullsafety.2" + version: "1.15.0" fake_async: dependency: transitive description: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety" + version: "1.2.0" flip_card: dependency: "direct main" description: name: flip_card url: "https://pub.dartlang.org" source: hosted - version: "0.4.4" + version: "0.5.0" flutter: dependency: "direct main" description: flutter @@ -73,35 +73,35 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.10-nullsafety" + version: "0.12.10" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.2" + version: "1.3.0" nested: dependency: transitive description: name: nested url: "https://pub.dartlang.org" source: hosted - version: "0.0.4" + version: "1.0.0" path: dependency: transitive description: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety" + version: "1.8.0" provider: dependency: "direct main" description: name: provider url: "https://pub.dartlang.org" source: hosted - version: "4.3.2+2" + version: "5.0.0" sky_engine: dependency: transitive description: flutter @@ -113,56 +113,56 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety" + version: "1.8.0" stack_trace: dependency: transitive description: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.10.0-nullsafety" + version: "1.10.0" stream_channel: dependency: transitive description: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety" + version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety" + version: "1.1.0" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety" + version: "1.2.0" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.19-nullsafety" + version: "0.2.19" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.2" + version: "1.3.0" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.2" + version: "2.1.0" sdks: - dart: ">=2.10.0-0.0.dev <2.10.0" + dart: ">=2.12.0 <3.0.0" flutter: ">=1.16.0" diff --git a/pubspec.yaml b/pubspec.yaml index 0773f14..256183a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,18 +1,18 @@ name: credit_card_input_form description: This package provides visually beautiful UX through animation of credit card information input form. -version: 2.2.0 +version: 2.3.0 homepage: https://github.com/Origogi/Flutter-Credit-Card-Input-Form environment: - sdk: ">=2.7.0 <3.0.0" + sdk: '>=2.12.0 <3.0.0' flutter: ">=1.10.0" dependencies: flutter: sdk: flutter - provider: ^4.3.2+2 - flip_card: ^0.4.4 + provider: ^5.0.0 + flip_card: ^0.5.0 dev_dependencies: