Skip to content

Commit 7dc13ce

Browse files
committedAug 29, 2018
add uiShareDialog function
1 parent a2b7553 commit 7dc13ce

File tree

5 files changed

+142
-86
lines changed

5 files changed

+142
-86
lines changed
 

‎CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 0.0.6
2+
3+
refactoring of the package
4+
5+
+ Add uiShareDialog function
6+
17
## 0.0.5
28

39
+ Dart 2 stable

‎lib/facebook_web_sdk.dart

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
library fb;
22

3-
export 'src/fb_base.dart';
3+
export 'src/fb.dart';
4+
export 'src/fb_base.dart' show FbInitOption, UiResponseData;

‎lib/src/fb.dart

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
import 'dart:async';
2+
import 'dart:js';
3+
4+
import 'package:dart_browser_loader/dart_browser_loader.dart';
5+
import 'fb_base.dart' as base;
6+
7+
void addFacebookScript({String lang = 'en_US'}) {
8+
loadScript('//connect.facebook.net/$lang/sdk.js', id: 'facebook-jssdk');
9+
}
10+
11+
Future<void> fbAsyncInit() {
12+
final completer = new Completer<void>();
13+
base.fbAsyncInit = allowInterop(completer.complete);
14+
return completer.future;
15+
}
16+
17+
void init(base.FbInitOption option) => base.init(option);
18+
19+
class AuthResponse {
20+
final String accessToken;
21+
final String expiresIn;
22+
final String signedRequest;
23+
final String userID;
24+
25+
AuthResponse.fromJsObject(base.JsAuthResponse jsObject)
26+
: accessToken = jsObject.accessToken,
27+
expiresIn = jsObject.expiresIn,
28+
signedRequest = jsObject.signedRequest,
29+
userID = jsObject.userID;
30+
}
31+
32+
enum LoginStatus {
33+
connected,
34+
notAuthorized,
35+
unknown,
36+
}
37+
38+
LoginStatus _stringToLoginStatus(String status) {
39+
switch (status) {
40+
case 'connected':
41+
return LoginStatus.connected;
42+
case 'not_authorized':
43+
return LoginStatus.notAuthorized;
44+
case 'unknown':
45+
return LoginStatus.unknown;
46+
default:
47+
return LoginStatus.unknown;
48+
}
49+
}
50+
51+
class LoginStatusResponse {
52+
final LoginStatus status;
53+
final AuthResponse authResponse;
54+
55+
LoginStatusResponse(String status, this.authResponse)
56+
: status = _stringToLoginStatus(status);
57+
58+
LoginStatusResponse.fromJsObject(base.JsLoginStatusResponse jsObject)
59+
: status = _stringToLoginStatus(jsObject.status),
60+
authResponse = jsObject.authResponse != null
61+
? new AuthResponse.fromJsObject(jsObject.authResponse)
62+
: null;
63+
}
64+
65+
Future<LoginStatusResponse> getLoginStatus() {
66+
final completer = new Completer<LoginStatusResponse>();
67+
base.getLoginStatus(allowInterop((base.JsLoginStatusResponse response) {
68+
completer.complete(new LoginStatusResponse.fromJsObject(response));
69+
}));
70+
return completer.future;
71+
}
72+
73+
Future<LoginStatusResponse> login([List<String> scopes]) {
74+
scopes ??= ['public_profile'];
75+
final completer = new Completer<LoginStatusResponse>();
76+
base.login(allowInterop((base.JsLoginStatusResponse response) {
77+
completer.complete(new LoginStatusResponse.fromJsObject(response));
78+
}), new base.JsScope(scope: scopes.join(",")));
79+
return completer.future;
80+
}
81+
82+
Future<void> logout() {
83+
final completer = new Completer();
84+
base.logout(allowInterop(completer.complete));
85+
return completer.future;
86+
}
87+
88+
Future<base.UiResponseData> uiShareDialog(
89+
{String href,
90+
String hastag,
91+
String quote,
92+
bool mobileIframe = false}) async {
93+
final completer = Completer<base.UiResponseData>();
94+
base.ui(
95+
base.ShareDialogParams(
96+
href: href, hashtag: hastag, quote: quote, mobile_iframe: mobileIframe),
97+
allowInterop(completer.complete),
98+
);
99+
return completer.future;
100+
}

‎lib/src/fb_base.dart

+33-84
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,10 @@
11
@JS('window')
22
library facebook;
33

4-
import 'dart:async';
5-
6-
import 'package:dart_browser_loader/dart_browser_loader.dart';
74
import 'package:js/js.dart';
85

9-
void addFacebookScript() {
10-
loadScript('//connect.facebook.net/en_US/sdk.js', id: 'facebook-jssdk');
11-
}
12-
136
@JS('fbAsyncInit')
14-
external set _fbAsyncInit(Function function);
15-
16-
Future<void> fbAsyncInit() {
17-
final completer = new Completer<void>();
18-
_fbAsyncInit = allowInterop(completer.complete);
19-
return completer.future;
20-
}
7+
external set fbAsyncInit(Function function);
218

229
@JS()
2310
@anonymous
@@ -69,62 +56,8 @@ class JsLoginStatusResponse {
6956
{String status, JsAuthResponse authResponse});
7057
}
7158

72-
class AuthResponse {
73-
final String accessToken;
74-
final String expiresIn;
75-
final String signedRequest;
76-
final String userID;
77-
78-
AuthResponse.fromJsObject(JsAuthResponse jsObject)
79-
: accessToken = jsObject.accessToken,
80-
expiresIn = jsObject.expiresIn,
81-
signedRequest = jsObject.signedRequest,
82-
userID = jsObject.userID;
83-
}
84-
85-
enum LoginStatus {
86-
connected,
87-
notAuthorized,
88-
unknown,
89-
}
90-
91-
LoginStatus _stringToLoginStatus(String status) {
92-
switch (status) {
93-
case 'connected':
94-
return LoginStatus.connected;
95-
case 'not_authorized':
96-
return LoginStatus.notAuthorized;
97-
case 'unknown':
98-
return LoginStatus.unknown;
99-
default:
100-
return LoginStatus.unknown;
101-
}
102-
}
103-
104-
class LoginStatusResponse {
105-
final LoginStatus status;
106-
final AuthResponse authResponse;
107-
108-
LoginStatusResponse(String status, this.authResponse)
109-
: status = _stringToLoginStatus(status);
110-
111-
LoginStatusResponse.fromJsObject(JsLoginStatusResponse jsObject)
112-
: status = _stringToLoginStatus(jsObject.status),
113-
authResponse = jsObject.authResponse != null
114-
? new AuthResponse.fromJsObject(jsObject.authResponse)
115-
: null;
116-
}
117-
11859
@JS('FB.getLoginStatus')
119-
external void _getLoginStatus(Function f);
120-
121-
Future<LoginStatusResponse> getLoginStatus() {
122-
final completer = new Completer<LoginStatusResponse>();
123-
_getLoginStatus(allowInterop((JsLoginStatusResponse response) {
124-
completer.complete(new LoginStatusResponse.fromJsObject(response));
125-
}));
126-
return completer.future;
127-
}
60+
external void getLoginStatus(Function f);
12861

12962
@JS()
13063
@anonymous
@@ -135,22 +68,38 @@ class JsScope {
13568
}
13669

13770
@JS('FB.login')
138-
external void _login(Function f, JsScope scope);
139-
140-
Future<LoginStatusResponse> login([List<String> scopes]) {
141-
scopes ??= ['public_profile'];
142-
final completer = new Completer<LoginStatusResponse>();
143-
_login(allowInterop((JsLoginStatusResponse response) {
144-
completer.complete(new LoginStatusResponse.fromJsObject(response));
145-
}), new JsScope(scope: scopes.join(",")));
146-
return completer.future;
147-
}
71+
external void login(Function f, JsScope scope);
14872

14973
@JS('FB.logout')
150-
external void _logout(Function f);
74+
external void logout(Function f);
15175

152-
Future<void> logout() {
153-
final completer = new Completer();
154-
_logout(allowInterop(completer.complete));
155-
return completer.future;
76+
abstract class UiParams {
77+
String get method;
15678
}
79+
80+
@JS()
81+
@anonymous
82+
class ShareDialogParams implements UiParams {
83+
external String get method;
84+
external String get href;
85+
external String get hashtag;
86+
external String get quote;
87+
external bool get mobile_iframe;
88+
89+
external factory ShareDialogParams({
90+
String method = 'share',
91+
String href,
92+
String hashtag,
93+
String quote,
94+
bool mobile_iframe = false,
95+
});
96+
}
97+
98+
@JS()
99+
@anonymous
100+
class UiResponseData {
101+
external String get errorMessage;
102+
}
103+
104+
@JS('FB.ui')
105+
external void ui(params, Function f);

‎pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: facebook_web_sdk
22
description: basic facebook js sdk wrap for dart
3-
version: 0.0.5
3+
version: 0.0.6
44
homepage: https://lefty.io
55
author: Kevin Segaud <kevin.segaud@gmail.com>
66

0 commit comments

Comments
 (0)
Please sign in to comment.