ym88659208ym87991671
Внедрение SDK в проект на Flutter | Документация для разработчиков

Внедрение SDK в проект на Flutter

Обновлено 8 августа 2023

Внутри своего проекта на экране, где необходимо будет разметить кнопку SDK, необходимо определить канал взамодействия с SDK:

class _MyHomePageState extends State<MyHomePage> {
static const sdkChannel = MethodChannel('com.spay.sdk/pay');
...

Небходимо полное соответствие названия канала в нативных частях проекта с названием в методе MethodChannel.

Для вызова методов из нативной части кода необходимо использовать функцию sdkChannel.invokeMethod. Например, вызов метода автоматической оплаты можно произвести следующим образом:


final arguments = {'merchantLogin': 'sbertest_0230', 'orderId': '64e0754cc1e44d208376e2b2f3e6786e', 'redirectUri': 'redirectUri'};
final String result = await sdkChannel.invokeMethod('payWithOrder', arguments);

где arguments - аргументы, необходимые для передачи данных в метод оплаты через sdk.

Для реализации кнопки оплаты необходимо реализовать StatelessWidget с нативной view:

class SPayButton extends StatelessWidget {
const SPayButton({super.key});


@override
Widget build(BuildContext context) {
const String viewType = '<platform-view-type>';

switch (defaultTargetPlatform) {
case TargetPlatform.android:
return SizedBox(
height: 56.0,
width: MediaQuery.of(context).size.width - 40,
child:
return PlatformViewLink(
viewType: viewType,
surfaceFactory:
(context, controller) {
return AndroidViewSurface(
controller: controller as AndroidViewController,
gestureRecognizers: const <Factory<OneSequenceGestureRecognizer>>{},
hitTestBehavior: PlatformViewHitTestBehavior.opaque,
);
},
onCreatePlatformView: (params) {
return PlatformViewsService.initSurfaceAndroidView(
id: params.id,
viewType: viewType,
layoutDirection: TextDirection.ltr,
creationParams: creationParams,
creationParamsCodec: const StandardMessageCodec(),
onFocus: () {
params.onFocusChanged(true);
},
)
..addOnPlatformViewCreatedListener(params.onPlatformViewCreated)
..create();
},
);
);
case TargetPlatform.iOS:
return SizedBox(
height: 56.0,
width: MediaQuery.of(context).size.width - 40,
child:
const UiKitView(
viewType: viewType,
hitTestBehavior: PlatformViewHitTestBehavior.transparent,
),
);
default:
throw UnsupportedError('Unsupported platform view');
}
}
}

Далее этот виджет можно реализовать на экране вашего приложения:

GestureDetector(
onTap: _payWithOrder, // Метод оплаты через sdk
behavior: HitTestBehavior.opaque,
child: const SPayButton(),
)
ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.