From 0fd620051053c237c4cae90bf5ee4c9e049709a5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Fri, 21 Jan 2022 15:29:53 +0800
Subject: [PATCH 01/22] =?UTF-8?q?=E6=9B=B4=E6=96=B0(=E4=BF=AE=E6=94=B9?=
=?UTF-8?q?=E4=B8=8A=E4=BC=A0=E8=84=9A=E6=9C=AC&=E4=BF=AE=E6=94=B9?=
=?UTF-8?q?=E7=89=88=E6=9C=AC=E6=9B=B4=E6=96=B0=E5=B1=95=E7=A4=BA)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
auto_build_push.sh | 2 +-
lib/me/me_page.dart | 2 +-
lib/me/service/me_service_impl.dart | 1 +
3 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/auto_build_push.sh b/auto_build_push.sh
index ee1a372..832108f 100644
--- a/auto_build_push.sh
+++ b/auto_build_push.sh
@@ -11,7 +11,7 @@ needUpload="on"
buildType=""
#构建输出目录
-outputs=build\\app\\outputs\\flutter-apk\\
+outputs=build/app/outputs/flutter-apk/
#文件名
filename="app-debug.apk"
diff --git a/lib/me/me_page.dart b/lib/me/me_page.dart
index c5ab884..11035e2 100644
--- a/lib/me/me_page.dart
+++ b/lib/me/me_page.dart
@@ -85,7 +85,7 @@ class _MePageState extends State with AutomaticKeepAliveClientMixin {
await SPUtils.getInstance().getRememberPassword() ?? false;
PackageInfo packageInfo = await PackageInfo.fromPlatform();
- versionName = packageInfo.version;
+ versionName = "v${packageInfo.version}";
setState(() {});
}
diff --git a/lib/me/service/me_service_impl.dart b/lib/me/service/me_service_impl.dart
index 21e7fec..bc9f7d4 100644
--- a/lib/me/service/me_service_impl.dart
+++ b/lib/me/service/me_service_impl.dart
@@ -48,6 +48,7 @@ class MeServiceImpl extends MeService {
if (await _isNeedUpdate(value.data!)) {
showEasyDialog(
context: context,
+ title: "版本更新",
type: EasyDialogType.NormalTwoRowBtn,
content: updateContent,
contentTextAlign: TextAlign.start,
--
Gitee
From ad78270fc8b3ed415ecb92a1a21ef4b81de3ab24 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Fri, 21 Jan 2022 16:09:00 +0800
Subject: [PATCH 02/22] =?UTF-8?q?=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lib/global_model.dart | 13 +++-
lib/me/me_page.dart | 3 +-
lib/me/service/me_service_impl.dart | 98 +++++++++++++++++------------
3 files changed, 71 insertions(+), 43 deletions(-)
diff --git a/lib/global_model.dart b/lib/global_model.dart
index b1f89e0..6588ea3 100644
--- a/lib/global_model.dart
+++ b/lib/global_model.dart
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutterapp/common/base/base_mode.dart';
import 'package:flutterapp/common/util/log_utils.dart';
import 'package:flutterapp/common/util/theme_data_utils.dart';
+import 'package:package_info/package_info.dart';
import 'common/util/sp_utils.dart';
/// 全局数据模型类,需要在启动时放入
@@ -11,6 +12,9 @@ class GLobalModel extends BaseModel {
/// 当前主题
ThemeData? curTheme;
+ /// 当前包的信息
+ PackageInfo? packageInfo;
+
GLobalModel() {
init();
}
@@ -34,11 +38,16 @@ class GLobalModel extends BaseModel {
});
}
+ Future initPackageInfo() {
+ return PackageInfo.fromPlatform().then((value) {
+ packageInfo = value;
+ return true;
+ });
+ }
+
/// 刷新当前主题
void refreshCurTheme(int position) {
curTheme = ThemeDataUtils.getThemeByIndex(position);
notifyListeners();
}
-
-
}
diff --git a/lib/me/me_page.dart b/lib/me/me_page.dart
index 11035e2..a0191bb 100644
--- a/lib/me/me_page.dart
+++ b/lib/me/me_page.dart
@@ -85,7 +85,8 @@ class _MePageState extends State with AutomaticKeepAliveClientMixin {
await SPUtils.getInstance().getRememberPassword() ?? false;
PackageInfo packageInfo = await PackageInfo.fromPlatform();
- versionName = "v${packageInfo.version}";
+ bool haveUpdate = await MeServiceImpl.getInstance().checkNeedUpdate();
+ versionName = "v${packageInfo.version}${haveUpdate ? "(有更新)" : ""}";
setState(() {});
}
diff --git a/lib/me/service/me_service_impl.dart b/lib/me/service/me_service_impl.dart
index bc9f7d4..ea50a36 100644
--- a/lib/me/service/me_service_impl.dart
+++ b/lib/me/service/me_service_impl.dart
@@ -2,7 +2,6 @@ import 'package:dio/dio.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutterapp/common/constant/API.dart';
import 'package:flutterapp/common/util/dialog_utils.dart';
-import 'package:flutterapp/common/util/log_utils.dart';
import 'package:flutterapp/common/util/toast_utils.dart';
import 'package:flutterapp/http/http_utils.dart';
import 'package:flutterapp/me/service/me_service.dart';
@@ -14,7 +13,7 @@ class MeServiceImpl extends MeService {
static MeServiceImpl? _instance;
/// 版本升级提示内容
- String updateContent = '';
+ String _updateContent = '';
static MeServiceImpl getInstance() {
if (_instance == null) _instance = MeServiceImpl._();
@@ -39,48 +38,67 @@ class MeServiceImpl extends MeService {
}
/// 自动检测下载安装
- void autoCheckUpdate(BuildContext context) {
- appCheck().then((value) async {
- if (value?.data?.downloadUrl == null ||
- value!.data!.downloadUrl!.isEmpty) {
- shortToast('当前已是最新版本!');
+ Future autoCheckUpdate(BuildContext context) async {
+ try {
+ // 请求后台数据
+ AppCheckEntity? appCheckEntity = await appCheck();
+ // 获取本地包的数据
+ PackageInfo packageInfo = await PackageInfo.fromPlatform();
+ //远程的版本号不同于本地,且版本编号大于本地
+ int localBuildNo = int.tryParse(packageInfo.buildNumber) ?? 0;
+ int originBuildNo =
+ int.tryParse(appCheckEntity?.data?.buildVersionNo ?? '') ?? 0;
+ // 设置弹窗提示内容
+ _updateContent =
+ "更新内容:\n${appCheckEntity?.data?.buildUpdateDescription ?? ''}\n\n版本: ${packageInfo.version}->${appCheckEntity?.data?.buildVersion}";
+
+ // 更新逻辑(版本名称不同且远程版本编号大于本地版本编号)
+ if (packageInfo.version != appCheckEntity?.data?.buildVersion &&
+ originBuildNo > localBuildNo) {
+ showEasyDialog(
+ context: context,
+ title: "版本更新",
+ type: EasyDialogType.NormalTwoRowBtn,
+ content: _updateContent,
+ contentTextAlign: TextAlign.start,
+ leftOrTopBtnText: '忽略此版本',
+ rightOrBottomBtnText: '确定升级',
+ leftOrTopOnTap: (context) => Navigator.pop(context),
+ rightOrBottomOnTap: (context) {
+ Navigator.pop(context);
+ RUpgrade.upgrade(
+ appCheckEntity?.data?.downloadUrl ?? '',
+ fileName: 'wan-android-release.apk',
+ isAutoRequestInstall: true,
+ );
+ },
+ );
} else {
- if (await _isNeedUpdate(value.data!)) {
- showEasyDialog(
- context: context,
- title: "版本更新",
- type: EasyDialogType.NormalTwoRowBtn,
- content: updateContent,
- contentTextAlign: TextAlign.start,
- leftOrTopBtnText: '忽略此版本',
- rightOrBottomBtnText: '确定升级',
- leftOrTopOnTap: (context) => Navigator.pop(context),
- rightOrBottomOnTap: (context) {
- Navigator.pop(context);
- RUpgrade.upgrade(
- value.data?.downloadUrl ?? '',
- fileName: 'wan-android-release.apk',
- isAutoRequestInstall: true,
- );
- },
- );
- } else {
- shortToast('当前已是最新版本!');
- }
+ shortToast('当前已是最新版本!');
}
- });
+ } catch (e) {
+ shortToast(e.toString());
+ }
}
- /// 是否有新版本
- Future _isNeedUpdate(AppCheckData data) {
- return PackageInfo.fromPlatform().then((value) {
- LogUtils.d('本地包的信息为:$value');
+ /// 检测是否有更新
+ Future checkNeedUpdate() async {
+ try {
+ // 请求后台数据
+ AppCheckEntity? appCheckEntity = await appCheck();
+ // 获取本地包的数据
+ PackageInfo packageInfo = await PackageInfo.fromPlatform();
//远程的版本号不同于本地,且版本编号大于本地
- int localBuildNo = int.tryParse(value.buildNumber) ?? 0;
- int originBuildNo = int.tryParse(data.buildVersionNo ?? '') ?? 0;
- updateContent =
- "更新内容:\n${data.buildUpdateDescription ?? ''}\n\n版本: ${value.version}->${data.buildVersion}";
- return value.version != data.buildVersion && originBuildNo > localBuildNo;
- });
+ int localBuildNo = int.tryParse(packageInfo.buildNumber) ?? 0;
+ int originBuildNo =
+ int.tryParse(appCheckEntity?.data?.buildVersionNo ?? '') ?? 0;
+
+ // 更新逻辑(版本名称不同且远程版本编号大于本地版本编号)
+ return packageInfo.version != appCheckEntity?.data?.buildVersion &&
+ originBuildNo > localBuildNo;
+ } catch (e) {
+ shortToast(e.toString());
+ return false;
+ }
}
}
--
Gitee
From 21673de133dc5429f2b541a6daa1edd6216c1383 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Fri, 21 Jan 2022 16:26:31 +0800
Subject: [PATCH 03/22] =?UTF-8?q?=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
android/local.properties | 4 +--
lib/main.dart | 8 +++--
lib/me/me_page.dart | 31 +++++++++++++++++++
lib/me/page/update_theme_page.dart | 4 +--
.../global_app_model.dart} | 19 +++++-------
lib/provider/global_user_model.dart | 10 ++++++
pubspec.yaml | 2 +-
7 files changed, 58 insertions(+), 20 deletions(-)
rename lib/{global_model.dart => provider/global_app_model.dart} (72%)
create mode 100644 lib/provider/global_user_model.dart
diff --git a/android/local.properties b/android/local.properties
index 67f11e2..9ba4cdf 100644
--- a/android/local.properties
+++ b/android/local.properties
@@ -1,5 +1,5 @@
sdk.dir=C:\\Users\\admin\\AppData\\Local\\Android\\Sdk
flutter.sdk=D:\\Smaboy\\source\\flutter
flutter.buildMode=debug
-flutter.versionName=1.0.4
-flutter.versionCode=5
\ No newline at end of file
+flutter.versionName=1.0.5
+flutter.versionCode=6
\ No newline at end of file
diff --git a/lib/main.dart b/lib/main.dart
index 985ad8a..a6fab4c 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
-import 'package:flutterapp/global_model.dart';
+import 'package:flutterapp/provider/global_app_model.dart';
+import 'package:flutterapp/provider/global_user_model.dart';
import 'package:provider/provider.dart';
import 'common/util/global_utils.dart';
@@ -10,7 +11,8 @@ void main() {
//程序入口
runApp(MultiProvider(
providers: [
- ChangeNotifierProvider(create: (_) => GLobalModel()),
+ ChangeNotifierProvider(create: (_) => GLobalAppModel()),
+ ChangeNotifierProvider(create: (_) => GlobalUserModel()),
],
child: MyApp(),
));
@@ -25,7 +27,7 @@ class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
- theme: Provider.of(context).curTheme,
+ theme: Provider.of(context).curTheme,
darkTheme: ThemeData.dark(),
home: MyWillPopScope(
child: MainPage(),
diff --git a/lib/me/me_page.dart b/lib/me/me_page.dart
index a0191bb..8ead7b8 100644
--- a/lib/me/me_page.dart
+++ b/lib/me/me_page.dart
@@ -338,3 +338,34 @@ class MeListItem extends StatelessWidget {
);
}
}
+
+// class MeModel extends BaseModel {
+
+// Image _backGroundImage = Image(
+// image: AssetImage("images/lake.jpg"),
+// fit: BoxFit.fill,
+// );
+// final picker = ImagePicker();
+
+// //判断用户是否登录
+// var isLogin = false;
+
+// //用户名称
+// var userName = "";
+
+// //密码
+// var password = "";
+
+// // 记住密码
+// var rememberPassword = false;
+
+// late StreamSubscription loginSubscription;
+
+// String? versionName;
+
+
+// @override
+// Future init() {
+// return Future.value(true);
+// }
+// }
diff --git a/lib/me/page/update_theme_page.dart b/lib/me/page/update_theme_page.dart
index 8393e9d..b97182a 100644
--- a/lib/me/page/update_theme_page.dart
+++ b/lib/me/page/update_theme_page.dart
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutterapp/common/util/log_utils.dart';
import 'package:flutterapp/common/util/sp_utils.dart';
import 'package:flutterapp/common/util/theme_data_utils.dart';
-import 'package:flutterapp/global_model.dart';
+import 'package:flutterapp/provider/global_app_model.dart';
import 'package:provider/provider.dart';
class UpdateThemePage extends StatefulWidget {
@@ -105,7 +105,7 @@ class _UpdateThemePageState extends State {
});
// 发送通知,主题改变了
- Provider.of(context, listen: false)
+ Provider.of(context, listen: false)
.refreshCurTheme(_selectedIndex);
}
diff --git a/lib/global_model.dart b/lib/provider/global_app_model.dart
similarity index 72%
rename from lib/global_model.dart
rename to lib/provider/global_app_model.dart
index 6588ea3..d790ba1 100644
--- a/lib/global_model.dart
+++ b/lib/provider/global_app_model.dart
@@ -1,31 +1,26 @@
import 'package:flutter/material.dart';
-import 'package:flutterapp/common/base/base_mode.dart';
import 'package:flutterapp/common/util/log_utils.dart';
import 'package:flutterapp/common/util/theme_data_utils.dart';
import 'package:package_info/package_info.dart';
-import 'common/util/sp_utils.dart';
+import '../common/util/sp_utils.dart';
/// 全局数据模型类,需要在启动时放入
///
-/// 放置一些全局的数据,比如登录数据,设备数据,主题数据等
-class GLobalModel extends BaseModel {
+/// 放置一些全局的数据,比如包数据,主题数据等
+class GLobalAppModel extends ChangeNotifier {
/// 当前主题
ThemeData? curTheme;
/// 当前包的信息
PackageInfo? packageInfo;
- GLobalModel() {
+ GLobalAppModel() {
init();
}
- @override
- Future init() {
- return Future.wait(
- [
- initCurTheme(),
- ],
- ).then((value) => true);
+ init() {
+ initCurTheme();
+ initPackageInfo();
}
/// 初始化主题数据
diff --git a/lib/provider/global_user_model.dart b/lib/provider/global_user_model.dart
new file mode 100644
index 0000000..5b356fe
--- /dev/null
+++ b/lib/provider/global_user_model.dart
@@ -0,0 +1,10 @@
+import 'package:flutter/cupertino.dart';
+
+/// 全局用户数据模型
+class GlobalUserModel extends ChangeNotifier {
+
+ /// 是否登录
+ bool isLogin = false;
+
+ /// 用户名
+}
diff --git a/pubspec.yaml b/pubspec.yaml
index a7cd54a..0290b2a 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# version统一版本名称和版本号,'+'前面的为版本名称,后面的为版本号
-version: 1.0.6+7
+version: 1.0.5+6
environment:
sdk: ">=2.12.0 <3.0.0"
--
Gitee
From e87fa419cdf387129a8df0fefe56c3da927afc76 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Fri, 21 Jan 2022 17:03:50 +0800
Subject: [PATCH 04/22] =?UTF-8?q?=E6=9B=B4=E6=96=B0(=E4=BF=AE=E6=94=B9andr?=
=?UTF-8?q?oid=E6=89=93=E5=8C=85=E9=85=8D=E7=BD=AE)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
android/app/build.gradle | 33 +++++++++++++++++++++++++++++++--
1 file changed, 31 insertions(+), 2 deletions(-)
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 2c178dd..763aad6 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -21,6 +21,11 @@ if (flutterVersionName == null) {
flutterVersionName = '1.0.0'
}
+def isDebug = localProperties.getProperty('flutter.buildMode')
+if (isDebug == null) {
+ isDebug= 'debug'
+}
+
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
@@ -53,17 +58,40 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.smaboy.f_wanandroid"
+ if(isDebug == 'debug'){
+ applicationId "com.smaboy.f_wanandroid.debug"
+ }else{
+ applicationId "com.smaboy.f_wanandroid"
+ }
minSdkVersion 20
targetSdkVersion 31
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
+ // multiDexEnabled true
}
buildTypes {
release {
- // TODO: Add your own signing config for the release build.
- // Signing with the debug keys for now, so `flutter run --release` works.
+ signingConfig signingConfigs.release
+ minifyEnabled true
+ shrinkResources true
+ zipAlignEnabled true
+ // useProguard true
+ // proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ ndk {
+ //选择要添加的对应 cpu 类型的 .so 库。
+ abiFilters "armeabi","armeabi-v7a" //"arm64-v8a" ,
+ }
+ }
+ debug {
signingConfig signingConfigs.debug
+ minifyEnabled false
+ // useProguard false
+ // proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ ndk {
+ //选择要添加的对应 cpu 类型的 .so 库。
+ abiFilters "armeabi", "armeabi-v7a","arm64-v8a","x86","x86_64"
+ }
}
}
}
@@ -74,4 +102,5 @@ flutter {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+ // implementation group: 'androidx.multidex', name: 'multidex', version: '2.0.1'
}
--
Gitee
From 3c75174eb4f2c3b5a72b48c14ce03b981313a721 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Fri, 21 Jan 2022 17:59:57 +0800
Subject: [PATCH 05/22] =?UTF-8?q?=E4=BD=93=E7=B3=BB=E5=92=8C=E9=A1=B9?=
=?UTF-8?q?=E7=9B=AE=E9=A1=B5=E9=9D=A2=E6=94=B9=E9=80=A0=E5=AE=8C=E6=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lib/item/ItemPage.dart | 90 ++++++++++--------
lib/system/SystemPage.dart | 190 +++++++++++++++++++------------------
2 files changed, 146 insertions(+), 134 deletions(-)
diff --git a/lib/item/ItemPage.dart b/lib/item/ItemPage.dart
index 44f5c49..41624fd 100644
--- a/lib/item/ItemPage.dart
+++ b/lib/item/ItemPage.dart
@@ -1,5 +1,8 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
+import 'package:flutterapp/common/base/base_mode.dart';
+import 'package:flutterapp/common/base/base_page.dart';
+import 'package:flutterapp/common/base/base_provider.dart';
import 'package:flutterapp/common/util/router_helpe_utils.dart';
import 'package:flutterapp/common/util/log_utils.dart';
import 'package:flutterapp/common/page/webview_page.dart';
@@ -21,55 +24,40 @@ class ItemPage extends StatefulWidget {
class _ItemPageState extends State
with AutomaticKeepAliveClientMixin {
- //项目子项集合
- List? data;
-
@override
Widget build(BuildContext context) {
super.build(context);
- return DefaultTabController(
- length: data?.length ?? 0,
- initialIndex: 0,
- child: Scaffold(
- appBar: AppBar(
- title: Text(widget.title ?? ''),
- centerTitle: true,
- bottom: TabBar(
- isScrollable: true,
- tabs: getTitleItems(),
- ),
- ),
- body: TabBarView(
- children: getContentItems(),
- )),
+ return BaseProvider(
+ model: ItemModel(),
+ modelBuilder: (context, model) {
+ return DefaultTabController(
+ length: model.data?.length ?? 0,
+ initialIndex: 0,
+ child: BasePage(
+ appBar: AppBar(
+ title: Text(widget.title ?? ''),
+ centerTitle: true,
+ bottom: TabBar(
+ isScrollable: true,
+ tabs: getTitleItems(model),
+ ),
+ ),
+ child: TabBarView(
+ children: getContentItems(model),
+ )),
+ );
+ },
);
}
- @override
- void initState() {
- super.initState();
- initData();
- }
-
- void initData() async {
- ItemTreeEntity itemTreeEntity =
- await ItemServiceImpl.getInstance().getItemTree();
- setState(() {
- if (itemTreeEntity.data != null &&
- (itemTreeEntity.data?.length ?? 0) > 0) {
- this.data = itemTreeEntity.data;
- }
- });
- LogUtils.d("ItemTreeEntity==第一个标题==${itemTreeEntity.data![0].name}");
- }
/// 项目页面标题组件子项集合
- List getTitleItems() {
+ List getTitleItems(ItemModel model) {
var tabs = [];
- if (data != null && (data?.length ?? 0) > 0) {
- for (ItemTreeData itemTreeData in data!) {
+ if (model.data != null && (model.data?.length ?? 0) > 0) {
+ for (ItemTreeData itemTreeData in model.data!) {
tabs.add(Tab(
child: Text(itemTreeData.name ?? ''),
));
@@ -79,10 +67,10 @@ class _ItemPageState extends State
}
/// 项目页面标题组件子项集合
- List getContentItems() {
+ List getContentItems(ItemModel model) {
var tabViewChildren = [];
- if (data != null && (data?.length ?? 0) > 0) {
- for (ItemTreeData itemTreeData in data!) {
+ if (model.data != null && (model.data?.length ?? 0) > 0) {
+ for (ItemTreeData itemTreeData in model.data!) {
tabViewChildren.add(ContentWidget(id: itemTreeData.id ?? 0));
}
}
@@ -368,3 +356,23 @@ class ContentEndWidget extends StatelessWidget {
);
}
}
+
+class ItemModel extends BaseModel {
+ //项目子项集合
+ List? data;
+
+ @override
+ Future init() {
+ return initData();
+ }
+
+ Future initData() {
+ return ItemServiceImpl.getInstance().getItemTree().then((value) {
+ if (value.data != null && (value.data?.length ?? 0) > 0) {
+ this.data = value.data;
+ return true;
+ }
+ return false;
+ });
+ }
+}
diff --git a/lib/system/SystemPage.dart b/lib/system/SystemPage.dart
index 8258fcc..73b9537 100644
--- a/lib/system/SystemPage.dart
+++ b/lib/system/SystemPage.dart
@@ -1,4 +1,7 @@
import 'package:flutter/material.dart';
+import 'package:flutterapp/common/base/base_mode.dart';
+import 'package:flutterapp/common/base/base_page.dart';
+import 'package:flutterapp/common/base/base_provider.dart';
import 'package:flutterapp/common/constant/API.dart';
import 'package:flutterapp/common/util/router_helpe_utils.dart';
import 'package:flutterapp/common/util/log_utils.dart';
@@ -21,97 +24,23 @@ class SystemPage extends StatefulWidget {
class SystemPageState extends State
with AutomaticKeepAliveClientMixin {
- /// 标题数据
- SystemTreeEntity? _systemTreeEntity;
-
- /// 被选中的一级标题,默认选中第一个
- int _selectedPosition = 0;
-
- ///应该展示的二级目录标题数据
- var _secondTitleData = SystemTreeData();
-
@override
Widget build(BuildContext context) {
super.build(context);
- return Scaffold(
- appBar: AppBar(
- title: Text(widget.title ?? ''),
- centerTitle: true,
- ),
- body: getTitleTreeWidget(),
- );
- }
-
- @override
- void initState() {
- super.initState();
-
- //初始化数据
- initTreeData();
- }
-
- ///初始化标题数据
- void initTreeData() async {
-
- SystemTreeEntity? data = await HttpUtils.getInstance().get2(API.systemTree,
- isNeedCache: true);
- setState(() {
- //设置标题数据
- _systemTreeEntity = data;
- //设置二级标题数据
- if (_systemTreeEntity?.data != null &&
- _systemTreeEntity!.data!.length > 0) {
- _secondTitleData = _systemTreeEntity!.data![_selectedPosition];
- }
- });
- }
-
- ///获取二级标题item组件集合
- List getSecondTitleTreeItemWidgets(SystemTreeData systemTreeData) {
- var titleTreeWidgets = [];
- if (systemTreeData.children != null &&
- systemTreeData.children!.length > 0) {
- for (var i = 0; i < systemTreeData.children!.length; i++) {
- var child = systemTreeData.children![i];
- titleTreeWidgets.add(ElevatedButton(
- child: Text(
- child.name ?? '',
- ),
- // color: Theme.of(context).primaryColor == MyColors.white ? Colors.blueAccent : Theme.of(context).primaryColor,
- // highlightColor: Theme.of(context).primaryColor,
- // colorBrightness: Brightness.dark,
- // splashColor: Colors.grey[700],
- // shape:RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)),
- onPressed: () {
- RouteHelpUtils.push(
- context,
- SystemItemDetailsPage(
- title: systemTreeData.name,
- tabList: systemTreeData.children,
- position: i,
- ));
- }));
- }
-
- LogUtils.d("第一个标题为:${systemTreeData.children![0].name}");
- }
-
- LogUtils.d("titleTreeWidgets的长度为:${titleTreeWidgets.length}");
-
- return titleTreeWidgets;
- }
-
- ///获取标题树组件
- Widget getTitleTreeWidget() {
- return Container(
+ return BaseProvider(
+ model: SystemModel(),
+ modelBuilder: (context, model) {
+ return BasePage(
+ title: widget.title ?? '',
+ child: Container(
child: Row(
mainAxisSize: MainAxisSize.max,
children: [
Container(
width: 100.0,
child: ListView.separated(
- itemCount: _systemTreeEntity?.data?.length ?? 0,
+ itemCount: model.systemTreeEntity?.data?.length ?? 0,
separatorBuilder: (buildContext, index) {
return Divider(
height: 2.0,
@@ -120,18 +49,18 @@ class SystemPageState extends State
},
itemBuilder: (BuildContext context, int index) {
return Container(
- color: index == _selectedPosition
+ color: index == model.selectedPosition
? Colors.grey[100]
: Colors.white,
child: Row(
children: [
Visibility(
- visible: index == _selectedPosition,
+ visible: index == model.selectedPosition,
child: Container(
- color:
- Theme.of(context).primaryColor == ThemeDataUtils.white
- ? Colors.blueAccent
- : Theme.of(context).primaryColor,
+ color: Theme.of(context).primaryColor ==
+ ThemeDataUtils.white
+ ? Colors.blueAccent
+ : Theme.of(context).primaryColor,
width: 5.0,
height: 30.0,
),
@@ -139,9 +68,9 @@ class SystemPageState extends State
Expanded(
child: ListTile(
title: Text(
- _systemTreeEntity!.data![index].name ?? '',
+ model.systemTreeEntity!.data![index].name ?? '',
style: TextStyle(
- color: index == _selectedPosition
+ color: index == model.selectedPosition
? (Theme.of(context).primaryColor ==
ThemeDataUtils.white
? Colors.blueAccent
@@ -151,10 +80,10 @@ class SystemPageState extends State
onTap: () {
setState(() {
//设置被点击位置
- _selectedPosition = index;
+ model.selectedPosition = index;
//设置应该被展示的二级标题
- _secondTitleData =
- _systemTreeEntity!.data![index];
+ model.secondTitleData =
+ model.systemTreeEntity!.data![index];
});
},
),
@@ -177,7 +106,7 @@ class SystemPageState extends State
spacing: 10.0, // 主轴(水平)方向间距
runSpacing: 4.0, // 纵轴(垂直)方向间距
alignment: WrapAlignment.start, //沿主轴方向居中
- children: getSecondTitleTreeItemWidgets(_secondTitleData),
+ children: getSecondTitleTreeItemWidgets(model.secondTitleData),
),
),
),
@@ -185,9 +114,84 @@ class SystemPageState extends State
//二级标题
],
),
+ ),
+ );
+ },
);
}
+ @override
+ void initState() {
+ super.initState();
+ }
+
+ ///获取二级标题item组件集合
+ List getSecondTitleTreeItemWidgets(SystemTreeData? systemTreeData) {
+ var titleTreeWidgets = [];
+ if (systemTreeData?.children != null &&
+ systemTreeData!.children!.length > 0) {
+ for (var i = 0; i < systemTreeData.children!.length; i++) {
+ var child = systemTreeData.children![i];
+ titleTreeWidgets.add(ElevatedButton(
+ child: Text(
+ child.name ?? '',
+ ),
+ // color: Theme.of(context).primaryColor == MyColors.white ? Colors.blueAccent : Theme.of(context).primaryColor,
+ // highlightColor: Theme.of(context).primaryColor,
+ // colorBrightness: Brightness.dark,
+ // splashColor: Colors.grey[700],
+ // shape:RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)),
+ onPressed: () {
+ RouteHelpUtils.push(
+ context,
+ SystemItemDetailsPage(
+ title: systemTreeData.name,
+ tabList: systemTreeData.children,
+ position: i,
+ ));
+ }));
+ }
+
+ LogUtils.d("第一个标题为:${systemTreeData.children![0].name}");
+ }
+
+ LogUtils.d("titleTreeWidgets的长度为:${titleTreeWidgets.length}");
+
+ return titleTreeWidgets;
+ }
+
+
@override
bool get wantKeepAlive => true;
}
+
+class SystemModel extends BaseModel {
+ /// 标题数据
+ SystemTreeEntity? systemTreeEntity;
+
+ /// 被选中的一级标题,默认选中第一个
+ int selectedPosition = 0;
+
+ ///应该展示的二级目录标题数据
+ SystemTreeData? secondTitleData;
+
+ @override
+ Future init() {
+ return initTreeData();
+ }
+
+ ///初始化标题数据
+ Future initTreeData() {
+ return HttpUtils.getInstance().get2(API.systemTree,
+ onSuccess: (data) {
+ //设置标题数据
+ systemTreeEntity = data;
+ //设置二级标题数据
+ if (systemTreeEntity?.data != null &&
+ systemTreeEntity!.data!.length > 0) {
+ secondTitleData = systemTreeEntity!.data![selectedPosition];
+ }
+ notifyListeners();
+ }, isNeedCache: true).then((value) => value != null);
+ }
+}
--
Gitee
From ae5daca2cff0a5e96567da982c0b34615498c417 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Thu, 17 Feb 2022 15:34:09 +0800
Subject: [PATCH 06/22] =?UTF-8?q?=E6=9B=B4=E6=96=B0(=E4=BF=AE=E6=94=B9buil?=
=?UTF-8?q?dtools=E3=80=81gradle=E7=89=88=E6=9C=AC)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
android/build.gradle | 4 ++--
android/gradle/wrapper/gradle-wrapper.properties | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/android/build.gradle b/android/build.gradle
index fb7ffaf..4dc3182 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -1,5 +1,5 @@
buildscript {
- ext.kotlin_version = '1.6.10'
+ ext.kotlin_version = '1.6.0'
repositories {
google()
jcenter()
@@ -7,7 +7,7 @@ buildscript {
}
dependencies {
- classpath 'com.android.tools.build:gradle:7.0.3'
+ classpath 'com.android.tools.build:gradle:3.6.4'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index b8793d3..2210ceb 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-all.zip
--
Gitee
From 1ff57035a06f80627ae1517395a037ea1137e740 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Thu, 17 Feb 2022 15:40:58 +0800
Subject: [PATCH 07/22] =?UTF-8?q?=E6=9B=B4=E6=96=B0(=E4=BF=AE=E6=94=B9buil?=
=?UTF-8?q?d.gradle)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
android/app/build.gradle | 10 +++
android/app/src/debug/AndroidManifest.xml | 87 ++++++++++++++++++++-
android/app/src/main/res/values/strings.xml | 1 +
3 files changed, 95 insertions(+), 3 deletions(-)
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 763aad6..2af7036 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -70,6 +70,16 @@ android {
// multiDexEnabled true
}
+ sourceSets {
+ main {
+ if (isDebug == 'debug') {
+ manifest.srcFile 'src/debug/AndroidManifest.xml'
+ } else {
+ manifest.srcFile 'src/main/AndroidManifest.xml'
+ }
+ }
+ }
+
buildTypes {
release {
signingConfig signingConfigs.release
diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml
index 7651d8e..1abe9e8 100644
--- a/android/app/src/debug/AndroidManifest.xml
+++ b/android/app/src/debug/AndroidManifest.xml
@@ -1,7 +1,88 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index e0f749a..506dca0 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -1,4 +1,5 @@
玩安卓
+ 玩安卓测试版
\ No newline at end of file
--
Gitee
From 0c3c1e344024cc7b645f9fbeaab64083cc2d3365 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Thu, 17 Feb 2022 16:22:40 +0800
Subject: [PATCH 08/22] =?UTF-8?q?=E6=9B=B4=E6=96=B0(=E7=89=88=E6=9C=AC?=
=?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=86=85=E5=AE=B9=E5=A2=9E=E5=8A=A0=E6=96=87?=
=?UTF-8?q?=E4=BB=B6=E5=A4=A7=E5=B0=8F)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
android/app/build.gradle | 7 +++----
lib/me/service/me_service_impl.dart | 9 +++++++--
2 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 2af7036..159c81c 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -56,8 +56,7 @@ android {
}
defaultConfig {
- // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
- applicationId "com.smaboy.f_wanandroid"
+ // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html)
if(isDebug == 'debug'){
applicationId "com.smaboy.f_wanandroid.debug"
}else{
@@ -67,7 +66,7 @@ android {
targetSdkVersion 31
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
- // multiDexEnabled true
+ multiDexEnabled true
}
sourceSets {
@@ -112,5 +111,5 @@ flutter {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
- // implementation group: 'androidx.multidex', name: 'multidex', version: '2.0.1'
+ implementation group: 'androidx.multidex', name: 'multidex', version: '2.0.1'
}
diff --git a/lib/me/service/me_service_impl.dart b/lib/me/service/me_service_impl.dart
index ea50a36..501ad80 100644
--- a/lib/me/service/me_service_impl.dart
+++ b/lib/me/service/me_service_impl.dart
@@ -49,8 +49,13 @@ class MeServiceImpl extends MeService {
int originBuildNo =
int.tryParse(appCheckEntity?.data?.buildVersionNo ?? '') ?? 0;
// 设置弹窗提示内容
- _updateContent =
- "更新内容:\n${appCheckEntity?.data?.buildUpdateDescription ?? ''}\n\n版本: ${packageInfo.version}->${appCheckEntity?.data?.buildVersion}";
+ String updateContent =
+ "更新内容:\n${appCheckEntity?.data?.buildUpdateDescription ?? ''}\n\n";
+ String versionContent =
+ "版本: ${packageInfo.version} → ${appCheckEntity?.data?.buildVersion}\n";
+ String fileSize =
+ "大小: ${((int.tryParse(appCheckEntity?.data?.buildFileSize ?? "") ?? 0) / (1024 * 1024)).toStringAsFixed(1)}M";
+ _updateContent = "$updateContent$versionContent$fileSize";
// 更新逻辑(版本名称不同且远程版本编号大于本地版本编号)
if (packageInfo.version != appCheckEntity?.data?.buildVersion &&
--
Gitee
From 846b05c69eb964a3797d6924fb9ff1c21eca2c80 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?= <18550019225@163.com>
Date: Thu, 17 Feb 2022 16:42:34 +0800
Subject: [PATCH 09/22] =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8D=87=E7=BA=A7?=
=?UTF-8?q?=E5=88=B01.0.7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
auto_build_push.sh | 8 +++-----
pubspec.yaml | 2 +-
2 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/auto_build_push.sh b/auto_build_push.sh
index 832108f..da6e3b5 100644
--- a/auto_build_push.sh
+++ b/auto_build_push.sh
@@ -18,11 +18,9 @@ filename="app-debug.apk"
#更新日志
buildUpdateDescription="""
-1. 适配flutter空安全;
-2. 优化网络框架;
-3. 基类组件搭建;
-4. 添加版本检测更新功能;
-5. 优化代码;
+1. 修改android打包策略;
+2. 所有页面改造完毕;
+3. 代码优化
"""
helper() {
echo "请输入参数"
diff --git a/pubspec.yaml b/pubspec.yaml
index 0290b2a..dc3819b 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# version统一版本名称和版本号,'+'前面的为版本名称,后面的为版本号
-version: 1.0.5+6
+version: 1.0.7+8
environment:
sdk: ">=2.12.0 <3.0.0"
--
Gitee
From 830ede98f3a8d77928ed68859895e7c4e066ddc5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Thu, 17 Feb 2022 17:07:42 +0800
Subject: [PATCH 10/22] =?UTF-8?q?=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
auto_build_push.sh | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/auto_build_push.sh b/auto_build_push.sh
index da6e3b5..73e6561 100644
--- a/auto_build_push.sh
+++ b/auto_build_push.sh
@@ -18,9 +18,9 @@ filename="app-debug.apk"
#更新日志
buildUpdateDescription="""
-1. 修改android打包策略;
-2. 所有页面改造完毕;
-3. 代码优化
+1. 修改android打包策略.
+2. 所有页面改造完毕.
+3. 代码优化.
"""
helper() {
echo "请输入参数"
--
Gitee
From 4b284d6060fe86146970dd3aa8b9cd3b5fe6bb1f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Thu, 17 Feb 2022 18:08:23 +0800
Subject: [PATCH 11/22] =?UTF-8?q?=E6=9B=B4=E6=96=B0(=E4=BF=AE=E5=A4=8D?=
=?UTF-8?q?=E4=BD=93=E7=B3=BB=E8=AF=A6=E6=83=85=E9=A1=B5=E4=B8=8D=E8=83=BD?=
=?UTF-8?q?=E5=88=87=E6=8D=A2=E5=86=85=E5=AE=B9)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lib/system/SystemItemDetailsPage.dart | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/system/SystemItemDetailsPage.dart b/lib/system/SystemItemDetailsPage.dart
index 6709b75..c02eb17 100644
--- a/lib/system/SystemItemDetailsPage.dart
+++ b/lib/system/SystemItemDetailsPage.dart
@@ -133,7 +133,7 @@ class _SystemItemDetailsPageState extends State
///获取当前tab对应的数据
SystemListByCidEntity? systemListByCidEntity =
await HttpUtils.getInstance().get2(
- API.getSystemListByCid(curPageNum, widget.tabList![curPosition].id ?? 0), isNeedCache: true);
+ API.getSystemListByCid(curPageNum, widget.tabList![curPosition].id ?? 0), isNeedCache: false);
LogUtils.d("当前选中的position==$curPosition");
//设置数据
--
Gitee
From ededa4f1452f6edc22a3da3fa2129fd4dd2366ff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?= <18550019225@163.com>
Date: Thu, 17 Feb 2022 18:12:32 +0800
Subject: [PATCH 12/22] =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8D=87=E7=BA=A7?=
=?UTF-8?q?=E5=88=B01.0.8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
auto_build_push.sh | 5 ++---
pubspec.yaml | 2 +-
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/auto_build_push.sh b/auto_build_push.sh
index 73e6561..a64adbe 100644
--- a/auto_build_push.sh
+++ b/auto_build_push.sh
@@ -18,9 +18,8 @@ filename="app-debug.apk"
#更新日志
buildUpdateDescription="""
-1. 修改android打包策略.
-2. 所有页面改造完毕.
-3. 代码优化.
+1. 修复体系详情页面tab页面内容一致问题.
+2. 代码优化.
"""
helper() {
echo "请输入参数"
diff --git a/pubspec.yaml b/pubspec.yaml
index dc3819b..782abfd 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# version统一版本名称和版本号,'+'前面的为版本名称,后面的为版本号
-version: 1.0.7+8
+version: 1.0.8+9
environment:
sdk: ">=2.12.0 <3.0.0"
--
Gitee
From 185bae2142cae71a19db4b0df7ee16a395ee7b22 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?= <18550019225@163.com>
Date: Mon, 21 Feb 2022 17:05:00 +0800
Subject: [PATCH 13/22] =?UTF-8?q?=E6=9B=B4=E6=96=B0(=E4=BC=98=E5=8C=96?=
=?UTF-8?q?=E8=84=9A=E6=9C=AC)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
auto_build_push.sh | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/auto_build_push.sh b/auto_build_push.sh
index a64adbe..0fbbd8c 100644
--- a/auto_build_push.sh
+++ b/auto_build_push.sh
@@ -21,6 +21,7 @@ buildUpdateDescription="""
1. 修复体系详情页面tab页面内容一致问题.
2. 代码优化.
"""
+
helper() {
echo "请输入参数"
echo "-d 构建debug版本"
@@ -42,8 +43,11 @@ uploadFir() {
echo "切换到输出目录$outputs"
cd $outputs
# 上传到APP管理平台
- result=$(curl -X POST --url https://www.pgyer.com/apiv2/app/upload -F "file=@$filename" -F "_api_key=$_api_key" -F "buildUpdateDescription=$buildUpdateDescription")
- echo "上传结果,result: $result"
+ curl -X POST --url https://www.pgyer.com/apiv2/app/upload -F "file=@$filename" -F "_api_key=$_api_key" -F "buildUpdateDescription=$buildUpdateDescription" > result.json
+ echo "返回的json数据如下:"
+ cat result.json | jq .
+ echo "二维码下载地址如下:"
+ cat result.json | jq '.data.buildQRCodeURL'
exit
}
@@ -93,8 +97,8 @@ done
#执行顺序
clearTemp
-echo "构建模式:$buildType"
-echo "是否上传:$needUpload"
+echo "构建模式:$buildType"
+echo "是否上传:$needUpload"
flutter build apk --$buildType
if [ $? -eq 0 ]; then
echo "构建成功"
--
Gitee
From 2eb3261d6c37c90cdb60a57caf62759deb6adf23 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Mon, 28 Feb 2022 14:24:37 +0800
Subject: [PATCH 14/22] =?UTF-8?q?=E6=9B=B4=E6=96=B0(=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E8=BD=AE=E6=92=AD=E7=BB=84=E4=BB=B6=EF=BC=8C=E9=A6=96=E9=A1=B5?=
=?UTF-8?q?=E5=B9=BF=E5=91=8A=E5=9B=BE=E5=AE=9E=E7=8E=B0=E8=87=AA=E5=8A=A8?=
=?UTF-8?q?=E8=BD=AE=E6=92=AD=E5=8A=9F=E8=83=BD)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lib/common/widget/banner_view.dart | 168 +++++++++++++++++++++++++++++
lib/home/home_page.dart | 74 +++++++------
2 files changed, 204 insertions(+), 38 deletions(-)
create mode 100644 lib/common/widget/banner_view.dart
diff --git a/lib/common/widget/banner_view.dart b/lib/common/widget/banner_view.dart
new file mode 100644
index 0000000..06a5281
--- /dev/null
+++ b/lib/common/widget/banner_view.dart
@@ -0,0 +1,168 @@
+import 'dart:async';
+
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/widgets.dart';
+import 'package:flutterapp/common/util/log_utils.dart';
+import 'package:smooth_page_indicator/smooth_page_indicator.dart';
+
+/// 轮播组件
+class BannerView extends StatefulWidget {
+ /// 数据集合
+ final List data;
+
+ /// 外界传入页面组件
+ final Widget Function(T t) child;
+
+ /// 底部指示器的样式
+ final WormEffect effect;
+
+ /// 指示器在组件中的位置
+ final AlignmentGeometry indicatorAlignment;
+
+ /// 指示器的外边距
+ final EdgeInsets indicatorMargin;
+
+ /// 是否开启自动滑动
+ final bool autoScroll;
+
+ /// 自动滑动时间
+ final Duration autoTime;
+
+ /// 轮播组件
+ const BannerView({
+ Key? key,
+ required this.data,
+ required this.child,
+ this.effect = const WormEffect(),
+ this.indicatorAlignment = Alignment.bottomCenter,
+ this.autoScroll = true,
+ this.autoTime = const Duration(seconds: 3),
+ this.indicatorMargin = const EdgeInsets.all(0),
+ }) : super(key: key);
+
+ @override
+ _BannerViewState createState() => _BannerViewState();
+}
+
+class _BannerViewState extends State> {
+ /// 页面控制器
+ late PageController _pageController;
+
+ /// 时间控制器
+ Timer? _timer;
+
+ /// 当前页面
+ int _currentPage = 0;
+
+ /// 实际需要的数据源
+ List children = [];
+
+ @override
+ void initState() {
+ super.initState();
+
+ _pageController = PageController();
+ _pageController.addListener(() {});
+ }
+
+ @override
+ void didUpdateWidget(covariant BannerView oldWidget) {
+ super.didUpdateWidget(oldWidget);
+
+ if (widget.data.length > 0) startScroll();
+ }
+
+ /// 开始滑动
+ void startScroll() {
+ if (!widget.autoScroll) return;
+ if (_timer?.isActive ?? false) return;
+ if (widget.data.length <= 1) return;
+ _createTimer();
+ }
+
+ /// 停止滑动
+ void stopScroll() {
+ if (!widget.autoScroll) return;
+ _cancelTimer();
+ }
+
+ /// 创建定时器
+ void _createTimer() {
+ if (widget.autoScroll) {
+ _cancelTimer();
+ _timer = Timer.periodic(widget.autoTime, (timer) {
+ //滑动到下一个页面
+ _scrollNextPage();
+ });
+ }
+ }
+
+ /// 取消定时器
+ void _cancelTimer() {
+ _timer?.cancel();
+ }
+
+ /// 滑动到下一个页面
+ void _scrollNextPage() {
+ _currentPage++;
+ int next = _currentPage % widget.data.length;
+ _pageController.animateToPage(
+ next,
+ duration: Duration(milliseconds: 600),
+ curve: Curves.ease,
+ );
+ }
+
+ @override
+ void dispose() {
+ super.dispose();
+ _pageController.dispose();
+ _timer?.cancel();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return widget.data.length == 0
+ ? Container()
+ : Container(
+ padding: EdgeInsets.symmetric(vertical: 5.0),
+ child: Listener(
+ onPointerDown: (tapDown) {
+ LogUtils.d('手指按下,停止滑动');
+ //手指按下
+ stopScroll();
+ },
+ onPointerUp: (tapUP) {
+ LogUtils.d('手指抬起,开始滑动');
+ //手指抬起
+ startScroll();
+ },
+ child: Stack(
+ alignment: widget.indicatorAlignment,
+ children: [
+ //viewpage
+ PageView.builder(
+ itemCount: widget.data.length,
+ controller: _pageController,
+ itemBuilder: (BuildContext context, int index) {
+ return widget.child.call(widget.data[index]);
+ },
+ ),
+ //viewpage指示器
+ Padding(
+ padding: widget.indicatorMargin,
+ child: SmoothPageIndicator(
+ controller: _pageController,
+ count: widget.data.length,
+ axisDirection: Axis.horizontal,
+ effect: widget.effect,
+ ),
+ ),
+ ],
+ ),
+ ),
+ height: 180.0,
+ );
+ }
+}
diff --git a/lib/home/home_page.dart b/lib/home/home_page.dart
index 54b6b95..fdc867b 100644
--- a/lib/home/home_page.dart
+++ b/lib/home/home_page.dart
@@ -7,6 +7,7 @@ import 'package:flutterapp/common/base/base_provider.dart';
import 'package:flutterapp/common/constant/api.dart';
import 'package:flutterapp/common/util/router_helpe_utils.dart';
import 'package:flutterapp/common/page/webview_page.dart';
+import 'package:flutterapp/common/widget/banner_view.dart';
import 'package:flutterapp/common/widget/favorite_button_widget.dart';
import 'package:flutterapp/home/my_drawer.dart';
import 'package:flutterapp/home/entity/article_data_bean.dart';
@@ -14,6 +15,7 @@ import 'package:flutterapp/home/entity/home_article_top_entity.dart';
import 'package:flutterapp/http/http_utils.dart';
import 'package:provider/provider.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
+import 'package:smooth_page_indicator/smooth_page_indicator.dart';
import 'entity/home_article_list_entity.dart';
import 'entity/home_banner_entity.dart';
@@ -47,6 +49,7 @@ class HomePageState extends State with AutomaticKeepAliveClientMixin {
return BasePage(
title: widget.title,
drawer: MyDrawer(),
+ backgroundColor: Colors.grey[300],
child: Container(
color: Colors.grey[100],
child: SmartRefresher(
@@ -66,7 +69,7 @@ class HomePageState extends State with AutomaticKeepAliveClientMixin {
itemCount: model._articleList.length + 1,
itemBuilder: (BuildContext context, int index) {
return index == 0
- ? _BannerView()
+ ? _HomeBannerView()
: getListViewItemWidget(
model._articleList[index - 1]);
}),
@@ -365,51 +368,46 @@ class HomePageState extends State with AutomaticKeepAliveClientMixin {
}
/// 轮播图组件
-class _BannerView extends StatelessWidget {
- const _BannerView({Key? key}) : super(key: key);
+class _HomeBannerView extends StatelessWidget {
+ const _HomeBannerView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
// 获取banner数据列表
List? data =
context.watch()._homeBannerEntity?.data;
- return Container(
- padding: EdgeInsets.symmetric(vertical: 5.0),
- child: Listener(
- onPointerDown: (tapDown) {
- //手指按下
- },
- onPointerUp: (tapUP) {
- //手指抬起
- },
- child: PageView.builder(
- itemCount: data?.length ?? 0,
- itemBuilder: (BuildContext context, int index) {
- return InkWell(
- onTap: () {
- RouteHelpUtils.push(
- context,
- WebViewPage(
- url: data![index]?.url,
- title: data[index]?.title,
- des: data[index]?.desc,
- ));
- },
- child: Container(
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular((10.0)), // 圆角度
- image: DecorationImage(
- image: NetworkImage(data![index]?.imagePath ?? ''),
- fit: BoxFit.fill,
- ),
+ // pageview控制器
+ return BannerView(
+ data: data ?? [],
+ indicatorMargin: EdgeInsets.only(bottom: 16),
+ effect: WormEffect(
+ dotWidth: 8,
+ dotHeight: 8,
+ ),
+ autoTime: Duration(seconds: 5),
+ child: (value) {
+ return InkWell(
+ onTap: () {
+ RouteHelpUtils.push(
+ context,
+ WebViewPage(
+ url: value?.url,
+ title: value?.title,
+ des: value?.desc,
+ ));
+ },
+ child: Container(
+ margin: EdgeInsets.all(8),
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.circular((10.0)), // 圆角度
+ image: DecorationImage(
+ image: NetworkImage(value?.imagePath ?? ''),
+ fit: BoxFit.fill,
),
),
- );
- },
- ),
- ),
- height: 180.0,
- );
+ ),
+ );
+ });
}
}
--
Gitee
From a3f3445373b07513e9240286085104cc2578b895 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Mon, 28 Feb 2022 14:25:00 +0800
Subject: [PATCH 15/22] =?UTF-8?q?=E6=9B=B4=E6=96=B0(=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=8C=87=E7=A4=BA=E5=99=A8=E6=8F=92=E4=BB=B6?=
=?UTF-8?q?)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pubspec.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/pubspec.yaml b/pubspec.yaml
index 782abfd..b407585 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -83,6 +83,9 @@ dependencies:
# 获取包信息插件
package_info: ^2.0.2
+ # 页面指示器
+ smooth_page_indicator: ^1.0.0+2
+
dev_dependencies:
--
Gitee
From ecbb24216f3307516bdf54bfc5f3a89e3f0ba12e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Mon, 28 Feb 2022 14:35:03 +0800
Subject: [PATCH 16/22] =?UTF-8?q?=E9=A6=96=E9=A1=B5UI=E8=B0=83=E6=95=B4?=
=?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lib/home/home_page.dart | 25 +++++++++----------------
1 file changed, 9 insertions(+), 16 deletions(-)
diff --git a/lib/home/home_page.dart b/lib/home/home_page.dart
index fdc867b..7f6aa1b 100644
--- a/lib/home/home_page.dart
+++ b/lib/home/home_page.dart
@@ -8,6 +8,7 @@ import 'package:flutterapp/common/constant/api.dart';
import 'package:flutterapp/common/util/router_helpe_utils.dart';
import 'package:flutterapp/common/page/webview_page.dart';
import 'package:flutterapp/common/widget/banner_view.dart';
+import 'package:flutterapp/common/widget/easy_ink_well.dart';
import 'package:flutterapp/common/widget/favorite_button_widget.dart';
import 'package:flutterapp/home/my_drawer.dart';
import 'package:flutterapp/home/entity/article_data_bean.dart';
@@ -49,7 +50,7 @@ class HomePageState extends State with AutomaticKeepAliveClientMixin {
return BasePage(
title: widget.title,
drawer: MyDrawer(),
- backgroundColor: Colors.grey[300],
+ backgroundColor: Colors.grey,
child: Container(
color: Colors.grey[100],
child: SmartRefresher(
@@ -122,20 +123,12 @@ class HomePageState extends State with AutomaticKeepAliveClientMixin {
}
Widget getListViewItemWidget(ArticleDataBean homeArticleDataBean) {
- return GestureDetector(
+ return EasyInkWell(
+ margin: EdgeInsets.symmetric(horizontal: 12, vertical: 4),
+ color: Colors.white,
+ radius: 8,
child: Container(
- padding: EdgeInsets.all(10.0),
- margin: EdgeInsets.symmetric(vertical: 5.0, horizontal: 10.0),
- decoration: BoxDecoration(
- borderRadius: BorderRadius.all(Radius.circular(5.0)),
- boxShadow: [
- //阴影
- BoxShadow(
- color: Colors.grey[300]!,
- offset: Offset(2.0, 2.0),
- blurRadius: 2.0)
- ],
- color: Colors.white),
+ padding: EdgeInsets.all(4),
child: Row(
children: [
Center(
@@ -379,7 +372,7 @@ class _HomeBannerView extends StatelessWidget {
// pageview控制器
return BannerView(
data: data ?? [],
- indicatorMargin: EdgeInsets.only(bottom: 16),
+ indicatorMargin: EdgeInsets.only(bottom: 12),
effect: WormEffect(
dotWidth: 8,
dotHeight: 8,
@@ -397,7 +390,7 @@ class _HomeBannerView extends StatelessWidget {
));
},
child: Container(
- margin: EdgeInsets.all(8),
+ margin: EdgeInsets.symmetric(horizontal: 12, vertical: 4),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular((10.0)), // 圆角度
image: DecorationImage(
--
Gitee
From ffc53d911dbcbad897d769faf1a799b5664c8f3a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Mon, 28 Feb 2022 15:02:27 +0800
Subject: [PATCH 17/22] =?UTF-8?q?=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lib/common/widget/banner_view.dart | 10 ++++++----
lib/home/home_page.dart | 4 ----
2 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/lib/common/widget/banner_view.dart b/lib/common/widget/banner_view.dart
index 06a5281..64aa687 100644
--- a/lib/common/widget/banner_view.dart
+++ b/lib/common/widget/banner_view.dart
@@ -1,6 +1,5 @@
import 'dart:async';
-import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutterapp/common/util/log_utils.dart';
@@ -14,8 +13,8 @@ class BannerView extends StatefulWidget {
/// 外界传入页面组件
final Widget Function(T t) child;
- /// 底部指示器的样式
- final WormEffect effect;
+ /// 底部指示器的样式BasicIndicatorEffect
+ final dynamic effect;
/// 指示器在组件中的位置
final AlignmentGeometry indicatorAlignment;
@@ -34,7 +33,10 @@ class BannerView extends StatefulWidget {
Key? key,
required this.data,
required this.child,
- this.effect = const WormEffect(),
+ this.effect = const WormEffect(
+ dotWidth: 8,
+ dotHeight: 8,
+ ),
this.indicatorAlignment = Alignment.bottomCenter,
this.autoScroll = true,
this.autoTime = const Duration(seconds: 3),
diff --git a/lib/home/home_page.dart b/lib/home/home_page.dart
index 7f6aa1b..b453f29 100644
--- a/lib/home/home_page.dart
+++ b/lib/home/home_page.dart
@@ -373,10 +373,6 @@ class _HomeBannerView extends StatelessWidget {
return BannerView(
data: data ?? [],
indicatorMargin: EdgeInsets.only(bottom: 12),
- effect: WormEffect(
- dotWidth: 8,
- dotHeight: 8,
- ),
autoTime: Duration(seconds: 5),
child: (value) {
return InkWell(
--
Gitee
From bfff0044b545a06ba90918b9bbd0034fce2f71ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Mon, 28 Feb 2022 17:40:08 +0800
Subject: [PATCH 18/22] =?UTF-8?q?ui=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lib/home/home_page.dart | 4 +--
lib/system/SystemItemDetailsPage.dart | 46 +++++++++------------------
2 files changed, 17 insertions(+), 33 deletions(-)
diff --git a/lib/home/home_page.dart b/lib/home/home_page.dart
index b453f29..aa6b6ef 100644
--- a/lib/home/home_page.dart
+++ b/lib/home/home_page.dart
@@ -124,11 +124,11 @@ class HomePageState extends State with AutomaticKeepAliveClientMixin {
Widget getListViewItemWidget(ArticleDataBean homeArticleDataBean) {
return EasyInkWell(
- margin: EdgeInsets.symmetric(horizontal: 12, vertical: 4),
+ margin: EdgeInsets.symmetric(horizontal: 8, vertical: 4),
color: Colors.white,
radius: 8,
child: Container(
- padding: EdgeInsets.all(4),
+ padding: EdgeInsets.all(8),
child: Row(
children: [
Center(
diff --git a/lib/system/SystemItemDetailsPage.dart b/lib/system/SystemItemDetailsPage.dart
index c02eb17..fbd475a 100644
--- a/lib/system/SystemItemDetailsPage.dart
+++ b/lib/system/SystemItemDetailsPage.dart
@@ -1,9 +1,11 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
+import 'package:flutterapp/common/base/base_page.dart';
import 'package:flutterapp/common/constant/API.dart';
import 'package:flutterapp/common/util/router_helpe_utils.dart';
import 'package:flutterapp/common/util/log_utils.dart';
import 'package:flutterapp/common/page/webview_page.dart';
+import 'package:flutterapp/common/widget/easy_ink_well.dart';
import 'package:flutterapp/common/widget/favorite_button_widget.dart';
import 'package:flutterapp/home/entity/article_data_bean.dart';
import 'package:flutterapp/http/http_utils.dart';
@@ -76,38 +78,27 @@ class _SystemItemDetailsPageState extends State
@override
Widget build(BuildContext context) {
- return Scaffold(
+ return BasePage(
appBar: AppBar(
-// actions: [
-// IconButton(icon: Icon(Icons.search),onPressed: (){
-// Toast.show("搜索",context,duration: Toast.LENGTH_LONG,gravity: Toast.BOTTOM);
-// },)
-// ],
centerTitle: true,
title: Text(widget.title ?? ''),
bottom: TabBar(
controller: tabController,
isScrollable: true,
tabs: myTabs,
- // 线条宽度
- // TabBarIndicatorSize.label 根据内容调整宽度
- // TabBarIndicatorSize.tab 根据(mainWidth/itemCount)调整宽度
indicatorSize: TabBarIndicatorSize.label,
labelColor: Colors.white,
labelStyle: new TextStyle(fontSize: 16.0),
unselectedLabelColor: Colors.black,
unselectedLabelStyle: new TextStyle(fontSize: 12.0),
- // 线条边距
-// indicatorPadding: EdgeInsets.only(left: 6, right: 6),
- // 点击item
onTap: (int index) {
- LogUtils.d("system-tabbar-ontap-index-$index");
curPosition = index;
getListDataByCid();
},
),
),
- body: Container(
+ backgroundColor: Colors.grey,
+ child: Container(
color: Colors.grey[100],
child: PageView.builder(
controller: pageController,
@@ -131,16 +122,17 @@ class _SystemItemDetailsPageState extends State
///通过页码和cid获取指定的知识体系数据
void getListDataByCid() async {
///获取当前tab对应的数据
- SystemListByCidEntity? systemListByCidEntity =
-await HttpUtils.getInstance().get2(
- API.getSystemListByCid(curPageNum, widget.tabList![curPosition].id ?? 0), isNeedCache: false);
+ SystemListByCidEntity? systemListByCidEntity = await HttpUtils.getInstance()
+ .get2(
+ API.getSystemListByCid(
+ curPageNum, widget.tabList![curPosition].id ?? 0),
+ isNeedCache: false);
LogUtils.d("当前选中的position==$curPosition");
//设置数据
setState(() {
contentList = systemListByCidEntity?.data?.datas;
});
-
}
///获取内容组件
@@ -149,7 +141,10 @@ await HttpUtils.getInstance().get2(
itemCount: contentList?.length ?? 0,
addAutomaticKeepAlives: true,
itemBuilder: (buildContext, index) {
- return GestureDetector(
+ return EasyInkWell(
+ margin: EdgeInsets.symmetric(vertical: 4.0, horizontal: 8.0),
+ color: Colors.white,
+ radius: 8,
onTap: () {
RouteHelpUtils.push(
context,
@@ -160,18 +155,7 @@ await HttpUtils.getInstance().get2(
));
},
child: Container(
- padding: EdgeInsets.all(10.0),
- margin: EdgeInsets.symmetric(vertical: 5.0, horizontal: 10.0),
- decoration: BoxDecoration(
- borderRadius: BorderRadius.all(Radius.circular(5.0)),
- boxShadow: [
- //阴影
- BoxShadow(
- color: Colors.grey[300]!,
- offset: Offset(2.0, 2.0),
- blurRadius: 2.0)
- ],
- color: Colors.white),
+ padding: EdgeInsets.all(8),
child: Row(
children: [
Center(
--
Gitee
From 1bd27211e30e18cb4d615629105f9d1a22c00138 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Tue, 1 Mar 2022 09:37:50 +0800
Subject: [PATCH 19/22] =?UTF-8?q?=E6=9B=B4=E6=96=B0-=E5=8E=BB=E9=99=A4?=
=?UTF-8?q?=E6=97=A0=E7=94=A8=E5=BC=95=E7=94=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lib/home/home_page.dart | 3 ---
1 file changed, 3 deletions(-)
diff --git a/lib/home/home_page.dart b/lib/home/home_page.dart
index aa6b6ef..7147719 100644
--- a/lib/home/home_page.dart
+++ b/lib/home/home_page.dart
@@ -1,5 +1,4 @@
import 'package:flutter/cupertino.dart';
-import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutterapp/common/base/base_mode.dart';
import 'package:flutterapp/common/base/base_page.dart';
@@ -16,8 +15,6 @@ import 'package:flutterapp/home/entity/home_article_top_entity.dart';
import 'package:flutterapp/http/http_utils.dart';
import 'package:provider/provider.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
-import 'package:smooth_page_indicator/smooth_page_indicator.dart';
-
import 'entity/home_article_list_entity.dart';
import 'entity/home_banner_entity.dart';
--
Gitee
From 7adcb6e0abd92d89b4b50dfc73b5dbc2bf9f2a63 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Tue, 1 Mar 2022 16:02:55 +0800
Subject: [PATCH 20/22] =?UTF-8?q?=E6=9B=B4=E6=96=B0(=E7=BD=91=E7=BB=9C?=
=?UTF-8?q?=E8=AF=B7=E6=B1=82=E4=BC=98=E5=8C=96)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
android/local.properties | 4 +-
lib/common/widget/favorite_button_widget.dart | 17 ++--
lib/home/home_page.dart | 8 +-
lib/home/my_drawer.dart | 9 +-
lib/http/def_json_factory.dart | 8 ++
lib/http/http_utils.dart | 89 +------------------
lib/item/ItemPage.dart | 19 ++--
lib/item/service/item_service_impl.dart | 25 ++----
lib/me/me_page.dart | 6 +-
lib/me/page/login_page.dart | 4 +-
lib/me/page/my_favorite_page.dart | 2 +-
lib/me/service/me_service_impl.dart | 2 +-
lib/system/SystemItemDetailsPage.dart | 2 +-
lib/system/SystemPage.dart | 2 +-
pubspec.lock | 7 ++
15 files changed, 59 insertions(+), 145 deletions(-)
diff --git a/android/local.properties b/android/local.properties
index 9ba4cdf..05875ad 100644
--- a/android/local.properties
+++ b/android/local.properties
@@ -1,5 +1,5 @@
sdk.dir=C:\\Users\\admin\\AppData\\Local\\Android\\Sdk
flutter.sdk=D:\\Smaboy\\source\\flutter
flutter.buildMode=debug
-flutter.versionName=1.0.5
-flutter.versionCode=6
\ No newline at end of file
+flutter.versionName=1.0.8
+flutter.versionCode=9
\ No newline at end of file
diff --git a/lib/common/widget/favorite_button_widget.dart b/lib/common/widget/favorite_button_widget.dart
index cc44fa4..3f27eac 100644
--- a/lib/common/widget/favorite_button_widget.dart
+++ b/lib/common/widget/favorite_button_widget.dart
@@ -51,8 +51,8 @@ class _FavoriteButtonWidgetState extends State {
//点击收藏的事件
if (curIsFavorite ?? false) {
//将此收藏移除
- HttpUtils.getInstance().post(API.getUnCollectOriginId(widget.id ?? 0),
- onSuccess: (responses) {
+ HttpUtils.getInstance().post(
+ API.getUnCollectOriginId(widget.id ?? 0), onResult: (responses) {
Map map = jsonDecode(responses.toString());
if (0 == map['errorCode']) {
shortToast("取消收藏成功");
@@ -63,14 +63,13 @@ class _FavoriteButtonWidgetState extends State {
} else {
shortToast(map['errorMsg'] ?? "取消收藏失败");
}
- }, onFailure: (msg) {
- shortToast(msg);
+ }, onFailure: (error, stack) {
+ shortToast(error.toString());
});
} else {
//添加收藏
- HttpUtils.getInstance()
- .post(API.getCollectArticleById(widget.id ?? 0),
- onSuccess: (responses) {
+ HttpUtils.getInstance().post(
+ API.getCollectArticleById(widget.id ?? 0), onResult: (responses) {
Map map = jsonDecode(responses.toString());
if (0 == map['errorCode']) {
shortToast("收藏成功");
@@ -83,8 +82,8 @@ class _FavoriteButtonWidgetState extends State {
} else {
shortToast(map['errorMsg'] ?? "收藏失败");
}
- }, onFailure: (msg) {
- shortToast(msg);
+ }, onFailure: (error, stack) {
+ shortToast(error.toString());
});
}
},
diff --git a/lib/home/home_page.dart b/lib/home/home_page.dart
index 7147719..f283bca 100644
--- a/lib/home/home_page.dart
+++ b/lib/home/home_page.dart
@@ -429,7 +429,7 @@ class HomeModel extends BaseModel {
/// 从网络获取轮播图数据
Future initBannerData() {
return HttpUtils.getInstance()
- .get2(API.homeBanner, isNeedCache: true)
+ .get(API.homeBanner, isNeedCache: true)
.then((value) {
if (value != null) {
//设置数据
@@ -448,14 +448,14 @@ class HomeModel extends BaseModel {
///获取置顶文章列表数据
HomeArticleTopEntity? homeArticleTopEntity =
- await HttpUtils.getInstance().get2(
+ await HttpUtils.getInstance().get(
API.homeArticleTop,
isNeedCache: true,
);
///获取文章列表数据
HomeArticleListEntity? homeArticleListEntity =
- await HttpUtils.getInstance().get2(
+ await HttpUtils.getInstance().get(
API.getHomeArticleList(curPageNum),
isNeedCache: true,
);
@@ -479,7 +479,7 @@ class HomeModel extends BaseModel {
void loadMoreData() {
///获取文章列表数据
curPageNum++;
- HttpUtils.getInstance().get2(
+ HttpUtils.getInstance().get(
API.getHomeArticleList(curPageNum), onSuccess: (homeArticleListEntity) {
if (homeArticleListEntity.data?.datas == null ||
homeArticleListEntity.data!.datas!.isEmpty) {
diff --git a/lib/home/my_drawer.dart b/lib/home/my_drawer.dart
index 7ef3f6d..5d77e67 100644
--- a/lib/home/my_drawer.dart
+++ b/lib/home/my_drawer.dart
@@ -64,7 +64,8 @@ class _MyDrawerState extends State {
isLogin = await SPUtils.getInstance().getIsLogin() ?? false;
userName = await SPUtils.getInstance().getUserName() ?? '';
password = await SPUtils.getInstance().getPassword() ?? '';
- rememberPassword = await SPUtils.getInstance().getRememberPassword() ?? false;
+ rememberPassword =
+ await SPUtils.getInstance().getRememberPassword() ?? false;
setState(() {});
}
@@ -276,7 +277,7 @@ class _MyDrawerState extends State {
/// 退出登录操作
void logout() {
- HttpUtils.getInstance().get(API.logout, onSuccess: (responses) {
+ HttpUtils.getInstance().get(API.logout, onResult: (responses) {
Map logoutBean = json.decode(responses.toString());
if (logoutBean['errorCode'] == 0) {
//退出成功
@@ -296,8 +297,8 @@ class _MyDrawerState extends State {
//退出失败
shortToast(logoutBean['errorMsg'] ?? "退出失败");
}
- }, onFailure: (msg) {
- shortToast(msg);
+ }, onFailure: (error, stack) {
+ shortToast(error.toString());
});
}
diff --git a/lib/http/def_json_factory.dart b/lib/http/def_json_factory.dart
index fe1d764..743a387 100644
--- a/lib/http/def_json_factory.dart
+++ b/lib/http/def_json_factory.dart
@@ -3,6 +3,8 @@ import 'package:flutterapp/common/util/log_utils.dart';
import 'package:flutterapp/home/entity/home_article_list_entity.dart';
import 'package:flutterapp/home/entity/home_article_top_entity.dart';
import 'package:flutterapp/home/entity/home_banner_entity.dart';
+import 'package:flutterapp/item/entity/item_list_entity.dart';
+import 'package:flutterapp/item/entity/item_tree_entity.dart';
import 'package:flutterapp/me/entity/collect_article_list_entity.dart';
import 'package:flutterapp/me/entity/login_entity.dart';
import 'package:flutterapp/me/entity/register_entity.dart';
@@ -48,6 +50,8 @@ class DefaultJsonFactory implements BaseJsonFactory {
T fromJson(Map data) {
Type type = typeOf();
switch (type) {
+ case dynamic:
+ return data as T;
case HomeBannerEntity:
return HomeBannerEntity.fromJson(data) as T;
case LoginEntity:
@@ -66,6 +70,10 @@ class DefaultJsonFactory implements BaseJsonFactory {
return CollectArticleListEntity.fromJson(data) as T;
case AppCheckEntity:
return AppCheckEntity.fromJson(data) as T;
+ case ItemTreeEntity:
+ return ItemTreeEntity.fromJson(data) as T;
+ case ItemListEntity:
+ return ItemListEntity.fromJson(data) as T;
default:
throw '没有这样的类型:$type';
}
diff --git a/lib/http/http_utils.dart b/lib/http/http_utils.dart
index 5b10be1..67d5d97 100644
--- a/lib/http/http_utils.dart
+++ b/lib/http/http_utils.dart
@@ -84,93 +84,8 @@ class HttpUtils {
}
}
- /// get 请求方法
- Future get(String path,
- {Map? queryParameters,
- Options? options,
- CancelToken? cancelToken,
- bool isNeedCache = false,
- void Function(int, int)? onReceiveProgress,
- void Function(Response)? onSuccess,
- void Function(String)? onFailure}) async {
- late Response response;
- try {
- // 添加缓存配置 MaxAge:设置缓存的时间,MaxStale: 设置过期时常
- // subKey: dio-http-cache 默认使用 url 作为缓存 key ,但当 url 不够用的时候,比如 post 请求分页数据的时候,就需要配合subKey使用。
- // forceRefresh默认为false,开启后先获取后台数据当后台数据获取不到或者网络出现问题,再去本地获取
- var optionTemp = buildCacheOptions(Duration(days: 7),
- maxStale: Duration(days: 10),
- subKey: "subPage",
- options: options,
- forceRefresh: true);
- //开始请求
- response = await _dio.get(path,
- queryParameters: queryParameters,
- options: isNeedCache ? optionTemp : options,
- cancelToken: cancelToken,
- onReceiveProgress: onReceiveProgress);
-
- //将成功的响应抛出
- if (onSuccess != null) {
- onSuccess(response);
- }
- } on DioError catch (e) {
- //将失败的响应抛出
- if (onFailure != null) {
- onFailure(handleError(e));
- }
-
- //打印请求报错信息
- LogUtils.e(e);
- }
-
- return response;
- }
-
- /// post 请求方法
- Future post(String path,
- {dynamic data,
- Map? queryParameters,
- Options? options,
- CancelToken? cancelToken,
- bool isNeedCache = false,
- void Function(int, int)? onSendProgress,
- void Function(int, int)? onReceiveProgress,
- void Function(Response)? onSuccess,
- void Function(String)? onFailure}) async {
- late Response response;
- try {
- // 添加缓存配置 MaxAge:设置缓存的时间,MaxStale: 设置过期时常
- var optionTemp = buildCacheOptions(Duration(days: 7),
- maxStale: Duration(days: 10), subKey: "page=1", options: options);
- //开始请求
-
- response = await _dio.post(path,
- data: data,
- queryParameters: queryParameters,
- options: isNeedCache ? optionTemp : options,
- cancelToken: cancelToken,
- onSendProgress: onSendProgress,
- onReceiveProgress: onReceiveProgress);
-
- //将成功的响应抛出
- if (onSuccess != null) {
- onSuccess(response);
- }
- } on DioError catch (e) {
- //将失败的响应抛出
- if (onFailure != null) {
- onFailure(handleError(e));
- }
-
- //打印请求报错信息
- LogUtils.e(e);
- }
- return response;
- }
-
/// post 请求方法
- Future post2(
+ Future post(
String path, {
dynamic data,
Map? queryParameters,
@@ -201,7 +116,7 @@ class HttpUtils {
}
/// get 请求方法
- Future get2(
+ Future get(
String path, {
dynamic data,
Map? queryParameters,
diff --git a/lib/item/ItemPage.dart b/lib/item/ItemPage.dart
index 41624fd..817d010 100644
--- a/lib/item/ItemPage.dart
+++ b/lib/item/ItemPage.dart
@@ -51,8 +51,6 @@ class _ItemPageState extends State
);
}
-
-
/// 项目页面标题组件子项集合
List getTitleItems(ItemModel model) {
var tabs = [];
@@ -210,13 +208,13 @@ class _ContentWidgetState extends State {
void initData() async {
curPageNum = 1;
- ItemListEntity itemListByCid = await ItemServiceImpl.getInstance()
+ ItemListEntity? itemListByCid = await ItemServiceImpl.getInstance()
.getItemListByCid(curPageNum, widget.id ?? 0);
if (mounted) {
setState(() {
- if (itemListByCid.data != null && itemListByCid.data?.datas != null) {
+ if (itemListByCid?.data != null && itemListByCid?.data?.datas != null) {
contentList.clear();
- contentList.addAll(itemListByCid.data!.datas!);
+ contentList.addAll(itemListByCid!.data!.datas!);
}
});
}
@@ -225,13 +223,12 @@ class _ContentWidgetState extends State {
Future loadMoreData() async {
curPageNum++;
LogUtils.d("加载更多-当前页码为:$curPageNum");
- ItemListEntity itemListByCid = await ItemServiceImpl.getInstance()
+ ItemListEntity? itemListByCid = await ItemServiceImpl.getInstance()
.getItemListByCid(curPageNum, widget.id ?? 0);
if (mounted) {
setState(() {
- if (itemListByCid.data != null &&
- itemListByCid.data!.datas != null &&
- itemListByCid.data!.datas!.length > 0) {
+ if (itemListByCid?.data!.datas != null &&
+ itemListByCid!.data!.datas!.length > 0) {
curLoadMoreStatue = LoadMoreStatue.STATUE_IDEL;
contentList.addAll(itemListByCid.data!.datas!);
} else {
@@ -368,8 +365,8 @@ class ItemModel extends BaseModel {
Future initData() {
return ItemServiceImpl.getInstance().getItemTree().then((value) {
- if (value.data != null && (value.data?.length ?? 0) > 0) {
- this.data = value.data;
+ if (value?.data != null && (value?.data?.length ?? 0) > 0) {
+ this.data = value!.data;
return true;
}
return false;
diff --git a/lib/item/service/item_service_impl.dart b/lib/item/service/item_service_impl.dart
index e7849b5..3ef81ac 100644
--- a/lib/item/service/item_service_impl.dart
+++ b/lib/item/service/item_service_impl.dart
@@ -1,6 +1,3 @@
-import 'dart:convert';
-
-import 'package:dio/dio.dart';
import 'package:flutterapp/common/constant/api.dart';
import 'package:flutterapp/http/http_utils.dart';
import 'package:flutterapp/item/entity/item_list_entity.dart';
@@ -16,24 +13,14 @@ class ItemServiceImpl extends ItemService {
}
@override
- Future getItemListByCid(int pageNum, int cid) async {
- Response responses = await HttpUtils.getInstance().get(
- API.getItemList(pageNum, cid),
- onSuccess: (responses) {},
- onFailure: (msg) {},
- isNeedCache: true);
- ItemListEntity itemListEntity =
- ItemListEntity.fromJson(jsonDecode(responses.toString()));
- return itemListEntity;
+ Future getItemListByCid(int pageNum, int cid) async {
+ return HttpUtils.getInstance()
+ .get(API.getItemList(pageNum, cid), isNeedCache: true);
}
@override
- Future getItemTree() async {
- Response responses = await HttpUtils.getInstance().get(API.itemTree,
- onSuccess: (responses) {}, onFailure: (msg) {}, isNeedCache: true);
-
- ItemTreeEntity itemTreeEntity =
- ItemTreeEntity.fromJson(jsonDecode(responses.toString()));
- return itemTreeEntity;
+ Future getItemTree() {
+ return HttpUtils.getInstance()
+ .get(API.itemTree, isNeedCache: true);
}
}
diff --git a/lib/me/me_page.dart b/lib/me/me_page.dart
index 8ead7b8..dd7c9f3 100644
--- a/lib/me/me_page.dart
+++ b/lib/me/me_page.dart
@@ -261,7 +261,7 @@ class _MePageState extends State with AutomaticKeepAliveClientMixin {
/// 退出登录操作
void logout() {
- HttpUtils.getInstance().get(API.logout, onSuccess: (responses) {
+ HttpUtils.getInstance().get(API.logout, onResult: (responses) {
Map logoutBean = json.decode(responses.toString());
if (logoutBean['errorCode'] == 0) {
//退出成功
@@ -281,8 +281,8 @@ class _MePageState extends State with AutomaticKeepAliveClientMixin {
//退出失败
shortToast(logoutBean['errorMsg'] ?? "退出失败");
}
- }, onFailure: (msg) {
- shortToast(msg);
+ }, onFailure: (error, stack) {
+ shortToast(error.toString());
});
}
diff --git a/lib/me/page/login_page.dart b/lib/me/page/login_page.dart
index 134582c..9a7b751 100644
--- a/lib/me/page/login_page.dart
+++ b/lib/me/page/login_page.dart
@@ -371,7 +371,7 @@ class LoginModel extends BaseModel {
}
//开始登录
showLoading('登录中...');
- HttpUtils.getInstance().post2(
+ HttpUtils.getInstance().post(
API.login,
queryParameters: {
"username": userName,
@@ -420,7 +420,7 @@ class LoginModel extends BaseModel {
//开始注册
showLoading('注册中...');
HttpUtils.getInstance()
- .post2(API.register, queryParameters: {
+ .post(API.register, queryParameters: {
"username": userName,
"password": password,
"repassword": repassword,
diff --git a/lib/me/page/my_favorite_page.dart b/lib/me/page/my_favorite_page.dart
index c2ea6ce..bc5a523 100644
--- a/lib/me/page/my_favorite_page.dart
+++ b/lib/me/page/my_favorite_page.dart
@@ -83,7 +83,7 @@ class _MyFavoritePageState extends State {
}
void initData() {
- HttpUtils.getInstance().get2(
+ HttpUtils.getInstance().get(
API.getCollectArticleList(), onSuccess: (collectArticleListEntity) {
if (collectArticleListEntity.data != null &&
collectArticleListEntity.data!.datas != null) {
diff --git a/lib/me/service/me_service_impl.dart b/lib/me/service/me_service_impl.dart
index 501ad80..d00060c 100644
--- a/lib/me/service/me_service_impl.dart
+++ b/lib/me/service/me_service_impl.dart
@@ -24,7 +24,7 @@ class MeServiceImpl extends MeService {
@override
Future appCheck() {
- return HttpUtils.getInstance().post2(
+ return HttpUtils.getInstance().post(
API.appCheck,
options: Options()
..headers = {
diff --git a/lib/system/SystemItemDetailsPage.dart b/lib/system/SystemItemDetailsPage.dart
index fbd475a..fa2ac93 100644
--- a/lib/system/SystemItemDetailsPage.dart
+++ b/lib/system/SystemItemDetailsPage.dart
@@ -123,7 +123,7 @@ class _SystemItemDetailsPageState extends State
void getListDataByCid() async {
///获取当前tab对应的数据
SystemListByCidEntity? systemListByCidEntity = await HttpUtils.getInstance()
- .get2(
+ .get(
API.getSystemListByCid(
curPageNum, widget.tabList![curPosition].id ?? 0),
isNeedCache: false);
diff --git a/lib/system/SystemPage.dart b/lib/system/SystemPage.dart
index 73b9537..8d800e9 100644
--- a/lib/system/SystemPage.dart
+++ b/lib/system/SystemPage.dart
@@ -182,7 +182,7 @@ class SystemModel extends BaseModel {
///初始化标题数据
Future initTreeData() {
- return HttpUtils.getInstance().get2(API.systemTree,
+ return HttpUtils.getInstance().get(API.systemTree,
onSuccess: (data) {
//设置标题数据
systemTreeEntity = data;
diff --git a/pubspec.lock b/pubspec.lock
index 5ecfa88..e86c0c2 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -518,6 +518,13 @@ packages:
description: flutter
source: sdk
version: "0.0.99"
+ smooth_page_indicator:
+ dependency: "direct main"
+ description:
+ name: smooth_page_indicator
+ url: "https://pub.flutter-io.cn"
+ source: hosted
+ version: "1.0.0+2"
source_gen:
dependency: transitive
description:
--
Gitee
From 66b6087c92499f905ce94bace83505c71dfb6907 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Tue, 1 Mar 2022 16:35:02 +0800
Subject: [PATCH 21/22] =?UTF-8?q?=E6=9B=B4=E6=96=B0webview(=E6=94=AF?=
=?UTF-8?q?=E6=8C=81https=E5=92=8Chttp,=E5=85=B6=E4=BB=96=E7=9A=84?=
=?UTF-8?q?=E6=8B=A6=E6=88=AA)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lib/common/page/webview_page.dart | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/lib/common/page/webview_page.dart b/lib/common/page/webview_page.dart
index cb2f57a..4157fde 100644
--- a/lib/common/page/webview_page.dart
+++ b/lib/common/page/webview_page.dart
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/painting.dart';
import 'package:flutterapp/common/base/base_page.dart';
import 'package:flutterapp/common/util/log_utils.dart';
+import 'package:url_launcher/url_launcher.dart';
import 'package:webview_flutter/webview_flutter.dart';
/// webview组件
@@ -67,6 +68,14 @@ class _WebViewPageState extends State {
WebView(
initialUrl: widget.url ?? '',
javascriptMode: JavascriptMode.unrestricted,
+ navigationDelegate: (request) {
+ if (request.url.contains('http:') ||
+ request.url.contains('https:')) {
+ return NavigationDecision.navigate;
+ } else {
+ return NavigationDecision.prevent;
+ }
+ },
onWebViewCreated: (webViewController) {
_webViewController = webViewController;
},
--
Gitee
From 188bbe27d71d1640b5650b88ea2bcc3277743261 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=B0=B8=E8=89=AF?=
Date: Tue, 1 Mar 2022 16:40:23 +0800
Subject: [PATCH 22/22] =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8D=87=E7=BA=A7?=
=?UTF-8?q?=E5=88=B01.0.9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
auto_build_push.sh | 5 +++--
lib/me/me_page.dart | 1 +
pubspec.yaml | 2 +-
3 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/auto_build_push.sh b/auto_build_push.sh
index 0fbbd8c..99b7c09 100644
--- a/auto_build_push.sh
+++ b/auto_build_push.sh
@@ -18,8 +18,9 @@ filename="app-debug.apk"
#更新日志
buildUpdateDescription="""
-1. 修复体系详情页面tab页面内容一致问题.
-2. 代码优化.
+1. 优化webview,处理部分无法打开问题.
+2. 网络优化.
+3. 列表页面UI优化.
"""
helper() {
diff --git a/lib/me/me_page.dart b/lib/me/me_page.dart
index dd7c9f3..36da0b6 100644
--- a/lib/me/me_page.dart
+++ b/lib/me/me_page.dart
@@ -146,6 +146,7 @@ class _MePageState extends State with AutomaticKeepAliveClientMixin {
];
},
body: SingleChildScrollView(
+ physics: BouncingScrollPhysics(),
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
diff --git a/pubspec.yaml b/pubspec.yaml
index b407585..55d1730 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# version统一版本名称和版本号,'+'前面的为版本名称,后面的为版本号
-version: 1.0.8+9
+version: 1.0.9+10
environment:
sdk: ">=2.12.0 <3.0.0"
--
Gitee