Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -72,19 +72,19 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/webview_flutter/ios"

SPEC CHECKSUMS:
device_info: 3ebad48f726348f69abd802f3334a8d1ed795fbd
device_info: cbf09d2ec12aa7110e0b09fabe54b5bd6c8efe74
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
flutter_webview_plugin: ed9e8a6a96baf0c867e90e1bce2673913eeac694
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
launch_review: 75d5a956ba8eaa493e9c9d4bf4c05e505e8d5ed0
open_file: 02eb5cb6b21264bd3a696876f5afbfb7ca4f4b7d
package_info: 78cabb3c322943c55d39676f4a5bfc748c01d055
path_provider: f96fff6166a8867510d2c25fdcc346327cc4b259
package_info: 48b108e75b8802c2d5e126f208ef540561c98aef
path_provider: fb74bd0465e96b594bb3b5088ee4a4e7bb1f2a9d
share: 7d22fe8baedfe93aefd864bf0b73f29711fbb0a3
shared_preferences: 430726339841afefe5142b9c1f50cb6bd7793e01
sqflite: ff1d9da63c06588cc8d1faf7256d741f16989d5a
url_launcher: 0067ddb8f10d36786672aa0722a21717dba3a298
webview_flutter: 1aa7604e6cdb451a9b7ed2c37d5454c0b440246b
url_launcher: a1c0cc845906122c4784c542523d8cacbded5626
webview_flutter: db3aba222b23e4dc432e0c5882834123dc50ff9f

PODFILE CHECKSUM: 7fb83752f59ead6285236625b82473f90b1cb932

Expand Down
51 changes: 51 additions & 0 deletions lib/config/app_store.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import 'dart:io';

import 'package:flutter/cupertino.dart';
import 'package:fun_android/utils/platform_utils.dart';

import 'net/lean_cloud_api.dart';

var isReviewing = true;

/// 是否在审核期间
bool get appStoreReview {
return Platform.isIOS ? isReviewing : false;
}

/// 或者正在审核字段 1:正在审核
Future fetchReviewState() async {
if (!Platform.isIOS) {
isReviewing = false;
return;
}
// 该日期后不再审核
if (DateTime.now().isAfter(DateTime(2019, 10, 20, 9, 30))) {
isReviewing = false;
return;
}
// 设置过审核结束后,就无需再进入了
if (!isReviewing) return;
var version = await PlatformUtils.getAppVersion();
var response = await http.get<List>('classes/appVersion', queryParameters: {
'where': '{"platform": "appStore", "version": "$version"}'
});
if (response.data.length > 0) {
var result = response.data[0]['url'];
isReviewing = result == '1';
}
debugPrint('是否正在review:$isReviewing');
}

/// 替换android字符
String replaceAndroid(String str) {
if (appStoreReview) {
return str
.replaceAll(RegExp(r'wanandroid', caseSensitive: false), '学iOS')
.replaceAll(RegExp(r'android', caseSensitive: false), 'iOS')
.replaceAll('安卓', '苹果');
}
return str;
}

const String appleBannerUrl =
'https://www.wanandroid.com/blogimgs/90c6cc12-742e-4c9f-b318-b912f163b8d0.png';
68 changes: 68 additions & 0 deletions lib/config/net/lean_cloud_api.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';

import 'api.dart';

final Http http = Http();

class Http extends BaseHttp {
@override
void init() {
options.baseUrl = 'https://funandroid.phoenixsky.cn/1.1/';
interceptors.add(LeanCloudApiInterceptor());
}
}

/// App相关 API
class LeanCloudApiInterceptor extends InterceptorsWrapper {
@override
onRequest(RequestOptions options) async {
options.headers['X-LC-Id'] = 'z3J5KBtLrbmeMAyo6D2uXobV-9Nh9j0Va';
options.headers['X-LC-Key'] = 'nxHpvHda10VYhx7fIUv5sqFo';
options.headers['Content-Type'] = 'application/json';

debugPrint('---api-request--->url--> ${options.baseUrl}${options.path}' +
' queryParameters: ${options.queryParameters}');
return options;
}

@override
onResponse(Response response) {
RespData respData = RespData.fromJson(response.data);
if (respData.success) {
response.data = respData.data;
return http.resolve(response);
} else {
return http.reject(respData.message);
}
}
}

class RespData {
dynamic data;
int code;
String message;

bool get success => code == null;

RespData({this.data, this.code, this.message});

@override
String toString() {
return 'RespData{data: $data, status: $code, message: $message}';
}

Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['code'] = this.code;
data['error'] = this.message;
data['result'] = this.data;
return data;
}

RespData.fromJson(Map<String, dynamic> json) {
code = json['code'];
message = json['error'];
data = json['results'];
}
}
3 changes: 2 additions & 1 deletion lib/model/article.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:fun_android/config/app_store.dart';
import 'package:fun_android/utils/string_utils.dart';

class Article {
Expand Down Expand Up @@ -59,7 +60,7 @@ class Article {
articleBean.superChapterName = StringUtils.urlDecoder(map["superChapterName"]);
articleBean.tags = List()
..addAll((map['tags'] as List ?? []).map((o) => TagsBean.fromMap(o)));
articleBean.title = StringUtils.urlDecoder(map["title"]);
articleBean.title = replaceAndroid(StringUtils.urlDecoder(map["title"]));
articleBean.type = map['type'];
articleBean.userId = map['userId'];
articleBean.visible = map['visible'];
Expand Down
4 changes: 3 additions & 1 deletion lib/model/banner.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'package:fun_android/config/app_store.dart';

class Banner {
String desc;
int id;
Expand All @@ -11,7 +13,7 @@ class Banner {
Banner.fromJsonMap(Map<String, dynamic> map)
: desc = map["desc"],
id = map["id"],
imagePath = map["imagePath"],
imagePath = appStoreReview ? appleBannerUrl : map["imagePath"],
isVisible = map["isVisible"],
order = map["order"],
title = map["title"],
Expand Down
5 changes: 2 additions & 3 deletions lib/provider/provider_widget_selector.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import 'package:flutter/material.dart';
import 'package:fun_android/generated/i18n.dart';
import 'package:provider/provider.dart';

/// Provider封装类
Expand All @@ -21,10 +20,10 @@ class ProviderWidget<T extends ChangeNotifier,S> extends StatefulWidget {
this.onModelReady,
}) : super(key: key);

_ProviderWidgetState<T> createState() => _ProviderWidgetState<T>();
_ProviderWidgetState<T,S> createState() => _ProviderWidgetState<T,S>();
}

class _ProviderWidgetState<T extends ChangeNotifier>
class _ProviderWidgetState<T extends ChangeNotifier,S>
extends State<ProviderWidget<T,S>> {
T model;

Expand Down
2 changes: 2 additions & 0 deletions lib/ui/page/splash.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'dart:ui';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_swiper/flutter_swiper.dart';
import 'package:fun_android/config/app_store.dart';

import 'package:fun_android/config/router_manger.dart';
import 'package:fun_android/config/resource_mananger.dart';
Expand Down Expand Up @@ -38,6 +39,7 @@ class _SplashPageState extends State<SplashPage> with TickerProviderStateMixin {
_countdownController =
AnimationController(vsync: this, duration: Duration(seconds: 4));
_countdownController.forward();
fetchReviewState();
super.initState();
}

Expand Down
2 changes: 2 additions & 0 deletions lib/ui/page/tab/home_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';

import 'package:flutter_swiper/flutter_swiper.dart';
import 'package:fun_android/config/app_store.dart';
import 'package:fun_android/generated/i18n.dart';
import 'package:fun_android/ui/helper/refresh_helper.dart';
import 'package:fun_android/ui/widget/skeleton.dart';
Expand Down Expand Up @@ -196,6 +197,7 @@ class BannerWidget extends StatelessWidget {
itemBuilder: (ctx, index) {
return InkWell(
onTap: () {
if(appStoreReview) return;
var banner = banners[index];
Navigator.of(context).pushNamed(RouteName.articleDetail,
arguments: Article()
Expand Down
1 change: 1 addition & 0 deletions lib/ui/page/tab/tab_navigator.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:fun_android/config/app_store.dart';
import 'package:fun_android/generated/i18n.dart';
import 'package:fun_android/ui/widget/app_update.dart';

Expand Down
2 changes: 2 additions & 0 deletions lib/ui/widget/article_list_Item.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:fun_android/config/app_store.dart';
import 'package:fun_android/generated/i18n.dart';
import 'package:fun_android/ui/helper/favourite_helper.dart';
import 'package:fun_android/config/router_manger.dart';
Expand Down Expand Up @@ -44,6 +45,7 @@ class ArticleItemWidget extends StatelessWidget {
child: InkWell(
onTap: onTap ??
() {
if (appStoreReview) return;
Navigator.of(context)
.pushNamed(RouteName.articleDetail, arguments: article);
},
Expand Down
1 change: 1 addition & 0 deletions lib/ui/widget/banner_image.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:fun_android/config/app_store.dart';
import 'package:fun_android/config/resource_mananger.dart';

class BannerImage extends StatelessWidget {
Expand Down
21 changes: 11 additions & 10 deletions lib/ui/widget/image.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:fun_android/config/app_store.dart';
import 'package:fun_android/config/resource_mananger.dart';

enum ImageType {
Expand All @@ -24,16 +25,16 @@ class WrapperImage extends StatelessWidget {

@override
Widget build(BuildContext context) {
return CachedNetworkImage(
imageUrl: imageUrl,
width: width,
height: height,
placeholder: (_, __) =>
ImageHelper.placeHolder(width: width, height: height),
errorWidget: (_, __, ___) =>
ImageHelper.error(width: width, height: height),
fit: fit,
);
return CachedNetworkImage(
imageUrl: imageUrl,
width: width,
height: height,
placeholder: (_, __) =>
ImageHelper.placeHolder(width: width, height: height),
errorWidget: (_, __, ___) =>
ImageHelper.error(width: width, height: height),
fit: fit,
);
}

String get imageUrl {
Expand Down
Loading