Skip to content

Commit 85c74e0

Browse files
committed
feat: migrate js interop
1 parent 7f95fcb commit 85c74e0

File tree

54 files changed

+2621
-2939
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+2621
-2939
lines changed

example/.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
/build/
3434

3535
# Web related
36-
lib/generated_plugin_registrant.dart
3736

3837
# Symbolication related
3938
app.*.symbols

example/lib/screens/payment_sheet/payment_element/platforms/payment_element_web.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import 'package:flutter/widgets.dart';
22
import 'package:flutter_stripe_web/flutter_stripe_web.dart';
3+
import 'package:web/web.dart' as web;
34

4-
import '../../../checkout/platforms/stripe_checkout_web.dart';
5+
String getUrlPort() => web.window.location.port;
6+
7+
String getReturnUrl() => web.window.location.href;
58

69
Future<void> pay() async {
710
await WebStripe.instance.confirmPaymentElement(

example/pubspec.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,14 @@ version: 1.0.0
44
publish_to: 'none'
55

66
environment:
7-
sdk: ">=2.17.0 <4.0.0"
7+
sdk: ">=3.3.0 <4.0.0"
88
flutter: ">=3.0.0"
99

1010
dependencies:
1111
flutter:
1212
sdk: flutter
1313
flutter_stripe: ^9.4.0
1414
flutter_stripe_web: ^4.4.0
15-
stripe_checkout: ^1.0.1
1615
pay: ^1.1.0
1716
http: ^1.1.0
1817
font_awesome_flutter: ^10.6.0

example/server/yarn.lock

Lines changed: 2109 additions & 2252 deletions
Large diffs are not rendered by default.
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
import 'package:freezed_annotation/freezed_annotation.dart';
22
import 'package:stripe_js/stripe_api.dart';
33

4-
class ElementsConverter extends JSConverter<Elements> {
5-
const ElementsConverter();
6-
}
7-
84
class JSConverter<T> implements JsonConverter<T, dynamic> {
95
const JSConverter();
106

@@ -15,6 +11,10 @@ class JSConverter<T> implements JsonConverter<T, dynamic> {
1511
dynamic toJson(dynamic object) => object;
1612
}
1713

14+
class ElementsConverter extends JSConverter<Elements> {
15+
const ElementsConverter();
16+
}
17+
1818
class ElementConverter extends JSConverter<Element> {
1919
const ElementConverter();
2020
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
abstract class Element {}
1+
extension type const Element._(Object o) implements Object {}
22

3-
abstract class Elements {}
3+
extension type const Elements._(Object o) implements Object {}

packages/stripe_js/lib/src/js/core/core.dart

Lines changed: 0 additions & 1 deletion
This file was deleted.

packages/stripe_js/lib/src/js/core/promise.dart

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 10 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,28 @@
1-
import 'package:js/js.dart';
21
import 'package:stripe_js/stripe_api.dart';
2+
import 'dart:js_interop';
3+
import '../utils/utils.dart';
34

45
typedef EventCallback<T> = void Function(T event);
56

6-
@anonymous
7-
@JS()
8-
abstract class StripeElement implements Element {
7+
extension type const StripeElement(JSObject o) implements JSObject, Element {
98
/// HTMLElement keeps giving this error for some reason:
109
/// Cannot find name 'HTMLElement'
11-
external void mount(dynamic domElement);
12-
/*external void on('blur'|'change'|'focus'|'ready' event, handler handler);*/
13-
/*external void on('click' event, void handler({ preventDefault: () => void } response));*/
10+
external void mount(JSAny domElement);
1411

15-
/*external void addEventJsArrayener('blur'|'change'|'focus'|'ready' event, handler handler);*/
16-
/*external void addEventJsArrayener('click' event, void handler({ preventDefault: () => void } response));*/
17-
external void addEventJsArrayener(
18-
String event, EventCallback<dynamic> handler);
1912
external void focus();
2013
external void blur();
2114
external void clear();
2215
external void unmount();
2316
external void destroy();
2417

2518
@JS("on")
26-
external void on(String event, EventCallback<dynamic> handler);
27-
}
28-
29-
extension ElementExtension on StripeElement {
30-
void onFocus(EventCallback<dynamic> onEvent) {
31-
return on("focus", allowInterop((e) {
32-
onEvent(e);
33-
}));
34-
}
19+
external void _on(String event, JSExportedDartFunction handler);
3520

36-
void onReady(EventCallback<dynamic> onEvent) {
37-
return on("ready", allowInterop((e) {
38-
onEvent(e);
39-
}));
21+
void on(String event, EventCallback<JSMap> handler) {
22+
return _on(event, handler.toJS);
4023
}
4124

42-
void onBlur(EventCallback<dynamic> onEvent) {
43-
return on("blur", allowInterop((e) {
44-
onEvent(e);
45-
}));
46-
}
25+
void onFocus(EventCallback<void> onEvent) => on("focus", onEvent);
26+
void onReady(EventCallback<void> onEvent) => on("ready", onEvent);
27+
void onBlur(EventCallback<void> onEvent) => on("blur", onEvent);
4728
}
Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,11 @@
1-
import 'package:js/js.dart';
1+
import 'dart:js_interop';
2+
23
import 'package:stripe_js/stripe_api.dart';
34
import 'package:stripe_js/stripe_js.dart';
45

5-
@anonymous
6-
@JS()
7-
abstract class CardPaymentElement extends StripeElement {}
8-
9-
@anonymous
10-
@JS()
11-
abstract class _JS {
12-
external void update(dynamic options);
13-
external void on(String event, EventCallback<dynamic> handler);
14-
}
15-
16-
extension CardPaymentExtension on CardPaymentElement {
17-
_JS get js => this as _JS;
6+
extension type CardPaymentElement(StripeElement o) implements StripeElement {
7+
@JS('update')
8+
external void _update(JSAny? options);
189

1910
/// Updates the options the Element was initialized with.
2011
/// Updates are merged into the existing configuration.
@@ -27,20 +18,19 @@ extension CardPaymentExtension on CardPaymentElement {
2718
/// This method can be used to simulate CSS media queries that automatically
2819
/// adjust the size of elements when viewed on different devices.
2920
void update(CardElementOptions options) {
30-
return js.update(jsify(options.toJson()));
21+
return _update(options.toJson().jsify());
3122
}
3223

3324
void onChange(EventCallback<CardElementChangeEvent> onEvent) {
34-
return on("change", allowInterop((e) {
35-
final value = dartify(e) as Map<dynamic, dynamic>;
36-
final json = value.cast<String, dynamic>();
37-
onEvent(CardElementChangeEvent.fromJson(json));
38-
}));
25+
return on("change", (event) {
26+
onEvent(CardElementChangeEvent.fromJson(event.toDart));
27+
});
3928
}
4029
}
4130

4231
extension ElementsExtension on StripeElements {
4332
CardPaymentElement createCard([CardElementOptions? options]) {
44-
return create('card', jsify(options?.toJson() ?? {})) as CardPaymentElement;
33+
return create('card', (options?.toJson() ?? {}).jsify())
34+
as CardPaymentElement;
4535
}
4636
}

0 commit comments

Comments
 (0)