fix: all code issue
This commit is contained in:
parent
89e7a575a8
commit
d78a2598ac
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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';
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
@ -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/";
|
||||||
|
|
|
@ -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';
|
||||||
|
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
//ignore_for_file: constant_identifier_names
|
||||||
enum BackActionEnum {
|
enum BackActionEnum {
|
||||||
refresh,
|
refresh,
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -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';
|
|
@ -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!));
|
||||||
})));
|
})));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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({
|
||||||
|
|
|
@ -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(),
|
||||||
};
|
};
|
||||||
|
|
|
@ -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(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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(),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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]),
|
))
|
||||||
)))
|
|
||||||
]),
|
]),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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,
|
|
||||||
),
|
|
||||||
)),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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;
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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: '');
|
||||||
|
|
|
@ -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';
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -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 =
|
||||||
|
|
|
@ -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),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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)
|
||||||
],
|
],
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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"]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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(),
|
||||||
)),
|
)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
@ -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;
|
||||||
},
|
},
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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}日'));
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
))
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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;
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue