1.0.3: Fixed iOS confirmation flow. Refactored TokenizationResult, now it's have SuccessTokenizationResult, ErrorTokenizationResult and CanceledTokenizationResult versions.

This commit is contained in:
Искандар Р. Шабаев
2022-09-08 11:32:35 +03:00
parent 187f2a4af5
commit 6b72dfee66
15 changed files with 267 additions and 164 deletions
+1
View File
@@ -42,6 +42,7 @@ post_install do |installer|
target.build_configurations.each do |config|
config.build_settings["ONLY_ACTIVE_ARCH"] = "YES"
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
end
end
end
+35 -30
View File
@@ -1,26 +1,29 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:yookassa_payments_flutter/input_data/saved_card_module_input_data.dart';
import 'package:yookassa_payments_flutter/models/tokenization_result.dart';
import 'package:yookassa_payments_flutter/yookassa_payments_flutter.dart';
class SuccessTokenizationScreen extends StatefulWidget {
const SuccessTokenizationScreen({Key? key, required this.result, this.tokenizationData, this.repeatData}) : super(key: key);
const SuccessTokenizationScreen(
{Key? key, required this.result, this.tokenizationData, this.repeatData})
: super(key: key);
final TokenizationResult result;
final SuccessTokenizationResult result;
final TokenizationModuleInputData? tokenizationData;
final SavedBankCardModuleInputData? repeatData;
@override
State<StatefulWidget> createState() => SuccessTokenizationScreenState(result, tokenizationData, repeatData);
State<StatefulWidget> createState() =>
SuccessTokenizationScreenState(result, tokenizationData, repeatData);
}
class SuccessTokenizationScreenState extends State<SuccessTokenizationScreen> {
final TokenizationResult result;
final SuccessTokenizationResult result;
final TokenizationModuleInputData? tokenizationData;
final SavedBankCardModuleInputData? repeatData;
SuccessTokenizationScreenState(this.result, this.tokenizationData, this.repeatData);
SuccessTokenizationScreenState(
this.result, this.tokenizationData, this.repeatData);
late TextEditingController controller;
@@ -47,39 +50,41 @@ class SuccessTokenizationScreenState extends State<SuccessTokenizationScreen> {
padding: const EdgeInsets.all(20.0),
child: TextField(
controller: controller,
decoration: const InputDecoration(
hintText: "3ds / App2App ссылка"
),
decoration:
const InputDecoration(hintText: "3ds / App2App ссылка"),
),
),
ElevatedButton(
onPressed: () async {
await YookassaPaymentsFlutter.confirmation(controller.text, result.paymentMethodType);
showDialog(context: context, builder: (context) => const AlertDialog(
content: Text("Confirmation process is done"),
));
await YookassaPaymentsFlutter.confirmation(
controller.text, result.paymentMethodType);
showDialog(
context: context,
builder: (context) => const AlertDialog(
content: Text("Confirmation process is done"),
));
},
child: const Text("Подтвердить")
),
child: const Text("Подтвердить")),
TextButton(
onPressed: () async {
showDialog(context: context, builder: (context) => AlertDialog(
content: Text(result.token),
actions: <Widget>[
TextButton(
onPressed: () {
Clipboard.setData(ClipboardData(text: result.token));
Navigator.of(context).pop();
},
child: const Text('Скопировать'),
),
]
));
showDialog(
context: context,
builder: (context) => AlertDialog(
content: Text(result.token),
actions: <Widget>[
TextButton(
onPressed: () {
Clipboard.setData(
ClipboardData(text: result.token));
Navigator.of(context).pop();
},
child: const Text('Скопировать'),
),
]));
},
child: const Text("Показать токен")
)
child: const Text("Показать токен"))
],
),
);
}
}
}
+27 -16
View File
@@ -1,8 +1,9 @@
import 'package:flutter/material.dart';
import 'package:yookassa_payments_flutter/yookassa_payments_flutter.dart';
import 'package:yookassa_payments_flutter_example/success_tokenization_screen.dart';
import 'package:yookassa_payments_flutter/models/tokenization_result.dart';
class TokenizationScreen extends StatefulWidget{
class TokenizationScreen extends StatefulWidget {
const TokenizationScreen({Key? key}) : super(key: key);
@override
@@ -37,8 +38,7 @@ class TokenizationScreenState extends State<TokenizationScreen> {
onPressed: () async {
startTokenization();
},
child: const Text("Оплатить")
)
child: const Text("Оплатить"))
],
),
);
@@ -46,7 +46,8 @@ class TokenizationScreenState extends State<TokenizationScreen> {
void startTokenization() async {
var clientApplicationKey = "<Ключ для клиентских приложений>";
var amount = Amount(value: double.parse(controller.text), currency: Currency.rub);
var amount =
Amount(value: double.parse(controller.text), currency: Currency.rub);
var moneyAuthClientId = "<ID для центра авторизации в системе YooMoney>";
var shopId = "<Идентификатор магазина в ЮKassa>";
var applicationScheme = "<Схема вашего приложения для deeplink>" "://";
@@ -61,16 +62,26 @@ class TokenizationScreenState extends State<TokenizationScreen> {
shopId: shopId,
customerId: "<Уникальный идентификатор покупателя>",
applicationScheme: applicationScheme,
tokenizationSettings: const TokenizationSettings(
PaymentMethodTypes([
PaymentMethod.bankCard,
PaymentMethod.yooMoney,
PaymentMethod.sberbank
])
),
testModeSettings: null
);
var result = await YookassaPaymentsFlutter.tokenization(tokenizationModuleInputData);
Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) => SuccessTokenizationScreen(result: result, tokenizationData: tokenizationModuleInputData)));
tokenizationSettings: const TokenizationSettings(PaymentMethodTypes([
PaymentMethod.bankCard,
PaymentMethod.yooMoney,
PaymentMethod.sberbank
])),
testModeSettings: null);
var result =
await YookassaPaymentsFlutter.tokenization(tokenizationModuleInputData);
if (result is SuccessTokenizationResult) {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => SuccessTokenizationScreen(
result: result,
tokenizationData: tokenizationModuleInputData)));
} else if (result is ErrorTokenizationResult) {
showDialog(
context: context,
builder: (context) => AlertDialog(content: Text(result.error)));
return;
}
}
}
}
+16 -9
View File
@@ -42,7 +42,7 @@ packages:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.16.0"
version: "1.15.0"
cupertino_icons:
dependency: "direct main"
description:
@@ -56,7 +56,7 @@ packages:
name: fake_async
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
version: "1.2.0"
flutter:
dependency: "direct main"
description: flutter
@@ -94,7 +94,7 @@ packages:
name: material_color_utilities
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.4"
version: "0.1.3"
meta:
dependency: transitive
description:
@@ -108,7 +108,7 @@ packages:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.1"
version: "1.8.0"
sky_engine:
dependency: transitive
description: flutter
@@ -120,7 +120,7 @@ packages:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.2"
version: "1.8.1"
stack_trace:
dependency: transitive
description:
@@ -155,21 +155,28 @@ packages:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.9"
version: "0.4.8"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.2"
version: "2.1.1"
yookassa_payments_flutter:
dependency: "direct main"
description:
path: ".."
relative: true
source: path
version: "1.0.0"
version: "1.0.2"
sdks:
dart: ">=2.17.0-0 <3.0.0"
dart: ">=2.14.0 <3.0.0"
flutter: ">=2.10.5"