fix: all code issue

This commit is contained in:
louis 2024-03-31 17:13:29 +08:00
parent 89e7a575a8
commit d78a2598ac
76 changed files with 199 additions and 596 deletions

View File

@ -52,6 +52,7 @@ android {
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdkVersion flutter.minSdkVersion minSdkVersion flutter.minSdkVersion
targetSdkVersion flutter.targetSdkVersion targetSdkVersion flutter.targetSdkVersion
compileSdkVersion 34
versionCode flutterVersionCode.toInteger() versionCode flutterVersionCode.toInteger()
versionName flutterVersionName versionName flutterVersionName
} }

View File

@ -3,7 +3,6 @@ import 'dart:io';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:sk_base_mobile/constants/global_url.dart'; import 'package:sk_base_mobile/constants/global_url.dart';
import 'package:sk_base_mobile/models/base_response.dart'; import 'package:sk_base_mobile/models/base_response.dart';
import 'package:sk_base_mobile/models/dict_type.model.dart';
import 'package:sk_base_mobile/services/dio.service.dart'; import 'package:sk_base_mobile/services/dio.service.dart';
import '../constants/constants.dart'; import '../constants/constants.dart';

View File

@ -50,7 +50,7 @@ final theme = ThemeData(
confirmButtonStyle: ButtonStyle( confirmButtonStyle: ButtonStyle(
textStyle: MaterialStateProperty.resolveWith<TextStyle?>( textStyle: MaterialStateProperty.resolveWith<TextStyle?>(
(Set<MaterialState> states) { (Set<MaterialState> states) {
return TextStyle(color: AppTheme.primaryColor); return const TextStyle(color: AppTheme.primaryColor);
}, },
), ),
), ),

View File

@ -1,7 +1,10 @@
/// Global config // ignore_for_file: constant_identifier_names
// Global config
class GloablConfig { class GloablConfig {
// static const BASE_URL = "http://10.0.2.2:8001/api/"; // static const BASE_URL = "http://10.0.2.2:8001/api/";
// static const OSS_URL = "http://10.0.2.2:8001"; // static const OSS_URL = "http://10.0.2.2:8001";
static const BASE_URL = "http://144.123.43.138:3001/api/"; static const BASE_URL = "http://144.123.43.138:3001/api/";
static const OSS_URL = "http://144.123.43.138:3001"; static const OSS_URL = "http://144.123.43.138:3001";
// static const BASE_URL = "http://192.168.60.220:8001/api/"; // static const BASE_URL = "http://192.168.60.220:8001/api/";

View File

@ -1,5 +1,3 @@
import 'dart:ui';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:sk_base_mobile/constants/bg_color.dart'; import 'package:sk_base_mobile/constants/bg_color.dart';

View File

@ -1,3 +1,4 @@
//ignore_for_file: constant_identifier_names
class DictTypeEnum { class DictTypeEnum {
static const String InventoryRoom = "inventory_room"; static const String InventoryRoom = "inventory_room";
static const String InventoryLine = 'inventory_line'; static const String InventoryLine = 'inventory_line';

View File

@ -1,3 +1,4 @@
//ignore_for_file: constant_identifier_names
enum BackActionEnum { enum BackActionEnum {
refresh, refresh,
} }

View File

@ -14,6 +14,6 @@ class RouteConfig {
GetPage(name: login, page: () => LoginScreen()), GetPage(name: login, page: () => LoginScreen()),
GetPage(name: home, page: () => LandingPage()), GetPage(name: home, page: () => LandingPage()),
GetPage(name: userinfo, page: () => UserInfoPage()), GetPage(name: userinfo, page: () => UserInfoPage()),
GetPage(name: inventory, page: () => InventoryPage()), GetPage(name: inventory, page: () => const InventoryPage()),
]; ];
} }

View File

@ -1,5 +1,6 @@
//ignore_for_file: constant_identifier_names
import 'dart:io'; import 'dart:io';
import 'package:flutter/material.dart';
import 'package:sk_base_mobile/models/task_model.dart'; import 'package:sk_base_mobile/models/task_model.dart';
import 'package:sk_base_mobile/util/util.dart'; import 'package:sk_base_mobile/util/util.dart';
import 'package:sqflite/sqflite.dart'; import 'package:sqflite/sqflite.dart';

View File

@ -18,8 +18,6 @@ class IndexPage extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isLandscape = final isLandscape =
MediaQuery.of(context).orientation == Orientation.landscape; MediaQuery.of(context).orientation == Orientation.landscape;
final isLogin =
StorageService.to.getString(CacheKeys.token, isWithUser: false) != null;
return ScreenUtilInit( return ScreenUtilInit(
minTextAdapt: true, minTextAdapt: true,
designSize: isLandscape designSize: isLandscape
@ -42,7 +40,8 @@ class IndexPage extends StatelessWidget {
return Obx(() => MediaQuery( return Obx(() => MediaQuery(
// //
data: MediaQuery.of(context).copyWith( data: MediaQuery.of(context).copyWith(
textScaleFactor: AppInfoService.to.scale.value), textScaler:
TextScaler.linear(AppInfoService.to.scale.value)),
child: widget!)); child: widget!));
}))); })));
} }

View File

@ -1,8 +1,4 @@
import 'dart:math';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
// import 'package:sentry_flutter/sentry_flutter.dart'; // import 'package:sentry_flutter/sentry_flutter.dart';
import 'package:sk_base_mobile/global.dart'; import 'package:sk_base_mobile/global.dart';
import 'package:sk_base_mobile/index.dart'; import 'package:sk_base_mobile/index.dart';
@ -12,9 +8,8 @@ Future<void> main() async {
try { try {
await Global.init(); await Global.init();
} catch (e) { } catch (e) {
LoggerUtil().error('Init failed, please try again.${e}'); LoggerUtil().error('Init failed, please try again.$e');
} }
bool isProduction = kReleaseMode;
// await SentryFlutter.init( // await SentryFlutter.init(
// (options) { // (options) {
// options.environment = isProduction ? 'production' : 'development'; // options.environment = isProduction ? 'production' : 'development';

View File

@ -15,7 +15,7 @@ class AppConfig {
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = Map<String, dynamic>(); final Map<String, dynamic> data = <String, dynamic>{};
data['ver'] = ver; data['ver'] = ver;
if (items != null) { if (items != null) {
data['items'] = items!.map((v) => v.toJson()).toList(); data['items'] = items!.map((v) => v.toJson()).toList();
@ -36,7 +36,7 @@ class AppConfigItem {
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> json = new Map<String, dynamic>(); final Map<String, dynamic> json = <String, dynamic>{};
json['data'] = data; json['data'] = data;
json['name'] = name; json['name'] = name;
return json; return json;

View File

@ -8,7 +8,7 @@ class Auth {
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = Map<String, dynamic>(); final Map<String, dynamic> data = <String, dynamic>{};
data['token'] = token; data['token'] = token;
return data; return data;
} }

View File

@ -1,8 +1,8 @@
class BaseModel { class BaseModel {
BaseModel.fromJson(Map<String, dynamic> json) {} BaseModel.fromJson(Map<String, dynamic> json);
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = <String, dynamic>{};
return data; return data;
} }
} }

View File

@ -37,6 +37,6 @@ class CompanyModel {
"updatedAt": updatedAt?.toIso8601String(), "updatedAt": updatedAt?.toIso8601String(),
"name": name, "name": name,
"isDelete": isDelete, "isDelete": isDelete,
"files": files.map((x) => x?.toJson()).toList(), "files": files.map((x) => x.toJson()).toList(),
}; };
} }

View File

@ -1,9 +1,6 @@
import 'package:sk_base_mobile/constants/enum.dart';
import 'package:sk_base_mobile/models/file.model.dart'; import 'package:sk_base_mobile/models/file.model.dart';
import 'package:sk_base_mobile/models/index.dart'; import 'package:sk_base_mobile/models/index.dart';
import 'package:sk_base_mobile/models/inventory.model.dart'; import 'package:sk_base_mobile/models/inventory.model.dart';
import 'package:sk_base_mobile/models/product.model.dart';
import 'package:sk_base_mobile/models/project.model.dart';
class InventoryInOutModel { class InventoryInOutModel {
InventoryInOutModel({ InventoryInOutModel({

View File

@ -71,7 +71,7 @@ class ProductModel {
'productNumber': productNumber, 'productNumber': productNumber,
'productSpecification': productSpecification, 'productSpecification': productSpecification,
"namePinyin": namePinyin, "namePinyin": namePinyin,
"files": files.map((x) => x?.toJson()).toList(), "files": files.map((x) => x.toJson()).toList(),
"company": company?.toJson(), "company": company?.toJson(),
"unit": unit?.toJson(), "unit": unit?.toJson(),
}; };

View File

@ -70,6 +70,6 @@ class UserInfoModel {
"remark": remark, "remark": remark,
"status": status, "status": status,
"dept": dept?.toJson(), "dept": dept?.toJson(),
"roles": roles.map((x) => x?.toJson()).toList(), "roles": roles.map((x) => x.toJson()).toList(),
}; };
} }

View File

@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:sk_base_mobile/constants/bg_color.dart'; import 'package:sk_base_mobile/constants/bg_color.dart';
import 'package:sk_base_mobile/screens/inventory_inout/components/change_icon.dart'; import 'package:sk_base_mobile/screens/inventory_inout/components/change_icon.dart';
import 'package:sk_base_mobile/screens/inventory_inout/components/filter_btn.dart';
import 'package:sk_base_mobile/screens/inventory_inout/components/today_button.dart'; import 'package:sk_base_mobile/screens/inventory_inout/components/today_button.dart';
import 'package:sk_base_mobile/screens/inventory_inout/inventory_inout_controller.dart'; import 'package:sk_base_mobile/screens/inventory_inout/inventory_inout_controller.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart'; import 'package:sk_base_mobile/util/screen_adaper_util.dart';

View File

@ -10,7 +10,7 @@ import 'package:sk_base_mobile/widgets/fade_in_cache_image.dart';
import '../../../constants/enum.dart'; import '../../../constants/enum.dart';
class InventoryInoutCard extends StatelessWidget { class InventoryInoutCard extends StatelessWidget {
InventoryInoutCard({required this.index, required this.ind}); InventoryInoutCard({super.key, required this.index, required this.ind});
final int index; final int index;
final int ind; final int ind;
final controller = Get.find<InventoryInoutController>(); final controller = Get.find<InventoryInoutController>();
@ -48,9 +48,9 @@ class InventoryInoutCard extends StatelessWidget {
), ),
), ),
Positioned( Positioned(
child: buildInOrOut(),
right: ScreenAdaper.width(5), right: ScreenAdaper.width(5),
top: ScreenAdaper.height(5), top: ScreenAdaper.height(5),
child: buildInOrOut(),
) )
], ],
), ),

View File

@ -13,11 +13,10 @@ import 'package:sk_base_mobile/widgets/image_preview.dart';
import 'package:sk_base_mobile/widgets/loading_indicator.dart'; import 'package:sk_base_mobile/widgets/loading_indicator.dart';
class InventoryInoutInfo extends StatelessWidget { class InventoryInoutInfo extends StatelessWidget {
late int inventoryInoutId; final int inventoryInoutId;
late InventoryInouInfoController controller; final InventoryInouInfoController controller;
InventoryInoutInfo({Key? key, required this.inventoryInoutId}) InventoryInoutInfo({super.key, required this.inventoryInoutId})
: controller = Get.put(InventoryInouInfoController(inventoryInoutId)), : controller = Get.put(InventoryInouInfoController(inventoryInoutId));
super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

View File

@ -1,6 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:sk_base_mobile/screens/inventory_inout/components/change_button_roe.dart'; import 'package:sk_base_mobile/screens/inventory_inout/components/change_button_roe.dart';
import 'package:sk_base_mobile/screens/inventory_inout/components/inventory_inout_page_View.dart'; import 'package:sk_base_mobile/screens/inventory_inout/components/inventory_inout_page_view.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart'; import 'package:sk_base_mobile/util/screen_adaper_util.dart';
class TaskPageBody extends StatelessWidget { class TaskPageBody extends StatelessWidget {

View File

@ -4,15 +4,13 @@ import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'package:sk_base_mobile/apis/index.dart'; import 'package:sk_base_mobile/apis/index.dart';
import 'package:sk_base_mobile/app_theme.dart'; import 'package:sk_base_mobile/app_theme.dart';
import 'package:sk_base_mobile/constants/enum.dart'; import 'package:sk_base_mobile/constants/enum.dart';
import 'package:sk_base_mobile/db_helper/dbHelper.dart'; import 'package:sk_base_mobile/db_helper/db_help.dart';
import 'package:sk_base_mobile/screens/inventory_inout/components/inventory_inout_info.dart'; import 'package:sk_base_mobile/screens/inventory_inout/components/inventory_inout_info.dart';
import 'package:sk_base_mobile/screens/new_inventory_inout/new_inventory_inout.dart'; import 'package:sk_base_mobile/screens/new_inventory_inout/new_inventory_inout.dart';
import 'package:sk_base_mobile/util/date.util.dart'; import 'package:sk_base_mobile/util/date.util.dart';
import 'package:sk_base_mobile/util/logger_util.dart';
import 'package:sk_base_mobile/util/modal.util.dart'; import 'package:sk_base_mobile/util/modal.util.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart'; import 'package:sk_base_mobile/util/screen_adaper_util.dart';
import '../../models/index.dart'; import '../../models/index.dart';
import 'components/responsive.dart';
class InventoryInoutController extends GetxController { class InventoryInoutController extends GetxController {
RxMap userData = {}.obs; RxMap userData = {}.obs;

View File

@ -17,20 +17,20 @@ class LandingPage extends StatelessWidget {
child: Stack(children: [ child: Stack(children: [
const BackColors(), const BackColors(),
SafeArea( SafeArea(
top: true, bottom: false,
child: Obx(() => Scaffold( child: Scaffold(
floatingActionButtonLocation: floatingActionButtonLocation:
FloatingActionButtonLocation.centerDocked, FloatingActionButtonLocation.centerDocked,
floatingActionButton: [0].indexWhere( // floatingActionButton: [0].indexWhere(
(item) => item == controller.currentIndex.value) > // (item) => item == controller.currentIndex.value) >
-1 // -1
? FloatingCreateButton() // ? FloatingCreateButton()
: null, // : null,
floatingActionButton: FloatingCreateButton(),
bottomNavigationBar: BottomNavBar(), bottomNavigationBar: BottomNavBar(),
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
body: Obx( body: Obx(() => controller.pages[controller.currentIndex.value]),
() => controller.pages[controller.currentIndex.value]), ))
)))
]), ]),
); );
} }

View File

@ -5,7 +5,6 @@ import 'package:sk_base_mobile/screens/inventory/inventory.dart';
import 'package:sk_base_mobile/screens/inventory_inout/inventory_inout.dart'; import 'package:sk_base_mobile/screens/inventory_inout/inventory_inout.dart';
import 'package:sk_base_mobile/screens/mine/mine.dart'; import 'package:sk_base_mobile/screens/mine/mine.dart';
import 'package:sk_base_mobile/screens/workbench/workbench.dart'; import 'package:sk_base_mobile/screens/workbench/workbench.dart';
import 'package:sk_base_mobile/services/app_info.service.dart';
class LandingController extends GetxController { class LandingController extends GetxController {
RxInt currentIndex = 0.obs; RxInt currentIndex = 0.obs;
@ -21,7 +20,7 @@ class LandingController extends GetxController {
icon: Icons.inventory_outlined, icon: Icons.inventory_outlined,
activeIcon: Icons.inventory_rounded, activeIcon: Icons.inventory_rounded,
label: '库存', label: '库存',
page: InventoryPage()), page: const InventoryPage()),
AppBottomNavItem( AppBottomNavItem(
icon: Icons.widgets_outlined, icon: Icons.widgets_outlined,
activeIcon: Icons.widgets_rounded, activeIcon: Icons.widgets_rounded,
@ -31,7 +30,7 @@ class LandingController extends GetxController {
icon: Icons.person_outline_outlined, icon: Icons.person_outline_outlined,
activeIcon: Icons.person, activeIcon: Icons.person,
label: '我的', label: '我的',
page: MinePage()), page: const MinePage()),
]; ];
@override @override
onInit() { onInit() {

View File

@ -1,183 +0,0 @@
import 'package:date_format/date_format.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:sk_base_mobile/app_theme.dart';
import 'package:sk_base_mobile/screens/login/login.controller.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart';
class LoginScreen extends StatelessWidget {
LoginScreen({super.key});
final _controller = Get.put<LoginController>(LoginController());
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage('assets/images/bg.jpg'),
fit: BoxFit.cover,
),
),
child: buildBody()));
// return Scaffold(
// body: SafeArea(child: buildBody()));
}
buildBody() {
return Center(
child: SingleChildScrollView(
child: GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () {
//
FocusScope.of(Get.context!).unfocus();
},
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image(
height: ScreenAdaper.width(150),
image: const AssetImage(
'assets/images/company_logo.png',
)),
SizedBox(
width: ScreenAdaper.width(10),
),
Text(
'山矿通',
style: TextStyle(
fontWeight: FontWeight.w700,
color: AppTheme.nearlyWhite,
letterSpacing: ScreenAdaper.sp(5),
fontSize: ScreenAdaper.height(70)),
)
],
),
SizedBox(height: ScreenAdaper.height(50)),
buildForm(),
SizedBox(height: ScreenAdaper.height(50)),
],
),
),
));
}
Widget buildForm() {
final children = [
buildUserNameInput(),
SizedBox(
height: ScreenAdaper.height(20),
),
buildPasswordInput(),
SizedBox(
height: ScreenAdaper.height(20),
),
buildForgotPassword(),
SizedBox(
height: ScreenAdaper.height(20),
),
buildSubmitButton(),
];
final child = Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: children,
);
return Form(
key: _controller.formKey,
child: Container(
alignment: Alignment.center,
width: ScreenAdaper.width(800),
padding: EdgeInsets.symmetric(
vertical: 0, horizontal: ScreenAdaper.width(50)),
child: child,
));
}
Widget buildSubmitButton() {
final button = ElevatedButton(
style: ElevatedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(ScreenAdaper.sp(30))),
padding: EdgeInsets.symmetric(
horizontal: ScreenAdaper.height(25),
vertical: ScreenAdaper.height(20)),
foregroundColor: AppTheme.nearlyWhite,
textStyle: TextStyle(
letterSpacing: 5,
fontWeight: FontWeight.bold,
fontSize: ScreenAdaper.height(25)),
backgroundColor: AppTheme.primaryColor),
onPressed: _controller.doLogin,
child: const Text('登录'),
);
final child = Expanded(
child: button,
);
return Row(
children: [child],
);
}
Widget buildUserNameInput() {
return TextFormField(
decoration: const InputDecoration(
labelText: '用户名',
),
onFieldSubmitted: (value) {
_controller.passwordFocusNode.requestFocus();
},
style: TextStyle(fontSize: ScreenAdaper.height(25)),
onChanged: (value) {},
validator: (String? value) {
if (value == null || value == '') {
return '用户名必填';
} else {
return null;
}
},
);
}
Widget buildPasswordInput() {
return TextFormField(
decoration: const InputDecoration(
labelText: '密码',
),
obscureText: true,
focusNode: _controller.passwordFocusNode,
onFieldSubmitted: (value) {
_controller.doLogin();
},
style: TextStyle(fontSize: ScreenAdaper.height(25)),
onChanged: (value) {},
validator: (String? value) {
return (value ?? '').length >= 6 ? null : '密码长度至少6位';
},
);
}
Widget buildForgotPassword() {
return GestureDetector(
onTap: () {},
child: Container(
alignment: Alignment.centerRight,
child: Text(
'忘记密码?',
style: TextStyle(
color: Colors.grey,
fontSize: ScreenAdaper.height(20),
decoration: TextDecoration.underline,
),
)),
);
}
}

View File

@ -1,7 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:sk_base_mobile/models/mine_about.model.dart'; import 'package:sk_base_mobile/models/mine_about.model.dart';
import 'package:sk_base_mobile/store/auth.store.dart';
class MineController extends GetxController { class MineController extends GetxController {
final selectedTabIndex = 0.obs; final selectedTabIndex = 0.obs;

View File

@ -1,23 +1,17 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:sk_base_mobile/screens/mine/mine.controller.dart';
import 'package:sk_base_mobile/screens/mine/settings/mine_settings.dart'; import 'package:sk_base_mobile/screens/mine/settings/mine_settings.dart';
// import 'package:sk_base_mobile/screens/mine/mine_about.dart'; // import 'package:sk_base_mobile/screens/mine/mine_about.dart';
// import 'package:sk_base_mobile/screens/mine/mine_block.dart'; // import 'package:sk_base_mobile/screens/mine/mine_block.dart';
// import 'package:sk_base_mobile/screens/mine/mine_mytickets.dart'; // import 'package:sk_base_mobile/screens/mine/mine_mytickets.dart';
// import 'package:sk_base_mobile/screens/mine/mine_settings.dart'; // import 'package:sk_base_mobile/screens/mine/mine_settings.dart';
import 'package:sk_base_mobile/services/service.dart';
import 'package:sk_base_mobile/store/auth.store.dart'; import 'package:sk_base_mobile/store/auth.store.dart';
import 'package:sk_base_mobile/util/common.util.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart'; import 'package:sk_base_mobile/util/screen_adaper_util.dart';
import 'package:sk_base_mobile/widgets/want_keep_alive.dart';
import 'package:sk_base_mobile/widgets/my_avatar.dart'; import 'package:sk_base_mobile/widgets/my_avatar.dart';
import 'package:sk_base_mobile/app_theme.dart'; import 'package:sk_base_mobile/app_theme.dart';
import 'package:sk_base_mobile/constants/router.dart';
import '../../constants/constants.dart';
class MinePage extends StatefulWidget { class MinePage extends StatefulWidget {
MinePage({super.key}); const MinePage({super.key});
@override @override
State<MinePage> createState() => _MinePageState(); State<MinePage> createState() => _MinePageState();
@ -25,8 +19,6 @@ class MinePage extends StatefulWidget {
class _MinePageState extends State<MinePage> class _MinePageState extends State<MinePage>
with SingleTickerProviderStateMixin { with SingleTickerProviderStateMixin {
final _controller = Get.put<MineController>(MineController());
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -105,7 +97,7 @@ class _MinePageState extends State<MinePage>
SizedBox( SizedBox(
height: ScreenAdaper.height(50), height: ScreenAdaper.height(50),
), ),
Expanded(child: MineSettingsPage()) const Expanded(child: MineSettingsPage())
// Expanded( // Expanded(
// child: DefaultTabController( // child: DefaultTabController(
// length: 4, // length: 4,

View File

@ -1,13 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:sk_base_mobile/models/mine_about.model.dart';
class MineController extends GetxController { class MineController extends GetxController {
final selectedTabIndex = 0.obs; final selectedTabIndex = 0.obs;
TabController? tabController; TabController? tabController;
@override
void onInit() {
super.onInit();
}
} }

View File

@ -1,14 +1,10 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:sk_base_mobile/app_theme.dart'; import 'package:sk_base_mobile/app_theme.dart';
import 'package:sk_base_mobile/screens/mine/mine.controller.dart';
import 'package:sk_base_mobile/store/auth.store.dart'; import 'package:sk_base_mobile/store/auth.store.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart'; import 'package:sk_base_mobile/util/screen_adaper_util.dart';
class MineSettingsPage extends StatelessWidget { class MineSettingsPage extends StatelessWidget {
final _controller = Get.find<MineController>(); const MineSettingsPage({super.key});
MineSettingsPage({super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

View File

@ -1,8 +1,6 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:sk_base_mobile/models/user_info.model.dart';
import 'package:sk_base_mobile/store/auth.store.dart'; import 'package:sk_base_mobile/store/auth.store.dart';
import 'package:sk_base_mobile/apis/index.dart';
class UserInfoController extends GetxController { class UserInfoController extends GetxController {
final nickNameController = TextEditingController(text: ''); final nickNameController = TextEditingController(text: '');

View File

@ -1,8 +1,5 @@
import 'package:date_format/date_format.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:sk_base_mobile/constants/data.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart'; import 'package:sk_base_mobile/util/screen_adaper_util.dart';
import 'package:sk_base_mobile/widgets/my_avatar.dart'; import 'package:sk_base_mobile/widgets/my_avatar.dart';

View File

@ -6,8 +6,6 @@ import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'package:sk_base_mobile/apis/index.dart'; import 'package:sk_base_mobile/apis/index.dart';
import 'package:sk_base_mobile/app_theme.dart'; import 'package:sk_base_mobile/app_theme.dart';
import 'package:sk_base_mobile/constants/bg_color.dart'; import 'package:sk_base_mobile/constants/bg_color.dart';
import 'package:sk_base_mobile/models/index.dart';
import 'package:sk_base_mobile/models/inventory.model.dart';
import 'package:sk_base_mobile/models/user_info.model.dart'; import 'package:sk_base_mobile/models/user_info.model.dart';
import 'package:sk_base_mobile/util/debouncer.dart'; import 'package:sk_base_mobile/util/debouncer.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart'; import 'package:sk_base_mobile/util/screen_adaper_util.dart';
@ -15,8 +13,8 @@ import 'package:sk_base_mobile/widgets/empty.dart';
import 'package:sk_base_mobile/widgets/fade_in_cache_image.dart'; import 'package:sk_base_mobile/widgets/fade_in_cache_image.dart';
class AgentSearch extends StatelessWidget { class AgentSearch extends StatelessWidget {
Function(UserInfoModel)? onSelected; final Function(UserInfoModel)? onSelected;
Function(UserInfoModel)? beforeSelectedCheck; final Function(UserInfoModel)? beforeSelectedCheck;
AgentSearch({super.key, this.onSelected, this.beforeSelectedCheck}); AgentSearch({super.key, this.onSelected, this.beforeSelectedCheck});
final controller = Get.put(AgentSearchController()); final controller = Get.put(AgentSearchController());
final listTitleTextStyle = final listTitleTextStyle =
@ -79,7 +77,6 @@ class AgentSearch extends StatelessWidget {
} }
Widget buildList() { Widget buildList() {
final textStyle = TextStyle(fontSize: ScreenAdaper.height(22));
return Obx(() => SmartRefresher( return Obx(() => SmartRefresher(
enablePullDown: true, enablePullDown: true,
enablePullUp: true, enablePullUp: true,
@ -87,13 +84,13 @@ class AgentSearch extends StatelessWidget {
onLoading: controller.onLoading, onLoading: controller.onLoading,
onRefresh: controller.onRefresh, onRefresh: controller.onRefresh,
child: controller.refreshController.isLoading child: controller.refreshController.isLoading
? SizedBox() ? const SizedBox()
: controller.list.isEmpty : controller.list.isEmpty
? Center( ? const Center(
child: Empty(text: '暂无数据'), child: Empty(text: '暂无数据'),
) )
: ListView.separated( : ListView.separated(
separatorBuilder: (context, index) => Divider( separatorBuilder: (context, index) => const Divider(
color: AppTheme.dividerColor, color: AppTheme.dividerColor,
), ),
itemCount: controller.list.length, itemCount: controller.list.length,

View File

@ -94,12 +94,12 @@ class DateTimeContainer extends StatelessWidget {
), ),
child: Row( child: Row(
children: [ children: [
Icon( const Icon(
Icons.date_range, Icons.date_range,
color: darkBlue, color: darkBlue,
size: 16, size: 16,
), ),
SizedBox( const SizedBox(
width: defaultPadding / 4, width: defaultPadding / 4,
), ),
Text(text), Text(text),

View File

@ -18,7 +18,7 @@ class DescriptionInput extends StatelessWidget {
height: defaultPadding / 2, height: defaultPadding / 2,
), ),
const Padding( const Padding(
padding: const EdgeInsets.symmetric(vertical: 10), padding: EdgeInsets.symmetric(vertical: 10),
child: Text( child: Text(
'Description', 'Description',
style: style:

View File

@ -10,12 +10,11 @@ import 'package:sk_base_mobile/models/index.dart';
import 'package:sk_base_mobile/models/inventory.model.dart'; import 'package:sk_base_mobile/models/inventory.model.dart';
import 'package:sk_base_mobile/util/debouncer.dart'; import 'package:sk_base_mobile/util/debouncer.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart'; import 'package:sk_base_mobile/util/screen_adaper_util.dart';
import 'package:sk_base_mobile/widgets/core/zt_search_select.dart';
import 'package:sk_base_mobile/widgets/empty.dart'; import 'package:sk_base_mobile/widgets/empty.dart';
class InventorySearch extends StatelessWidget { class InventorySearch extends StatelessWidget {
Function(InventoryModel)? onInventorySelected; final Function(InventoryModel)? onInventorySelected;
Function(InventoryModel)? beforeSelectedCheck; final Function(InventoryModel)? beforeSelectedCheck;
InventorySearch( InventorySearch(
{super.key, this.onInventorySelected, this.beforeSelectedCheck}); {super.key, this.onInventorySelected, this.beforeSelectedCheck});
final controller = Get.put(InventorySearchController()); final controller = Get.put(InventorySearchController());
@ -100,12 +99,14 @@ class InventorySearch extends StatelessWidget {
value: controller.projectId.value, value: controller.projectId.value,
isExpanded: true, isExpanded: true,
items: [ items: [
DropdownMenuItem( const DropdownMenuItem(
child: Text('所有项目'),
value: 0, value: 0,
child: Text('所有项目'),
), ),
...controller.projects.map((element) => DropdownMenuItem( ...controller.projects.map((element) => DropdownMenuItem(
child: Text('${element.name}'), value: element.id)) value: element.id,
child: Text('${element.name}'),
))
], ],
onChanged: (value) { onChanged: (value) {
controller.projectId.value = value; controller.projectId.value = value;
@ -156,18 +157,18 @@ class InventorySearch extends StatelessWidget {
child: Obx( child: Obx(
() => DropdownButtonFormField( () => DropdownButtonFormField(
value: controller.hasInventoryStatus.value, value: controller.hasInventoryStatus.value,
items: [ items: const [
DropdownMenuItem( DropdownMenuItem(
child: Text('全部'),
value: 0, value: 0,
child: Text('全部'),
), ),
DropdownMenuItem( DropdownMenuItem(
child: const Text('有库存'),
value: 1, value: 1,
child: Text('有库存'),
), ),
DropdownMenuItem( DropdownMenuItem(
child: const Text('无库存'),
value: 2, value: 2,
child: Text('无库存'),
), ),
], ],
onChanged: (value) { onChanged: (value) {
@ -195,15 +196,15 @@ class InventorySearch extends StatelessWidget {
onLoading: controller.onLoading, onLoading: controller.onLoading,
onRefresh: controller.onRefresh, onRefresh: controller.onRefresh,
child: controller.refreshController.isLoading child: controller.refreshController.isLoading
? SizedBox() ? const SizedBox()
: controller.inventories.isEmpty : controller.inventories.isEmpty
? Center( ? const Center(
child: Empty(text: '暂无库存'), child: Empty(text: '暂无库存'),
) )
: !ScreenAdaper.isLandspace() : !ScreenAdaper.isLandspace()
? buildPortraitList() ? buildPortraitList()
: Table(columnWidths: { : Table(columnWidths: {
0: MinColumnWidth( 0: const MinColumnWidth(
FixedColumnWidth(80), FixedColumnWidth(80)), FixedColumnWidth(80), FixedColumnWidth(80)),
1: MinColumnWidth( 1: MinColumnWidth(
FixedColumnWidth( FixedColumnWidth(
@ -227,7 +228,7 @@ class InventorySearch extends StatelessWidget {
}, children: [ }, children: [
// table header // table header
TableRow( TableRow(
decoration: BoxDecoration( decoration: const BoxDecoration(
border: Border( border: Border(
bottom: BorderSide( bottom: BorderSide(
color: AppTheme.dividerColor))), color: AppTheme.dividerColor))),
@ -285,7 +286,7 @@ class InventorySearch extends StatelessWidget {
]), ]),
...controller.inventories.map((itemData) { ...controller.inventories.map((itemData) {
return TableRow( return TableRow(
decoration: BoxDecoration( decoration: const BoxDecoration(
border: Border( border: Border(
bottom: BorderSide( bottom: BorderSide(
color: AppTheme.dividerColor))), color: AppTheme.dividerColor))),
@ -358,7 +359,7 @@ class InventorySearch extends StatelessWidget {
itemData: itemData, itemData: itemData,
alignment: Alignment.centerRight), alignment: Alignment.centerRight),
]); ]);
}).toList() })
]))); ])));
} }
@ -397,7 +398,6 @@ class InventorySearch extends StatelessWidget {
} }
if (onInventorySelected != null) onInventorySelected!(itemData); if (onInventorySelected != null) onInventorySelected!(itemData);
}, },
child: Container(
child: Row(children: [ child: Row(children: [
Text( Text(
'${itemData.inventoryNumber}', '${itemData.inventoryNumber}',
@ -416,23 +416,20 @@ class InventorySearch extends StatelessWidget {
Text( Text(
'${itemData.product?.company?.name}', '${itemData.product?.company?.name}',
style: TextStyle( style: TextStyle(
fontSize: ScreenAdaper.sp(30), fontSize: ScreenAdaper.sp(30), color: AppTheme.grey),
color: AppTheme.grey),
), ),
Text('${double.parse('${itemData.unitPrice}')}', Text('${double.parse('${itemData.unitPrice}')}',
style: TextStyle( style: TextStyle(
fontSize: ScreenAdaper.sp(30), fontSize: ScreenAdaper.sp(30), color: AppTheme.grey))
color: AppTheme.grey))
], ],
), ),
Spacer(), const Spacer(),
Text( Text('${itemData.quantity}${itemData.product?.unit?.label ?? ''}',
'${itemData.quantity}${itemData.product?.unit?.label ?? ''}',
style: TextStyle(fontSize: ScreenAdaper.sp(40))), style: TextStyle(fontSize: ScreenAdaper.sp(40))),
]), ]),
)); );
}, },
separatorBuilder: (_, index) => Divider( separatorBuilder: (_, index) => const Divider(
color: AppTheme.dividerColor, color: AppTheme.dividerColor,
), ),
itemCount: controller.inventories.length); itemCount: controller.inventories.length);

View File

@ -42,7 +42,7 @@ class LabelInput extends StatelessWidget {
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( const Text(
'Periority', 'Periority',
style: style:
TextStyle(color: Colors.black, fontWeight: FontWeight.bold), TextStyle(color: Colors.black, fontWeight: FontWeight.bold),

View File

@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:sk_base_mobile/constants/bg_color.dart'; import 'package:sk_base_mobile/constants/bg_color.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart';
class PeriorityContainer extends StatelessWidget { class PeriorityContainer extends StatelessWidget {
final String text; final String text;
@ -11,20 +12,23 @@ class PeriorityContainer extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return AnimatedContainer( return AnimatedContainer(
duration: Duration(milliseconds: 300), duration: const Duration(milliseconds: 300),
padding: EdgeInsets.all(selected ? 3 : 0), padding: EdgeInsets.all(selected ? 3 : 0),
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(30), borderRadius: BorderRadius.circular(30),
color: selected ? Colors.orange : Colors.black12), color: selected ? Colors.orange : Colors.black12),
child: Container( child: Container(
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10), padding: EdgeInsets.symmetric(
horizontal: ScreenAdaper.width(20),
vertical: ScreenAdaper.height(10)),
decoration: BoxDecoration( decoration: BoxDecoration(
color: selected ? Colors.white : Colors.transparent, color: selected ? Colors.white : Colors.transparent,
borderRadius: BorderRadius.circular(30), borderRadius: BorderRadius.circular(30),
), ),
child: Text( child: Text(
text, text,
style: TextStyle(color: darkAccentBlue, fontWeight: FontWeight.bold), style: const TextStyle(
color: darkAccentBlue, fontWeight: FontWeight.bold),
), ),
), ),
); );

View File

@ -11,7 +11,7 @@ import 'package:sk_base_mobile/util/debouncer.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart'; import 'package:sk_base_mobile/util/screen_adaper_util.dart';
class ProductSearch extends StatelessWidget { class ProductSearch extends StatelessWidget {
Function(ProductModel)? onProductSelected; final Function(ProductModel)? onProductSelected;
ProductSearch({super.key, this.onProductSelected}); ProductSearch({super.key, this.onProductSelected});
final controller = Get.put(ProductSearchController()); final controller = Get.put(ProductSearchController());
final listTitleTextStyle = final listTitleTextStyle =

View File

@ -34,14 +34,14 @@ class TextInputField extends StatelessWidget {
}, },
onTap: onTap, onTap: onTap,
decoration: InputDecoration( decoration: InputDecoration(
contentPadding: EdgeInsets.symmetric(horizontal: 20), contentPadding: const EdgeInsets.symmetric(horizontal: 20),
hintText: hint, hintText: hint,
fillColor: Colors.white, fillColor: Colors.white,
filled: true, filled: true,
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide.none), borderSide: BorderSide.none),
hintStyle: TextStyle(color: Colors.grey, fontSize: 12), hintStyle: const TextStyle(color: Colors.grey, fontSize: 12),
), ),
), ),
); );

View File

@ -19,15 +19,13 @@ import 'package:sk_base_mobile/widgets/core/zk_date_picker.dart';
import 'package:sk_base_mobile/widgets/core/zt_text_input.dart'; import 'package:sk_base_mobile/widgets/core/zt_text_input.dart';
import 'package:sk_base_mobile/widgets/gradient_button.dart'; import 'package:sk_base_mobile/widgets/gradient_button.dart';
import 'package:sk_base_mobile/screens/new_inventory_inout/new_inventory_inout_controller.dart'; import 'package:sk_base_mobile/screens/new_inventory_inout/new_inventory_inout_controller.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart';
class NewInventoryInout extends StatelessWidget { class NewInventoryInout extends StatelessWidget {
final NewInventoryInoutController controller; final NewInventoryInoutController controller;
final dictService = Get.find<DictService>(); final dictService = Get.find<DictService>();
final int inOrOut; final int inOrOut;
NewInventoryInout({Key? key, this.inOrOut = InventoryInOrOutEnum.In}) NewInventoryInout({super.key, this.inOrOut = InventoryInOrOutEnum.In})
: controller = Get.put(NewInventoryInoutController(inOrOut: inOrOut)), : controller = Get.put(NewInventoryInoutController(inOrOut: inOrOut));
super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -418,13 +416,13 @@ class NewInventoryInout extends StatelessWidget {
thirdLevel: thirdtLevelData thirdLevel: thirdtLevelData
.map((e) => Center(child: (Text(e.label)))) .map((e) => Center(child: (Text(e.label))))
.toList(), .toList(),
onChanged: (_0, _1, _2) { onChanged: (level1, level2, level3) {
String position = firstLevelData[_0].label; String position = firstLevelData[level1].label;
if (_1 >= 1) { if (level2 >= 1) {
position += ', ${secondLevelData[_1].label}'; position += ', ${secondLevelData[level2].label}';
} }
if (_2 >= 1) { if (level3 >= 1) {
position += ', ${thirdtLevelData[_2].label}'; position += ', ${thirdtLevelData[level3].label}';
} }
// , ${secondLevelData[_1].label}, ${thirdtLevelData[_2].label} // , ${secondLevelData[_1].label}, ${thirdtLevelData[_2].label}
controller.positionTextController.text = position; controller.positionTextController.text = position;
@ -536,7 +534,7 @@ class NewInventoryInout extends StatelessWidget {
}, },
child: Icon( child: Icon(
Icons.close, Icons.close,
shadows: [ shadows: const [
Shadow( Shadow(
color: Colors.black, color: Colors.black,
offset: Offset(1, 1), offset: Offset(1, 1),

View File

@ -6,7 +6,7 @@ import 'package:get/get.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'package:sk_base_mobile/apis/index.dart'; import 'package:sk_base_mobile/apis/index.dart';
import 'package:sk_base_mobile/constants/enum.dart'; import 'package:sk_base_mobile/constants/enum.dart';
import 'package:sk_base_mobile/db_helper/dbHelper.dart'; import 'package:sk_base_mobile/db_helper/db_help.dart';
import 'package:sk_base_mobile/models/index.dart'; import 'package:sk_base_mobile/models/index.dart';
import 'package:sk_base_mobile/screens/inventory_inout/inventory_inout_controller.dart'; import 'package:sk_base_mobile/screens/inventory_inout/inventory_inout_controller.dart';
import 'package:sk_base_mobile/util/date.util.dart'; import 'package:sk_base_mobile/util/date.util.dart';

View File

@ -1,7 +1,5 @@
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:sk_base_mobile/app_theme.dart'; import 'package:sk_base_mobile/app_theme.dart';
import 'package:sk_base_mobile/constants/router.dart'; import 'package:sk_base_mobile/constants/router.dart';
@ -16,7 +14,7 @@ class WorkBenchModel {
class WorkBenchPage extends StatelessWidget { class WorkBenchPage extends StatelessWidget {
WorkBenchPage({super.key}); WorkBenchPage({super.key});
List<WorkBenchModel> works = [ final List<WorkBenchModel> works = [
WorkBenchModel(title: '库存', route: '/inventory'), WorkBenchModel(title: '库存', route: '/inventory'),
WorkBenchModel(title: '产品', route: '/product'), WorkBenchModel(title: '产品', route: '/product'),
WorkBenchModel(title: '合同', route: '/contract'), WorkBenchModel(title: '合同', route: '/contract'),
@ -73,14 +71,14 @@ class WorkBenchPage extends StatelessWidget {
clipBehavior: Clip.antiAlias, clipBehavior: Clip.antiAlias,
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
gradient: LinearGradient( gradient: const LinearGradient(
begin: Alignment.centerLeft, begin: Alignment.centerLeft,
end: Alignment.centerRight, end: Alignment.centerRight,
colors: [AppTheme.primaryColorLight, AppTheme.primaryColor]), colors: [AppTheme.primaryColorLight, AppTheme.primaryColor]),
boxShadow: [ boxShadow: [
BoxShadow( BoxShadow(
color: AppTheme.black.withOpacity(0.4), color: AppTheme.black.withOpacity(0.4),
offset: Offset(0, 0), offset: const Offset(0, 0),
blurRadius: 1, blurRadius: 1,
spreadRadius: 1) spreadRadius: 1)
], ],

View File

@ -4,15 +4,6 @@ import 'package:get/get.dart';
class WorkBenchController extends GetxController { class WorkBenchController extends GetxController {
late final AnimationController animationController; late final AnimationController animationController;
@override
void onInit() {
super.onInit();
// animationController = AnimationController(
// vsync: this,
// duration: Duration(seconds: 2),
// )..forward();
}
@override @override
void onClose() { void onClose() {
animationController.dispose(); animationController.dispose();

View File

@ -1,24 +1,9 @@
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:package_info/package_info.dart'; import 'package:package_info/package_info.dart';
import 'package:sk_base_mobile/app_theme.dart';
import 'package:sk_base_mobile/models/app_bottom_nav_item.dart';
import 'package:sk_base_mobile/models/app_config.dart'; import 'package:sk_base_mobile/models/app_config.dart';
import 'package:sk_base_mobile/screens/inventory/inventory.dart';
import 'package:sk_base_mobile/screens/inventory_inout/inventory_inout.dart';
import 'package:sk_base_mobile/apis/index.dart';
import 'package:sk_base_mobile/screens/workbench/workbench.dart';
import 'package:sk_base_mobile/services/service.dart'; import 'package:sk_base_mobile/services/service.dart';
import 'package:sk_base_mobile/store/auth.store.dart';
import 'package:sk_base_mobile/util/convert.dart';
import 'package:sk_base_mobile/util/logger_util.dart'; import 'package:sk_base_mobile/util/logger_util.dart';
import 'dart:ui' as ui;
import 'package:sk_base_mobile/config.dart';
import '../constants/constants.dart'; import '../constants/constants.dart';
import '../screens/mine/mine.dart';
class AppInfoService extends GetxService { class AppInfoService extends GetxService {
static AppInfoService get to => Get.find(); static AppInfoService get to => Get.find();

View File

@ -1,5 +1,5 @@
import 'dart:convert'; import 'dart:convert';
import 'package:get/get.dart' as Get; import 'package:get/get.dart' as get_package;
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:sk_base_mobile/models/base_response.dart'; import 'package:sk_base_mobile/models/base_response.dart';
import 'package:sk_base_mobile/util/logger_util.dart'; import 'package:sk_base_mobile/util/logger_util.dart';
@ -10,14 +10,14 @@ import 'package:sk_base_mobile/util/snack_bar.util.dart';
import '../constants/constants.dart'; import '../constants/constants.dart';
class DioService extends Get.GetxService { class DioService extends get_package.GetxService {
static DioService get to => Get.Get.find(); static DioService get to => get_package.Get.find();
static Dio get dio => _dio; static Dio get dio => _dio;
static late Dio _dio; static late Dio _dio;
List<String> whiteList = [Urls.login]; List<String> whiteList = [Urls.login];
BaseOptions dioBaseOptions = BaseOptions( BaseOptions dioBaseOptions = BaseOptions(
connectTimeout: const Duration(seconds: GloablConfig.DIO_TIMEOUT), connectTimeout: const Duration(seconds: GloablConfig.DIO_TIMEOUT),
baseUrl: '${GloablConfig.BASE_URL}', baseUrl: GloablConfig.BASE_URL,
followRedirects: true); followRedirects: true);
late CancelToken cancelToken; late CancelToken cancelToken;
@ -55,7 +55,7 @@ class DioService extends Get.GetxService {
// await SnackBarUtil().error( // await SnackBarUtil().error(
// 'The server is busy, please try again.', // 'The server is busy, please try again.',
// ); // );
} else if (e.type == DioErrorType.badResponse) { } else if (e.type == DioExceptionType.badResponse) {
// When the server response, but with a incorrect status, such as 404, 503... // When the server response, but with a incorrect status, such as 404, 503...
if (e.response?.statusCode == 400) { if (e.response?.statusCode == 400) {
await SnackBarUtil().error( await SnackBarUtil().error(
@ -82,7 +82,7 @@ class DioService extends Get.GetxService {
} else if (e.response?.statusCode == 422) { } else if (e.response?.statusCode == 422) {
await SnackBarUtil().error(e.response?.data['message']); await SnackBarUtil().error(e.response?.data['message']);
} }
} else if (e.type == DioErrorType.cancel) { } else if (e.type == DioExceptionType.cancel) {
// When the request is cancelled, dio will throw a error with this type. // When the request is cancelled, dio will throw a error with this type.
LoggerUtil().error("[Service-dio] 请求取消"); LoggerUtil().error("[Service-dio] 请求取消");
} else { } else {
@ -117,9 +117,8 @@ class DioService extends Get.GetxService {
.getString(CacheKeys.deviceModel, isWithUser: false); // .getString(CacheKeys.deviceModel, isWithUser: false); //
} }
if (GloablConfig.DEBUG && (options.data is! FormData)) { if (GloablConfig.DEBUG && (options.data is! FormData)) {
LoggerUtil().info('[Service-dio] url: ${options.path}' + LoggerUtil().info(
', params: ${jsonEncode(options.queryParameters)}' + '[Service-dio] url: ${options.path}, params: ${jsonEncode(options.queryParameters)}, body: ${jsonEncode(options.data)}, Header:${jsonEncode(options.headers)}');
', body: ${jsonEncode(options.data)}, Header:${jsonEncode(options.headers)}');
} }
handler.next(options); handler.next(options);

View File

@ -1,6 +1,6 @@
import 'dart:convert'; import 'dart:convert';
import 'package:dio/dio.dart' as Dio; import 'package:dio/dio.dart' as dio_package;
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:sk_base_mobile/apis/index.dart'; import 'package:sk_base_mobile/apis/index.dart';
import 'package:sk_base_mobile/store/dict.store.dart'; import 'package:sk_base_mobile/store/dict.store.dart';
@ -31,7 +31,7 @@ class AuthStore extends GetxService {
} }
} catch (e) { } catch (e) {
LoggerUtil().info( LoggerUtil().info(
'[Store-Auth]Init failed, please try again.${e}', '[Store-Auth]Init failed, please try again.$e',
); );
} }
return this; return this;
@ -49,7 +49,6 @@ class AuthStore extends GetxService {
await SnackBarUtil().error('Delete account faield. Please try again.'); await SnackBarUtil().error('Delete account faield. Please try again.');
} finally { } finally {
await LoadingUtil.to.dismiss(); await LoadingUtil.to.dismiss();
;
} }
} }
@ -65,7 +64,7 @@ class AuthStore extends GetxService {
Future<void> login( Future<void> login(
{required String username, required String password}) async { {required String username, required String password}) async {
Dio.Response response; dio_package.Response response;
// if (type == LoginEnum.fastLogin && // if (type == LoginEnum.fastLogin &&
// StorageService.to.getString(CacheKeys.deviceUUID, isWithUser: false) == // StorageService.to.getString(CacheKeys.deviceUUID, isWithUser: false) ==
// null) { // null) {

View File

@ -1,5 +1,4 @@
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:get/get_state_manager/get_state_manager.dart';
import 'package:sk_base_mobile/constants/dict_enum.dart'; import 'package:sk_base_mobile/constants/dict_enum.dart';
import 'package:sk_base_mobile/models/dict_item.model.dart'; import 'package:sk_base_mobile/models/dict_item.model.dart';
import 'package:sk_base_mobile/models/dict_type.model.dart'; import 'package:sk_base_mobile/models/dict_type.model.dart';

View File

@ -1,5 +1,5 @@
Map<K, dynamic> toMap<K>(dynamic value, {reserveNull = false}) { Map<K, dynamic> toMap<K>(dynamic value, {reserveNull = false}) {
Map<K, dynamic> map = Map(); Map<K, dynamic> map = {};
if (value == null) return map; if (value == null) return map;

View File

@ -27,13 +27,14 @@ Function(T) debouncer<T>(Function(T text)? func, {int? delayTime}) {
Duration delay = Duration(milliseconds: delayTime ?? 1500); Duration delay = Duration(milliseconds: delayTime ?? 1500);
Timer? timer; Timer? timer;
Function(T) target = (T value) { target(T value) {
if (timer?.isActive ?? false) { if (timer?.isActive ?? false) {
timer?.cancel(); timer?.cancel();
} }
timer = Timer(delay, () { timer = Timer(delay, () {
if (func != null) func.call(value); if (func != null) func.call(value);
}); });
}; }
return target; return target;
} }

View File

@ -25,8 +25,10 @@ class LoadingUtil extends GetxService {
_loadingOverlay = OverlayEntry( _loadingOverlay = OverlayEntry(
builder: (BuildContext context) { builder: (BuildContext context) {
return WillPopScope( return PopScope(
onWillPop: () async => false, onPopInvoked: (_) {
hideLoading();
},
child: Stack( child: Stack(
children: <Widget>[ children: <Widget>[
ModalBarrier(dismissible: false, color: AppTheme.barrierColor), ModalBarrier(dismissible: false, color: AppTheme.barrierColor),

View File

@ -1,6 +1,6 @@
import 'dart:io'; import 'dart:io';
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:dio/dio.dart' as Dio; import 'package:dio/dio.dart' as dio_package;
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:image_gallery_saver/image_gallery_saver.dart'; import 'package:image_gallery_saver/image_gallery_saver.dart';
import 'package:sk_base_mobile/apis/index.dart'; import 'package:sk_base_mobile/apis/index.dart';
@ -45,7 +45,7 @@ class MediaUtil {
Future<UploadResultModel?> uploadImg(File imgfile, Future<UploadResultModel?> uploadImg(File imgfile,
{int? bussinessRecordId, String? bussinessModule}) async { {int? bussinessRecordId, String? bussinessModule}) async {
Dio.Response response = await Api.uploadImg(imgfile); dio_package.Response response = await Api.uploadImg(imgfile);
if (response.data != null && response.data['filename'] != null) { if (response.data != null && response.data['filename'] != null) {
return UploadResultModel.fromJson(response.data["filename"]); return UploadResultModel.fromJson(response.data["filename"]);
} }

View File

@ -1,6 +1,5 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart'; import 'package:sk_base_mobile/util/screen_adaper_util.dart';
import 'package:sk_base_mobile/widgets/core/zt_bottomsheet_picker.dart'; import 'package:sk_base_mobile/widgets/core/zt_bottomsheet_picker.dart';
@ -29,7 +28,7 @@ class ModalUtil {
TextButton( TextButton(
child: Text( child: Text(
button, button,
style: TextStyle(color: Colors.orange), style: const TextStyle(color: Colors.orange),
), ),
onPressed: () { onPressed: () {
onConfirm(); onConfirm();

View File

@ -1,5 +1,3 @@
import 'dart:io';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';

View File

@ -42,7 +42,7 @@ class ScreenAdaper {
/// Text /// Text
static overflowByChar(String? text) { static overflowByChar(String? text) {
return '${text ?? ''}'.replaceAll('', '\u200B'); return (text ?? '').replaceAll('', '\u200B');
} }
static isLandspace() { static isLandspace() {

View File

@ -53,9 +53,10 @@ class SnackBarUtil {
snackPosition: SnackPosition.TOP, snackPosition: SnackPosition.TOP,
backgroundColor: AppTheme.snackbarSuccessBackgroudColor, backgroundColor: AppTheme.snackbarSuccessBackgroudColor,
borderRadius: 15, borderRadius: 15,
margin: EdgeInsets.symmetric(horizontal: 10, vertical: 0), margin: EdgeInsets.symmetric(
horizontal: ScreenAdaper.height(15), vertical: 0),
overlayColor: Colors.white, overlayColor: Colors.white,
duration: Duration(seconds: 2), duration: const Duration(seconds: 2),
dismissDirection: DismissDirection.horizontal, dismissDirection: DismissDirection.horizontal,
forwardAnimationCurve: Curves.fastLinearToSlowEaseIn, forwardAnimationCurve: Curves.fastLinearToSlowEaseIn,
reverseAnimationCurve: Curves.linearToEaseOut); reverseAnimationCurve: Curves.linearToEaseOut);
@ -71,8 +72,9 @@ class SnackBarUtil {
message: title, message: title,
snackPosition: SnackPosition.TOP, snackPosition: SnackPosition.TOP,
borderRadius: 15, borderRadius: 15,
margin: EdgeInsets.symmetric(horizontal: 10, vertical: 0), margin: EdgeInsets.symmetric(
duration: Duration(seconds: 2), horizontal: ScreenAdaper.height(15), vertical: 0),
duration: const Duration(seconds: 2),
dismissDirection: DismissDirection.horizontal, dismissDirection: DismissDirection.horizontal,
forwardAnimationCurve: Curves.fastLinearToSlowEaseIn, forwardAnimationCurve: Curves.fastLinearToSlowEaseIn,
reverseAnimationCurve: Curves.linearToEaseOut); reverseAnimationCurve: Curves.linearToEaseOut);
@ -89,9 +91,10 @@ class SnackBarUtil {
snackPosition: SnackPosition.TOP, snackPosition: SnackPosition.TOP,
backgroundColor: AppTheme.snackbarWarningBackgroudColor, backgroundColor: AppTheme.snackbarWarningBackgroudColor,
borderRadius: 15, borderRadius: 15,
margin: EdgeInsets.symmetric(horizontal: 10, vertical: 0), margin: EdgeInsets.symmetric(
horizontal: ScreenAdaper.height(15), vertical: 0),
overlayColor: Colors.white, overlayColor: Colors.white,
duration: Duration(seconds: 2), duration: const Duration(seconds: 2),
dismissDirection: DismissDirection.horizontal, dismissDirection: DismissDirection.horizontal,
forwardAnimationCurve: Curves.fastLinearToSlowEaseIn, forwardAnimationCurve: Curves.fastLinearToSlowEaseIn,
reverseAnimationCurve: Curves.linearToEaseOut); reverseAnimationCurve: Curves.linearToEaseOut);

View File

@ -8,18 +8,15 @@ import 'dart:async';
Function throttler( Function throttler(
Future Function(String text) func, Future Function(String text) func,
) { ) {
if (func == null) {
return func;
}
bool enable = true; bool enable = true;
Function target = (String value) { target(String value) {
if (enable == true) { if (enable == true) {
enable = false; enable = false;
func(value).then((_) { func(value).then((_) {
enable = true; enable = true;
}); });
} }
}; }
return target; return target;
} }

View File

@ -3,9 +3,9 @@ class ValidatorUtil {
if (value == null || value == '') { if (value == null || value == '') {
return 'Email is required'; return 'Email is required';
} }
final String regexEmail = const String regexEmail =
"^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*\$"; "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*\$";
if (value == null || value.isEmpty) return null; if (value == null || value.isEmpty) return null;
return new RegExp(regexEmail).hasMatch(value) ? null : 'Email format error'; return RegExp(regexEmail).hasMatch(value) ? null : 'Email format error';
} }
} }

View File

@ -150,7 +150,7 @@ class BackColors extends StatelessWidget {
filter: ImageFilter.blur( filter: ImageFilter.blur(
sigmaY: ScreenAdaper.height(30), sigmaY: ScreenAdaper.height(30),
sigmaX: ScreenAdaper.width(30)), sigmaX: ScreenAdaper.width(30)),
child: SizedBox(), child: const SizedBox(),
)), )),
], ],
), ),

View File

@ -3,7 +3,6 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:sk_base_mobile/app_theme.dart'; import 'package:sk_base_mobile/app_theme.dart';
import 'package:sk_base_mobile/screens/landing/landing_controller.dart'; import 'package:sk_base_mobile/screens/landing/landing_controller.dart';
import 'package:sk_base_mobile/services/app_info.service.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart'; import 'package:sk_base_mobile/util/screen_adaper_util.dart';
import 'package:auto_size_text/auto_size_text.dart'; import 'package:auto_size_text/auto_size_text.dart';
@ -16,13 +15,14 @@ class BottomNavBar extends StatelessWidget {
return Obx( return Obx(
() => AnimatedBottomNavigationBar.builder( () => AnimatedBottomNavigationBar.builder(
itemCount: controller.pages.length, itemCount: controller.pages.length,
elevation: ScreenAdaper.height(30), elevation: ScreenAdaper.height(20),
height: ScreenAdaper.height(100), height: ScreenAdaper.height(100),
activeIndex: controller.currentIndex.value, activeIndex: controller.currentIndex.value,
gapLocation: GapLocation.center, gapLocation: GapLocation.center,
notchSmoothness: NotchSmoothness.verySmoothEdge, notchMargin: ScreenAdaper.height(10),
leftCornerRadius: ScreenAdaper.sp(25), notchSmoothness: NotchSmoothness.smoothEdge,
rightCornerRadius: ScreenAdaper.sp(25), leftCornerRadius: ScreenAdaper.sp(40),
rightCornerRadius: ScreenAdaper.sp(40),
onTap: (index) { onTap: (index) {
controller.currentIndex.value = index; controller.currentIndex.value = index;
}, },

View File

@ -1,7 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:get/get_core/src/get_main.dart';
import 'package:sk_base_mobile/util/date.util.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart'; import 'package:sk_base_mobile/util/screen_adaper_util.dart';
class ZtDatePicker extends StatelessWidget { class ZtDatePicker extends StatelessWidget {

View File

@ -1,101 +0,0 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:sk_base_mobile/util/logger_util.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart';
class ZtBaseDatePicker extends StatelessWidget {
final Function? onDateTimeChanged;
final yearController =
FixedExtentScrollController(initialItem: DateTime.now().year - 2000);
final monthController =
FixedExtentScrollController(initialItem: DateTime.now().month - 1);
final dayController =
FixedExtentScrollController(initialItem: DateTime.now().day - 1);
ZtBaseDatePicker({super.key, this.onDateTimeChanged});
@override
Widget build(BuildContext context) {
return Container(
height: ScreenAdaper.height(250),
color: Colors.white,
child: Column(
children: [
Row(
children: [
TextButton(
onPressed: () {
Get.back();
},
child: Text(
'取消',
style: TextStyle(fontSize: ScreenAdaper.height(25)),
)),
const Spacer(),
TextButton(
onPressed: () {
Get.back();
final year = 2000 + yearController.selectedItem;
String month = '${monthController.selectedItem + 1}';
if (int.parse(month) < 10) {
month = '0$month';
}
final day = dayController.selectedItem + 1;
if (onDateTimeChanged != null) {
onDateTimeChanged!('$year-$month-$day');
}
LoggerUtil().info('$year-$month-$day');
},
child: Text(
'确定',
style: TextStyle(fontSize: ScreenAdaper.height(25)),
))
],
),
Expanded(
child: Row(
children: <Widget>[
Expanded(
child: CupertinoPicker(
scrollController: yearController,
itemExtent: ScreenAdaper.height(60),
onSelectedItemChanged: (int index) {
//
},
children: List<Widget>.generate(DateTime.now().year - 1999,
(int index) {
return Center(child: Text('${2000 + index}'));
}),
),
),
Expanded(
child: CupertinoPicker(
scrollController: monthController,
itemExtent: ScreenAdaper.height(60),
onSelectedItemChanged: (int index) {
//
},
children: List<Widget>.generate(12, (int index) {
return Center(child: Text('${index + 1}'));
}),
),
),
Expanded(
child: CupertinoPicker(
scrollController: dayController,
itemExtent: ScreenAdaper.height(60),
onSelectedItemChanged: (int index) {
//
},
children: List<Widget>.generate(31, (int index) {
return Center(child: Text('${index + 1}'));
}),
),
),
],
))
],
),
);
}
}

View File

@ -4,6 +4,7 @@ import 'package:get/get.dart';
import 'package:sk_base_mobile/util/logger_util.dart'; import 'package:sk_base_mobile/util/logger_util.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart'; import 'package:sk_base_mobile/util/screen_adaper_util.dart';
// ignore: must_be_immutable
class ZtBaseDatePicker extends StatelessWidget { class ZtBaseDatePicker extends StatelessWidget {
final Function(String)? onDateTimeChanged; final Function(String)? onDateTimeChanged;
late final FixedExtentScrollController yearController; late final FixedExtentScrollController yearController;

View File

@ -6,17 +6,17 @@ import 'package:sk_base_mobile/util/screen_adaper_util.dart';
class ZtBottomSheetPicker extends StatelessWidget { class ZtBottomSheetPicker extends StatelessWidget {
final Function? onChanged; final Function? onChanged;
FixedExtentScrollController firstLevelControlller = final FixedExtentScrollController firstLevelControlller =
FixedExtentScrollController(); FixedExtentScrollController();
FixedExtentScrollController secondLevelController = final FixedExtentScrollController secondLevelController =
FixedExtentScrollController(); FixedExtentScrollController();
FixedExtentScrollController thirdLevelController = final FixedExtentScrollController thirdLevelController =
FixedExtentScrollController(); FixedExtentScrollController();
final List<Widget> firstLevel; final List<Widget> firstLevel;
final List<Widget>? secondLevel; final List<Widget>? secondLevel;
final List<Widget>? thirdLevel; final List<Widget>? thirdLevel;
double? itemHeight; final double? itemHeight;
double? popupHeight; final double? popupHeight;
final String title; final String title;
ZtBottomSheetPicker( ZtBottomSheetPicker(
{super.key, {super.key,

View File

@ -1,9 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:sk_base_mobile/app_theme.dart'; import 'package:sk_base_mobile/app_theme.dart';
import 'package:sk_base_mobile/constants/bg_color.dart';
import 'package:sk_base_mobile/screens/new_inventory_inout/new_inventory_inout_controller.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart'; import 'package:sk_base_mobile/util/screen_adaper_util.dart';
class ZtNumberInput extends StatelessWidget { class ZtNumberInput extends StatelessWidget {

View File

@ -1,6 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:get/get.dart';
import 'package:sk_base_mobile/app_theme.dart'; import 'package:sk_base_mobile/app_theme.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart'; import 'package:sk_base_mobile/util/screen_adaper_util.dart';
@ -82,7 +81,7 @@ class ZtSearchSelect<T> extends StatelessWidget {
fontSize: ScreenAdaper.height(30)), fontSize: ScreenAdaper.height(30)),
), ),
]) ])
: SizedBox())); : const SizedBox()));
}, },
emptyBuilder: (_) => Container( emptyBuilder: (_) => Container(
alignment: Alignment.center, alignment: Alignment.center,

View File

@ -1,8 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:sk_base_mobile/app_theme.dart'; import 'package:sk_base_mobile/app_theme.dart';
import 'package:sk_base_mobile/constants/bg_color.dart';
import 'package:sk_base_mobile/screens/new_inventory_inout/new_inventory_inout_controller.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart'; import 'package:sk_base_mobile/util/screen_adaper_util.dart';
class ZtTextInput extends StatelessWidget { class ZtTextInput extends StatelessWidget {

View File

@ -9,19 +9,19 @@ class FadeInCacheImage extends StatefulWidget {
final double? height; final double? height;
final String? url; final String? url;
final BoxFit? fit; final BoxFit? fit;
bool compress; final bool compress;
bool canFullscreen; final bool canFullscreen;
FadeInCacheImage( const FadeInCacheImage(
{Key? key, {super.key,
this.width, this.width,
this.height, this.height,
this.url, this.url,
this.fit = BoxFit.cover, this.fit = BoxFit.cover,
this.compress = false, this.compress = false,
this.canFullscreen = false}) this.canFullscreen = false});
: super(key: key);
@override @override
// ignore: library_private_types_in_public_api
_FadeInCacheImageState createState() => _FadeInCacheImageState(); _FadeInCacheImageState createState() => _FadeInCacheImageState();
} }

View File

@ -48,7 +48,8 @@ class _ImagePreivewState extends State<ImagePreivew> {
scrollPhysics: const BouncingScrollPhysics(), scrollPhysics: const BouncingScrollPhysics(),
builder: _buildItem, builder: _buildItem,
itemCount: widget.galleryItems.length, itemCount: widget.galleryItems.length,
loadingBuilder: (_, _1) => const LoadingIndicator(common: true), loadingBuilder: (_, chunkEvent) =>
const LoadingIndicator(common: true),
backgroundDecoration: widget.backgroundDecoration, backgroundDecoration: widget.backgroundDecoration,
pageController: widget.pageController, pageController: widget.pageController,
onPageChanged: onPageChanged, onPageChanged: onPageChanged,
@ -75,7 +76,6 @@ class _ImagePreivewState extends State<ImagePreivew> {
await MediaUtil().saveImageToPhotoLib( await MediaUtil().saveImageToPhotoLib(
imgUrl: imgUrl:
'${GloablConfig.OSS_URL}${widget.galleryItems[currentIndex].path}'); '${GloablConfig.OSS_URL}${widget.galleryItems[currentIndex].path}');
} catch (e) {
} finally { } finally {
LoadingUtil.to.dismiss(); LoadingUtil.to.dismiss();
SnackBarUtil().success('已保存到相册'); SnackBarUtil().success('已保存到相册');
@ -95,7 +95,7 @@ class _ImagePreivewState extends State<ImagePreivew> {
PhotoViewGalleryPageOptions _buildItem(BuildContext context, int index) { PhotoViewGalleryPageOptions _buildItem(BuildContext context, int index) {
final FileModel item = widget.galleryItems[index]; final FileModel item = widget.galleryItems[index];
return PhotoViewGalleryPageOptions( return PhotoViewGalleryPageOptions(
onTapUp: (_, _1, _2) { onTapUp: (_, tapUpDetails, value) {
Get.back(); Get.back();
}, },
imageProvider: Image.network('${GloablConfig.OSS_URL}${item.path}').image, imageProvider: Image.network('${GloablConfig.OSS_URL}${item.path}').image,

View File

@ -1,15 +1,8 @@
import 'dart:io'; import 'dart:io';
import 'package:sk_base_mobile/apis/index.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'package:sk_base_mobile/models/upload_result.model.dart';
import 'package:sk_base_mobile/store/auth.store.dart'; import 'package:sk_base_mobile/store/auth.store.dart';
import 'package:sk_base_mobile/util/media_util.dart';
import 'package:sk_base_mobile/util/photo_picker_util.dart';
import 'package:sk_base_mobile/util/loading_util.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart';
import 'package:sk_base_mobile/util/snack_bar.util.dart';
import 'package:sk_base_mobile/app_theme.dart'; import 'package:sk_base_mobile/app_theme.dart';
import '../util/util.dart'; import '../util/util.dart';

View File

@ -1,12 +1,10 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:loading_animation_widget/loading_animation_widget.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'package:sk_base_mobile/app_theme.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart'; import 'package:sk_base_mobile/util/screen_adaper_util.dart';
import 'package:sk_base_mobile/widgets/loading_indicator.dart'; import 'package:sk_base_mobile/widgets/loading_indicator.dart';
class RefreshFooter extends StatefulWidget { class RefreshFooter extends StatefulWidget {
const RefreshFooter({Key? key}) : super(key: key); const RefreshFooter({super.key});
@override @override
State<RefreshFooter> createState() => _RefreshFooterState(); State<RefreshFooter> createState() => _RefreshFooterState();
@ -19,11 +17,6 @@ class _RefreshFooterState extends State<RefreshFooter>
super.initState(); super.initState();
} }
@override
void dispose() {
super.dispose();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return buildBody(); return buildBody();

View File

@ -1,42 +1,24 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:loading_animation_widget/loading_animation_widget.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'package:sk_base_mobile/app_theme.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart'; import 'package:sk_base_mobile/util/screen_adaper_util.dart';
import 'package:sk_base_mobile/widgets/loading_indicator.dart'; import 'package:sk_base_mobile/widgets/loading_indicator.dart';
class RefreshHeader extends RefreshIndicator { class RefreshHeader extends RefreshIndicator {
RefreshHeader() RefreshHeader({super.key})
: super( : super(
height: ScreenAdaper.height(100), height: ScreenAdaper.height(100),
refreshStyle: RefreshStyle.Follow); refreshStyle: RefreshStyle.Follow);
@override @override
State<StatefulWidget> createState() { State<StatefulWidget> createState() {
// TODO: implement createState
return RefreshHeaderState(); return RefreshHeaderState();
} }
} }
class RefreshHeaderState extends RefreshIndicatorState<RefreshHeader> class RefreshHeaderState extends RefreshIndicatorState<RefreshHeader>
with SingleTickerProviderStateMixin { with SingleTickerProviderStateMixin {
@override
void initState() {
super.initState();
}
@override
void onModeChange(RefreshStatus? mode) {
super.onModeChange(mode);
}
@override @override
Future<void> endRefresh() async {} Future<void> endRefresh() async {}
@override
void resetValue() {
super.resetValue();
}
@override @override
Widget buildContent(BuildContext context, RefreshStatus mode) { Widget buildContent(BuildContext context, RefreshStatus mode) {
TextStyle style = TextStyle(fontSize: ScreenAdaper.height(18)); TextStyle style = TextStyle(fontSize: ScreenAdaper.height(18));
@ -59,9 +41,4 @@ class RefreshHeaderState extends RefreshIndicatorState<RefreshHeader>
child: Center(child: body), child: Center(child: body),
); );
} }
@override
void dispose() {
super.dispose();
}
} }

View File

@ -3,7 +3,7 @@ import 'package:flutter/cupertino.dart';
class WantKeepAlive extends StatefulWidget { class WantKeepAlive extends StatefulWidget {
final Widget child; final Widget child;
WantKeepAlive({required this.child}); const WantKeepAlive({super.key, required this.child});
@override @override
State<StatefulWidget> createState() { State<StatefulWidget> createState() {

View File

@ -335,7 +335,7 @@ packages:
source: hosted source: hosted
version: "3.0.2" version: "3.0.2"
flutter_native_splash: flutter_native_splash:
dependency: "direct dev" dependency: "direct main"
description: description:
name: flutter_native_splash name: flutter_native_splash
sha256: "45e2c0986d749c070509e03d6c7ad6c8bd1f7b1dad7d11dd8750a5e4fe3e2c0b" sha256: "45e2c0986d749c070509e03d6c7ad6c8bd1f7b1dad7d11dd8750a5e4fe3e2c0b"

View File

@ -60,7 +60,7 @@ dependencies:
photo_view: ^0.14.0 photo_view: ^0.14.0
image_gallery_saver: ^2.0.3 image_gallery_saver: ^2.0.3
flutter_staggered_grid_view: ^0.7.0 flutter_staggered_grid_view: ^0.7.0
flutter_native_splash: ^2.3.11
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
sdk: flutter sdk: flutter
@ -72,7 +72,7 @@ dev_dependencies:
# rules and activating additional ones. # rules and activating additional ones.
flutter_lints: ^3.0.2 flutter_lints: ^3.0.2
flutter_launcher_icons: ^0.13.1 flutter_launcher_icons: ^0.13.1
flutter_native_splash: ^2.3.11
# For information on the generic Dart part of this file, see the # For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec # following page: https://dart.dev/tools/pub/pubspec

View File

@ -7,13 +7,12 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:sk_base_mobile/index.dart';
import 'package:sk_base_mobile/main.dart';
void main() { void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async { testWidgets('Counter increments smoke test', (WidgetTester tester) async {
// Build our app and trigger a frame. // Build our app and trigger a frame.
await tester.pumpWidget(const MyApp()); await tester.pumpWidget(const IndexPage());
// Verify that our counter starts at 0. // Verify that our counter starts at 0.
expect(find.text('0'), findsOneWidget); expect(find.text('0'), findsOneWidget);