This commit is contained in:
v7lin 2021-07-31 18:46:49 +08:00
parent ceb2752f2e
commit d15a204c62
13 changed files with 347 additions and 77 deletions

View File

@ -6,6 +6,8 @@ import 'package:flutter/material.dart';
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
import 'package:image/image.dart' as image;
import 'package:weibo_kit/weibo_kit.dart';
import 'package:weibo_kit_example/model/weibo_api_resp.dart';
import 'package:weibo_kit_example/weibo.dart';
const String _WEIBO_APP_KEY = 'your weibo app key';
const String _WEIBO_UNIVERSAL_LINK = 'your weibo universal link';

View File

@ -1,7 +1,26 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:weibo_kit/src/model/api/weibo_api_resp.dart';
part 'weibo_user_info_resp.g.dart';
part 'weibo_api_resp.g.dart';
abstract class WeiboApiResp {
const WeiboApiResp({
required this.errorCode,
this.error,
this.request,
});
static const int ERROR_CODE_SUCCESS = 0;
/// https://open.weibo.com/wiki/Help/error
@JsonKey(
defaultValue: ERROR_CODE_SUCCESS,
)
final int errorCode;
final String? error;
final String? request;
bool get isSuccessful => errorCode == ERROR_CODE_SUCCESS;
}
@JsonSerializable(
explicitToJson: true,
@ -63,3 +82,4 @@ class WeiboUserInfoResp extends WeiboApiResp {
Map<String, dynamic> toJson() => _$WeiboUserInfoRespToJson(this);
}

View File

@ -1,6 +1,6 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'weibo_user_info_resp.dart';
part of 'weibo_api_resp.dart';
// **************************************************************************
// JsonSerializableGenerator

52
example/lib/weibo.dart Normal file
View File

@ -0,0 +1,52 @@
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:weibo_kit/weibo_kit.dart';
import 'package:weibo_kit_example/model/weibo_api_resp.dart';
extension ApiWeibo on Weibo {
///
Future<WeiboUserInfoResp> getUserInfo({
required String appkey,
required String userId,
required String accessToken,
}) {
final Map<String, String> params = <String, String>{
'uid': userId,
};
return HttpClient()
.getUrl(_encodeUrl('https://api.weibo.com/2/users/show.json', appkey,
accessToken, params))
.then((HttpClientRequest request) {
return request.close();
}).then((HttpClientResponse response) async {
if (response.statusCode == HttpStatus.ok) {
final String content = await utf8.decodeStream(response);
return WeiboUserInfoResp.fromJson(
json.decode(content) as Map<String, dynamic>);
}
throw HttpException(
'HttpResponse statusCode: ${response.statusCode}, reasonPhrase: ${response.reasonPhrase}.');
});
}
Uri _encodeUrl(
String baseUrl,
String appkey,
String accessToken,
Map<String, String> params,
) {
params['source'] = appkey;
params['access_token'] = accessToken;
final Uri baseUri = Uri.parse(baseUrl);
final Map<String, List<String>> queryParametersAll =
Map<String, List<String>>.of(baseUri.queryParametersAll);
for (final MapEntry<String, String> entry in params.entries) {
queryParametersAll.remove(entry.key);
queryParametersAll.putIfAbsent(entry.key, () => <String>[entry.value]);
}
return baseUri.replace(queryParameters: queryParametersAll);
}
}

View File

@ -1,6 +1,20 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
_fe_analyzer_shared:
dependency: transitive
description:
name: _fe_analyzer_shared
url: "https://pub.flutter-io.cn"
source: hosted
version: "22.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.7.1"
archive:
dependency: transitive
description:
@ -8,6 +22,13 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.1.2"
args:
dependency: transitive
description:
name: args
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.2.0"
async:
dependency: transitive
description:
@ -22,6 +43,62 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.0"
build:
dependency: transitive
description:
name: build
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.3"
build_config:
dependency: transitive
description:
name: build_config
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.4.7"
build_daemon:
dependency: transitive
description:
name: build_daemon
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.10"
build_resolvers:
dependency: transitive
description:
name: build_resolvers
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.4"
build_runner:
dependency: "direct dev"
description:
name: build_runner
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.12.2"
build_runner_core:
dependency: transitive
description:
name: build_runner_core
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.1.12"
built_collection:
dependency: transitive
description:
name: built_collection
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.1.0"
built_value:
dependency: transitive
description:
name: built_value
url: "https://pub.flutter-io.cn"
source: hosted
version: "8.1.1"
characters:
dependency: transitive
description:
@ -36,6 +113,20 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.0"
checked_yaml:
dependency: transitive
description:
name: checked_yaml
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.1"
cli_util:
dependency: transitive
description:
name: cli_util
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.3.3"
clock:
dependency: transitive
description:
@ -43,6 +134,13 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.0"
code_builder:
dependency: transitive
description:
name: code_builder
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.7.0"
collection:
dependency: transitive
description:
@ -50,6 +148,13 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.15.0"
convert:
dependency: transitive
description:
name: convert
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.1"
crypto:
dependency: transitive
description:
@ -64,6 +169,13 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.2"
dart_style:
dependency: transitive
description:
name: dart_style
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.14"
fake_async:
dependency: transitive
description:
@ -85,6 +197,13 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.1.0"
fixnum:
dependency: transitive
description:
name: fixnum
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.0"
flutter:
dependency: "direct main"
description: flutter
@ -102,6 +221,20 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
glob:
dependency: transitive
description:
name: glob
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.1"
graphs:
dependency: transitive
description:
name: graphs
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.0"
http:
dependency: transitive
description:
@ -109,6 +242,13 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.13.0"
http_multi_server:
dependency: transitive
description:
name: http_multi_server
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.1"
http_parser:
dependency: transitive
description:
@ -123,13 +263,41 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.1"
json_annotation:
io:
dependency: transitive
description:
name: io
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.3"
js:
dependency: transitive
description:
name: js
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.6.3"
json_annotation:
dependency: "direct main"
description:
name: json_annotation
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.0.0"
json_serializable:
dependency: "direct dev"
description:
name: json_serializable
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.0.3"
logging:
dependency: transitive
description:
name: logging
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.1"
matcher:
dependency: transitive
description:
@ -144,6 +312,20 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.0"
mime:
dependency: transitive
description:
name: mime
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.0"
package_config:
dependency: transitive
description:
name: package_config
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.0"
path:
dependency: transitive
description:
@ -214,6 +396,13 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.0"
pool:
dependency: transitive
description:
name: pool
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.5.0"
process:
dependency: transitive
description:
@ -221,6 +410,20 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.1.0"
pub_semver:
dependency: transitive
description:
name: pub_semver
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.0"
pubspec_parse:
dependency: transitive
description:
name: pubspec_parse
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.0"
rxdart:
dependency: transitive
description:
@ -228,11 +431,32 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.26.0"
shelf:
dependency: transitive
description:
name: shelf
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.0"
shelf_web_socket:
dependency: transitive
description:
name: shelf_web_socket
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.1"
sky_engine:
dependency: transitive
description: flutter
source: sdk
version: "0.0.99"
source_gen:
dependency: transitive
description:
name: source_gen
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.9.10+4"
source_span:
dependency: transitive
description:
@ -268,6 +492,13 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.0"
stream_transform:
dependency: transitive
description:
name: stream_transform
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.0"
string_scanner:
dependency: transitive
description:
@ -296,6 +527,13 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.3.0"
timing:
dependency: transitive
description:
name: timing
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.0"
typed_data:
dependency: transitive
description:
@ -317,6 +555,20 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.0"
watcher:
dependency: transitive
description:
name: watcher
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.0"
web_socket_channel:
dependency: transitive
description:
name: web_socket_channel
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.0"
weibo_kit:
dependency: "direct main"
description:
@ -345,6 +597,13 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.0.2"
yaml:
dependency: transitive
description:
name: yaml
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.1.0"
sdks:
dart: ">=2.12.0 <3.0.0"
flutter: ">=1.24.0-10"

View File

@ -29,12 +29,17 @@ dependencies:
image: ^3.0.1
flutter_cache_manager: ^3.0.0-nullsafety.1
json_annotation: ^4.0.0
dev_dependencies:
flutter_test:
sdk: flutter
pedantic:
build_runner:
json_serializable:
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec

View File

@ -1,21 +0,0 @@
import 'package:json_annotation/json_annotation.dart';
abstract class WeiboApiResp {
const WeiboApiResp({
required this.errorCode,
this.error,
this.request,
});
static const int ERROR_CODE_SUCCESS = 0;
/// https://open.weibo.com/wiki/Help/error
@JsonKey(
defaultValue: ERROR_CODE_SUCCESS,
)
final int errorCode;
final String? error;
final String? request;
bool get isSuccessful => errorCode == ERROR_CODE_SUCCESS;
}

View File

@ -1,5 +1,5 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:weibo_kit/src/model/sdk/weibo_sdk_resp.dart';
import 'package:weibo_kit/src/model/weibo_sdk_resp.dart';
part 'weibo_auth_resp.g.dart';

View File

@ -1,12 +1,10 @@
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/services.dart';
import 'package:weibo_kit/src/model/api/weibo_user_info_resp.dart';
import 'package:weibo_kit/src/model/sdk/weibo_auth_resp.dart';
import 'package:weibo_kit/src/model/sdk/weibo_sdk_resp.dart';
import 'package:weibo_kit/src/model/weibo_auth_resp.dart';
import 'package:weibo_kit/src/model/weibo_sdk_resp.dart';
class Weibo {
///
@ -115,49 +113,6 @@ class Weibo {
);
}
///
Future<WeiboUserInfoResp> getUserInfo({
required String appkey,
required String userId,
required String accessToken,
}) {
final Map<String, String> params = <String, String>{
'uid': userId,
};
return HttpClient()
.getUrl(_encodeUrl('https://api.weibo.com/2/users/show.json', appkey,
accessToken, params))
.then((HttpClientRequest request) {
return request.close();
}).then((HttpClientResponse response) async {
if (response.statusCode == HttpStatus.ok) {
final String content = await utf8.decodeStream(response);
return WeiboUserInfoResp.fromJson(
json.decode(content) as Map<String, dynamic>);
}
throw HttpException(
'HttpResponse statusCode: ${response.statusCode}, reasonPhrase: ${response.reasonPhrase}.');
});
}
Uri _encodeUrl(
String baseUrl,
String appkey,
String accessToken,
Map<String, String> params,
) {
params['source'] = appkey;
params['access_token'] = accessToken;
final Uri baseUri = Uri.parse(baseUrl);
final Map<String, List<String>> queryParametersAll =
Map<String, List<String>>.of(baseUri.queryParametersAll);
for (final MapEntry<String, String> entry in params.entries) {
queryParametersAll.remove(entry.key);
queryParametersAll.putIfAbsent(entry.key, () => <String>[entry.value]);
}
return baseUri.replace(queryParameters: queryParametersAll);
}
/// -
Future<void> shareText({
required String text,

View File

@ -1,8 +1,6 @@
library weibo_kit;
export 'src/model/api/weibo_api_resp.dart';
export 'src/model/api/weibo_user_info_resp.dart';
export 'src/model/sdk/weibo_auth_resp.dart';
export 'src/model/sdk/weibo_sdk_resp.dart';
export 'src/model/weibo_auth_resp.dart';
export 'src/model/weibo_sdk_resp.dart';
export 'src/weibo.dart';
export 'src/weibo_constant.dart';