Commit 7e849e9f authored by 张宏's avatar 张宏

智能酒店相关页面

parent 3a517340
......@@ -46,4 +46,7 @@ app.*.map.json
/android/app/release
# FVM Version Cache
.fvm/
\ No newline at end of file
.fvm/
# ai相关
ai_work/
\ No newline at end of file
{
"dart.flutterSdkPath": ".fvm/versions/3.38.10"
"dart.flutterSdkPath": ".fvm/versions/3.41.9"
}
\ No newline at end of file
buildscript {
ext.kotlin_version = '1.9.22'
ext.kotlin_version = '2.2.20'
repositories {
google()
maven { url uri('https://maven.aliyun.com/repository/google') }
......
......@@ -3,5 +3,5 @@ distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
# distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.10.2-bin.zip
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.13-bin.zip
import 'package:auto_route/auto_route.dart';
import 'package:smart_hotel_app/routes/app_router.gr.dart';
import 'package:smart_hotel_app/views/report/rule/rule_management_view.dart';
import 'package:smart_hotel_app/views/report/device/device_list_view.dart';
@AutoRouterConfig(replaceInRouteName: 'View,Route')
class AppRouter extends $AppRouter {
......@@ -29,5 +31,8 @@ class AppRouter extends $AppRouter {
AutoRoute(page: InspectionDetailRoute.page),
AutoRoute(page: InspectionDeviceRoute.page),
AutoRoute(page: InspectionHistoryRoute.page),
AutoRoute(page: AbnormalListRoute.page),
AutoRoute(page: ReportRuleManagementRoute.page),
AutoRoute(page: ReportDeviceListRoute.page),
];
}
......@@ -8,66 +8,79 @@
// coverage:ignore-file
// ignore_for_file: no_leading_underscores_for_library_prefixes
import 'package:auto_route/auto_route.dart' as _i17;
import 'package:flutter/material.dart' as _i18;
import 'package:auto_route/auto_route.dart' as _i20;
import 'package:flutter/material.dart' as _i21;
import 'package:smart_hotel_app/views/home/abnormal/abnormal_detail_view.dart'
as _i1;
import 'package:smart_hotel_app/views/home/abnormal_list/index_view.dart'
as _i2;
import 'package:smart_hotel_app/views/home/device/device_detail_view.dart'
as _i3;
import 'package:smart_hotel_app/views/home/index/index_view.dart' as _i4;
as _i4;
import 'package:smart_hotel_app/views/home/index/index_view.dart' as _i5;
import 'package:smart_hotel_app/views/home/inspection/inspection_detail_view.dart'
as _i5;
import 'package:smart_hotel_app/views/home/inspection_device/inspection_device_view.dart'
as _i6;
import 'package:smart_hotel_app/views/home/inspection_history/inspection_history_view.dart'
import 'package:smart_hotel_app/views/home/inspection_device/inspection_device_view.dart'
as _i7;
import 'package:smart_hotel_app/views/layout/default_view.dart' as _i2;
import 'package:smart_hotel_app/views/login/login_view.dart' as _i8;
import 'package:smart_hotel_app/views/profile/index/index_view.dart' as _i9;
import 'package:smart_hotel_app/views/home/inspection_history/inspection_history_view.dart'
as _i8;
import 'package:smart_hotel_app/views/layout/default_view.dart' as _i3;
import 'package:smart_hotel_app/views/login/login_view.dart' as _i9;
import 'package:smart_hotel_app/views/profile/index/index_view.dart' as _i10;
import 'package:smart_hotel_app/views/report/device/device_list_view.dart'
as _i11;
import 'package:smart_hotel_app/views/report/energy/energy_detail_view.dart'
as _i10;
import 'package:smart_hotel_app/views/report/index/index_view.dart' as _i11;
import 'package:smart_hotel_app/views/report/room/room_detail.dart' as _i12;
import 'package:smart_hotel_app/views/search/index_view.dart' as _i13;
import 'package:smart_hotel_app/views/service/device/device_detail_view.dart'
as _i12;
import 'package:smart_hotel_app/views/report/index/index_view.dart' as _i13;
import 'package:smart_hotel_app/views/report/room/room_detail_view.dart'
as _i14;
import 'package:smart_hotel_app/views/service/index/index_view.dart' as _i15;
import 'package:smart_hotel_app/views/report/rule/rule_management_view.dart'
as _i15;
import 'package:smart_hotel_app/views/search/index_view.dart' as _i16;
import 'package:smart_hotel_app/views/service/device/device_detail_view.dart'
as _i17;
import 'package:smart_hotel_app/views/service/index/index_view.dart' as _i18;
import 'package:smart_hotel_app/views/service/room/room_detail_view.dart'
as _i16;
as _i19;
abstract class $AppRouter extends _i17.RootStackRouter {
abstract class $AppRouter extends _i20.RootStackRouter {
$AppRouter({super.navigatorKey});
@override
final Map<String, _i17.PageFactory> pagesMap = {
final Map<String, _i20.PageFactory> pagesMap = {
AbnormalDetailRoute.name: (routeData) {
return _i17.AutoRoutePage<dynamic>(
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: const _i1.AbnormalDetailView(),
);
},
AbnormalListRoute.name: (routeData) {
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: const _i2.AbnormalListView(),
);
},
DefaultLayoutRoute.name: (routeData) {
return _i17.AutoRoutePage<dynamic>(
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: const _i2.DefaultLayoutView(),
child: const _i3.DefaultLayoutView(),
);
},
DeviceDetailRoute.name: (routeData) {
return _i17.AutoRoutePage<dynamic>(
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: const _i3.DeviceDetailView(),
child: const _i4.DeviceDetailView(),
);
},
HomeRoute.name: (routeData) {
return _i17.AutoRoutePage<dynamic>(
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: const _i4.HomeView(),
child: const _i5.HomeView(),
);
},
InspectionDetailRoute.name: (routeData) {
return _i17.AutoRoutePage<dynamic>(
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: const _i5.InspectionDetailView(),
child: const _i6.InspectionDetailView(),
);
},
InspectionDeviceRoute.name: (routeData) {
......@@ -75,9 +88,9 @@ abstract class $AppRouter extends _i17.RootStackRouter {
final args = routeData.argsAs<InspectionDeviceRouteArgs>(
orElse: () => InspectionDeviceRouteArgs(
deviceId: pathParams.getString('deviceId')));
return _i17.AutoRoutePage<dynamic>(
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: _i6.InspectionDeviceView(
child: _i7.InspectionDeviceView(
key: args.key,
deviceId: args.deviceId,
),
......@@ -88,9 +101,9 @@ abstract class $AppRouter extends _i17.RootStackRouter {
final args = routeData.argsAs<InspectionHistoryRouteArgs>(
orElse: () => InspectionHistoryRouteArgs(
deviceId: pathParams.getString('deviceId')));
return _i17.AutoRoutePage<dynamic>(
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: _i7.InspectionHistoryView(
child: _i8.InspectionHistoryView(
key: args.key,
deviceId: args.deviceId,
),
......@@ -99,64 +112,76 @@ abstract class $AppRouter extends _i17.RootStackRouter {
LoginRoute.name: (routeData) {
final args = routeData.argsAs<LoginRouteArgs>(
orElse: () => const LoginRouteArgs());
return _i17.AutoRoutePage<dynamic>(
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: _i8.LoginView(key: args.key),
child: _i9.LoginView(key: args.key),
);
},
ProfileRoute.name: (routeData) {
return _i17.AutoRoutePage<dynamic>(
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: const _i10.ProfileView(),
);
},
ReportDeviceListRoute.name: (routeData) {
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: const _i9.ProfileView(),
child: const _i11.ReportDeviceListView(),
);
},
ReportEnergyDetailRoute.name: (routeData) {
return _i17.AutoRoutePage<dynamic>(
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: const _i10.ReportEnergyDetailView(),
child: const _i12.ReportEnergyDetailView(),
);
},
ReportIndexRoute.name: (routeData) {
return _i17.AutoRoutePage<dynamic>(
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: const _i11.ReportIndexView(),
child: const _i13.ReportIndexView(),
);
},
ReportRoomDetailRoute.name: (routeData) {
return _i17.AutoRoutePage<dynamic>(
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: const _i14.ReportRoomDetailView(),
);
},
ReportRuleManagementRoute.name: (routeData) {
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: const _i12.ReportRoomDetailView(),
child: const _i15.ReportRuleManagementView(),
);
},
SearchRoute.name: (routeData) {
final args = routeData.argsAs<SearchRouteArgs>(
orElse: () => const SearchRouteArgs());
return _i17.AutoRoutePage<dynamic>(
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: _i13.SearchView(
child: _i16.SearchView(
key: args.key,
searchKey: args.searchKey,
),
);
},
ServiceDeviceDetailRoute.name: (routeData) {
return _i17.AutoRoutePage<dynamic>(
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: const _i14.ServiceDeviceDetailView(),
child: const _i17.ServiceDeviceDetailView(),
);
},
ServiceIndexRoute.name: (routeData) {
return _i17.AutoRoutePage<dynamic>(
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: const _i15.ServiceIndexView(),
child: const _i18.ServiceIndexView(),
);
},
ServiceRoomDetailRoute.name: (routeData) {
final args = routeData.argsAs<ServiceRoomDetailRouteArgs>(
orElse: () => const ServiceRoomDetailRouteArgs());
return _i17.AutoRoutePage<dynamic>(
return _i20.AutoRoutePage<dynamic>(
routeData: routeData,
child: _i16.ServiceRoomDetailView(
child: _i19.ServiceRoomDetailView(
key: args.key,
roomNumber: args.roomNumber,
),
......@@ -167,8 +192,8 @@ abstract class $AppRouter extends _i17.RootStackRouter {
/// generated route for
/// [_i1.AbnormalDetailView]
class AbnormalDetailRoute extends _i17.PageRouteInfo<void> {
const AbnormalDetailRoute({List<_i17.PageRouteInfo>? children})
class AbnormalDetailRoute extends _i20.PageRouteInfo<void> {
const AbnormalDetailRoute({List<_i20.PageRouteInfo>? children})
: super(
AbnormalDetailRoute.name,
initialChildren: children,
......@@ -176,13 +201,27 @@ class AbnormalDetailRoute extends _i17.PageRouteInfo<void> {
static const String name = 'AbnormalDetailRoute';
static const _i17.PageInfo<void> page = _i17.PageInfo<void>(name);
static const _i20.PageInfo<void> page = _i20.PageInfo<void>(name);
}
/// generated route for
/// [_i2.DefaultLayoutView]
class DefaultLayoutRoute extends _i17.PageRouteInfo<void> {
const DefaultLayoutRoute({List<_i17.PageRouteInfo>? children})
/// [_i2.AbnormalListView]
class AbnormalListRoute extends _i20.PageRouteInfo<void> {
const AbnormalListRoute({List<_i20.PageRouteInfo>? children})
: super(
AbnormalListRoute.name,
initialChildren: children,
);
static const String name = 'AbnormalListRoute';
static const _i20.PageInfo<void> page = _i20.PageInfo<void>(name);
}
/// generated route for
/// [_i3.DefaultLayoutView]
class DefaultLayoutRoute extends _i20.PageRouteInfo<void> {
const DefaultLayoutRoute({List<_i20.PageRouteInfo>? children})
: super(
DefaultLayoutRoute.name,
initialChildren: children,
......@@ -190,13 +229,13 @@ class DefaultLayoutRoute extends _i17.PageRouteInfo<void> {
static const String name = 'DefaultLayoutRoute';
static const _i17.PageInfo<void> page = _i17.PageInfo<void>(name);
static const _i20.PageInfo<void> page = _i20.PageInfo<void>(name);
}
/// generated route for
/// [_i3.DeviceDetailView]
class DeviceDetailRoute extends _i17.PageRouteInfo<void> {
const DeviceDetailRoute({List<_i17.PageRouteInfo>? children})
/// [_i4.DeviceDetailView]
class DeviceDetailRoute extends _i20.PageRouteInfo<void> {
const DeviceDetailRoute({List<_i20.PageRouteInfo>? children})
: super(
DeviceDetailRoute.name,
initialChildren: children,
......@@ -204,13 +243,13 @@ class DeviceDetailRoute extends _i17.PageRouteInfo<void> {
static const String name = 'DeviceDetailRoute';
static const _i17.PageInfo<void> page = _i17.PageInfo<void>(name);
static const _i20.PageInfo<void> page = _i20.PageInfo<void>(name);
}
/// generated route for
/// [_i4.HomeView]
class HomeRoute extends _i17.PageRouteInfo<void> {
const HomeRoute({List<_i17.PageRouteInfo>? children})
/// [_i5.HomeView]
class HomeRoute extends _i20.PageRouteInfo<void> {
const HomeRoute({List<_i20.PageRouteInfo>? children})
: super(
HomeRoute.name,
initialChildren: children,
......@@ -218,13 +257,13 @@ class HomeRoute extends _i17.PageRouteInfo<void> {
static const String name = 'HomeRoute';
static const _i17.PageInfo<void> page = _i17.PageInfo<void>(name);
static const _i20.PageInfo<void> page = _i20.PageInfo<void>(name);
}
/// generated route for
/// [_i5.InspectionDetailView]
class InspectionDetailRoute extends _i17.PageRouteInfo<void> {
const InspectionDetailRoute({List<_i17.PageRouteInfo>? children})
/// [_i6.InspectionDetailView]
class InspectionDetailRoute extends _i20.PageRouteInfo<void> {
const InspectionDetailRoute({List<_i20.PageRouteInfo>? children})
: super(
InspectionDetailRoute.name,
initialChildren: children,
......@@ -232,17 +271,17 @@ class InspectionDetailRoute extends _i17.PageRouteInfo<void> {
static const String name = 'InspectionDetailRoute';
static const _i17.PageInfo<void> page = _i17.PageInfo<void>(name);
static const _i20.PageInfo<void> page = _i20.PageInfo<void>(name);
}
/// generated route for
/// [_i6.InspectionDeviceView]
/// [_i7.InspectionDeviceView]
class InspectionDeviceRoute
extends _i17.PageRouteInfo<InspectionDeviceRouteArgs> {
extends _i20.PageRouteInfo<InspectionDeviceRouteArgs> {
InspectionDeviceRoute({
_i18.Key? key,
_i21.Key? key,
required String deviceId,
List<_i17.PageRouteInfo>? children,
List<_i20.PageRouteInfo>? children,
}) : super(
InspectionDeviceRoute.name,
args: InspectionDeviceRouteArgs(
......@@ -255,8 +294,8 @@ class InspectionDeviceRoute
static const String name = 'InspectionDeviceRoute';
static const _i17.PageInfo<InspectionDeviceRouteArgs> page =
_i17.PageInfo<InspectionDeviceRouteArgs>(name);
static const _i20.PageInfo<InspectionDeviceRouteArgs> page =
_i20.PageInfo<InspectionDeviceRouteArgs>(name);
}
class InspectionDeviceRouteArgs {
......@@ -265,7 +304,7 @@ class InspectionDeviceRouteArgs {
required this.deviceId,
});
final _i18.Key? key;
final _i21.Key? key;
final String deviceId;
......@@ -276,13 +315,13 @@ class InspectionDeviceRouteArgs {
}
/// generated route for
/// [_i7.InspectionHistoryView]
/// [_i8.InspectionHistoryView]
class InspectionHistoryRoute
extends _i17.PageRouteInfo<InspectionHistoryRouteArgs> {
extends _i20.PageRouteInfo<InspectionHistoryRouteArgs> {
InspectionHistoryRoute({
_i18.Key? key,
_i21.Key? key,
required String deviceId,
List<_i17.PageRouteInfo>? children,
List<_i20.PageRouteInfo>? children,
}) : super(
InspectionHistoryRoute.name,
args: InspectionHistoryRouteArgs(
......@@ -295,8 +334,8 @@ class InspectionHistoryRoute
static const String name = 'InspectionHistoryRoute';
static const _i17.PageInfo<InspectionHistoryRouteArgs> page =
_i17.PageInfo<InspectionHistoryRouteArgs>(name);
static const _i20.PageInfo<InspectionHistoryRouteArgs> page =
_i20.PageInfo<InspectionHistoryRouteArgs>(name);
}
class InspectionHistoryRouteArgs {
......@@ -305,7 +344,7 @@ class InspectionHistoryRouteArgs {
required this.deviceId,
});
final _i18.Key? key;
final _i21.Key? key;
final String deviceId;
......@@ -316,11 +355,11 @@ class InspectionHistoryRouteArgs {
}
/// generated route for
/// [_i8.LoginView]
class LoginRoute extends _i17.PageRouteInfo<LoginRouteArgs> {
/// [_i9.LoginView]
class LoginRoute extends _i20.PageRouteInfo<LoginRouteArgs> {
LoginRoute({
_i18.Key? key,
List<_i17.PageRouteInfo>? children,
_i21.Key? key,
List<_i20.PageRouteInfo>? children,
}) : super(
LoginRoute.name,
args: LoginRouteArgs(key: key),
......@@ -329,14 +368,14 @@ class LoginRoute extends _i17.PageRouteInfo<LoginRouteArgs> {
static const String name = 'LoginRoute';
static const _i17.PageInfo<LoginRouteArgs> page =
_i17.PageInfo<LoginRouteArgs>(name);
static const _i20.PageInfo<LoginRouteArgs> page =
_i20.PageInfo<LoginRouteArgs>(name);
}
class LoginRouteArgs {
const LoginRouteArgs({this.key});
final _i18.Key? key;
final _i21.Key? key;
@override
String toString() {
......@@ -345,9 +384,9 @@ class LoginRouteArgs {
}
/// generated route for
/// [_i9.ProfileView]
class ProfileRoute extends _i17.PageRouteInfo<void> {
const ProfileRoute({List<_i17.PageRouteInfo>? children})
/// [_i10.ProfileView]
class ProfileRoute extends _i20.PageRouteInfo<void> {
const ProfileRoute({List<_i20.PageRouteInfo>? children})
: super(
ProfileRoute.name,
initialChildren: children,
......@@ -355,13 +394,27 @@ class ProfileRoute extends _i17.PageRouteInfo<void> {
static const String name = 'ProfileRoute';
static const _i17.PageInfo<void> page = _i17.PageInfo<void>(name);
static const _i20.PageInfo<void> page = _i20.PageInfo<void>(name);
}
/// generated route for
/// [_i10.ReportEnergyDetailView]
class ReportEnergyDetailRoute extends _i17.PageRouteInfo<void> {
const ReportEnergyDetailRoute({List<_i17.PageRouteInfo>? children})
/// [_i11.ReportDeviceListView]
class ReportDeviceListRoute extends _i20.PageRouteInfo<void> {
const ReportDeviceListRoute({List<_i20.PageRouteInfo>? children})
: super(
ReportDeviceListRoute.name,
initialChildren: children,
);
static const String name = 'ReportDeviceListRoute';
static const _i20.PageInfo<void> page = _i20.PageInfo<void>(name);
}
/// generated route for
/// [_i12.ReportEnergyDetailView]
class ReportEnergyDetailRoute extends _i20.PageRouteInfo<void> {
const ReportEnergyDetailRoute({List<_i20.PageRouteInfo>? children})
: super(
ReportEnergyDetailRoute.name,
initialChildren: children,
......@@ -369,13 +422,13 @@ class ReportEnergyDetailRoute extends _i17.PageRouteInfo<void> {
static const String name = 'ReportEnergyDetailRoute';
static const _i17.PageInfo<void> page = _i17.PageInfo<void>(name);
static const _i20.PageInfo<void> page = _i20.PageInfo<void>(name);
}
/// generated route for
/// [_i11.ReportIndexView]
class ReportIndexRoute extends _i17.PageRouteInfo<void> {
const ReportIndexRoute({List<_i17.PageRouteInfo>? children})
/// [_i13.ReportIndexView]
class ReportIndexRoute extends _i20.PageRouteInfo<void> {
const ReportIndexRoute({List<_i20.PageRouteInfo>? children})
: super(
ReportIndexRoute.name,
initialChildren: children,
......@@ -383,13 +436,13 @@ class ReportIndexRoute extends _i17.PageRouteInfo<void> {
static const String name = 'ReportIndexRoute';
static const _i17.PageInfo<void> page = _i17.PageInfo<void>(name);
static const _i20.PageInfo<void> page = _i20.PageInfo<void>(name);
}
/// generated route for
/// [_i12.ReportRoomDetailView]
class ReportRoomDetailRoute extends _i17.PageRouteInfo<void> {
const ReportRoomDetailRoute({List<_i17.PageRouteInfo>? children})
/// [_i14.ReportRoomDetailView]
class ReportRoomDetailRoute extends _i20.PageRouteInfo<void> {
const ReportRoomDetailRoute({List<_i20.PageRouteInfo>? children})
: super(
ReportRoomDetailRoute.name,
initialChildren: children,
......@@ -397,16 +450,30 @@ class ReportRoomDetailRoute extends _i17.PageRouteInfo<void> {
static const String name = 'ReportRoomDetailRoute';
static const _i17.PageInfo<void> page = _i17.PageInfo<void>(name);
static const _i20.PageInfo<void> page = _i20.PageInfo<void>(name);
}
/// generated route for
/// [_i15.ReportRuleManagementView]
class ReportRuleManagementRoute extends _i20.PageRouteInfo<void> {
const ReportRuleManagementRoute({List<_i20.PageRouteInfo>? children})
: super(
ReportRuleManagementRoute.name,
initialChildren: children,
);
static const String name = 'ReportRuleManagementRoute';
static const _i20.PageInfo<void> page = _i20.PageInfo<void>(name);
}
/// generated route for
/// [_i13.SearchView]
class SearchRoute extends _i17.PageRouteInfo<SearchRouteArgs> {
/// [_i16.SearchView]
class SearchRoute extends _i20.PageRouteInfo<SearchRouteArgs> {
SearchRoute({
_i18.Key? key,
_i21.Key? key,
String? searchKey,
List<_i17.PageRouteInfo>? children,
List<_i20.PageRouteInfo>? children,
}) : super(
SearchRoute.name,
args: SearchRouteArgs(
......@@ -418,8 +485,8 @@ class SearchRoute extends _i17.PageRouteInfo<SearchRouteArgs> {
static const String name = 'SearchRoute';
static const _i17.PageInfo<SearchRouteArgs> page =
_i17.PageInfo<SearchRouteArgs>(name);
static const _i20.PageInfo<SearchRouteArgs> page =
_i20.PageInfo<SearchRouteArgs>(name);
}
class SearchRouteArgs {
......@@ -428,7 +495,7 @@ class SearchRouteArgs {
this.searchKey,
});
final _i18.Key? key;
final _i21.Key? key;
final String? searchKey;
......@@ -439,9 +506,9 @@ class SearchRouteArgs {
}
/// generated route for
/// [_i14.ServiceDeviceDetailView]
class ServiceDeviceDetailRoute extends _i17.PageRouteInfo<void> {
const ServiceDeviceDetailRoute({List<_i17.PageRouteInfo>? children})
/// [_i17.ServiceDeviceDetailView]
class ServiceDeviceDetailRoute extends _i20.PageRouteInfo<void> {
const ServiceDeviceDetailRoute({List<_i20.PageRouteInfo>? children})
: super(
ServiceDeviceDetailRoute.name,
initialChildren: children,
......@@ -449,13 +516,13 @@ class ServiceDeviceDetailRoute extends _i17.PageRouteInfo<void> {
static const String name = 'ServiceDeviceDetailRoute';
static const _i17.PageInfo<void> page = _i17.PageInfo<void>(name);
static const _i20.PageInfo<void> page = _i20.PageInfo<void>(name);
}
/// generated route for
/// [_i15.ServiceIndexView]
class ServiceIndexRoute extends _i17.PageRouteInfo<void> {
const ServiceIndexRoute({List<_i17.PageRouteInfo>? children})
/// [_i18.ServiceIndexView]
class ServiceIndexRoute extends _i20.PageRouteInfo<void> {
const ServiceIndexRoute({List<_i20.PageRouteInfo>? children})
: super(
ServiceIndexRoute.name,
initialChildren: children,
......@@ -463,17 +530,17 @@ class ServiceIndexRoute extends _i17.PageRouteInfo<void> {
static const String name = 'ServiceIndexRoute';
static const _i17.PageInfo<void> page = _i17.PageInfo<void>(name);
static const _i20.PageInfo<void> page = _i20.PageInfo<void>(name);
}
/// generated route for
/// [_i16.ServiceRoomDetailView]
/// [_i19.ServiceRoomDetailView]
class ServiceRoomDetailRoute
extends _i17.PageRouteInfo<ServiceRoomDetailRouteArgs> {
extends _i20.PageRouteInfo<ServiceRoomDetailRouteArgs> {
ServiceRoomDetailRoute({
_i18.Key? key,
_i21.Key? key,
String? roomNumber,
List<_i17.PageRouteInfo>? children,
List<_i20.PageRouteInfo>? children,
}) : super(
ServiceRoomDetailRoute.name,
args: ServiceRoomDetailRouteArgs(
......@@ -485,8 +552,8 @@ class ServiceRoomDetailRoute
static const String name = 'ServiceRoomDetailRoute';
static const _i17.PageInfo<ServiceRoomDetailRouteArgs> page =
_i17.PageInfo<ServiceRoomDetailRouteArgs>(name);
static const _i20.PageInfo<ServiceRoomDetailRouteArgs> page =
_i20.PageInfo<ServiceRoomDetailRouteArgs>(name);
}
class ServiceRoomDetailRouteArgs {
......@@ -495,7 +562,7 @@ class ServiceRoomDetailRouteArgs {
this.roomNumber,
});
final _i18.Key? key;
final _i21.Key? key;
final String? roomNumber;
......
......@@ -133,7 +133,7 @@ class EquipmentListBlock extends StatelessWidget {
),
padding: EdgeInsets.symmetric(horizontal: 20.w),
child: Column(
children: equipmentList.take(3).map((item) => _buildEquipmentItem(item)).toList(),
children: equipmentList.take(5).map((item) => _buildEquipmentItem(item)).toList(),
),
),
],
......
......@@ -66,7 +66,7 @@ class FilterPanel extends StatelessWidget {
child: Text(
_getTabLabel(tab),
style: TextStyle(
fontSize: 36.sp,
fontSize: 28.sp,
fontWeight: isSelected ? FontWeight.bold : FontWeight.normal,
color: isSelected
? const Color.fromRGBO(66, 165, 245, 1.0)
......@@ -78,17 +78,17 @@ class FilterPanel extends StatelessWidget {
top: 0,
right: -8.w,
child: Container(
width: 56.w,
height: 56.h,
width: 28.w,
height: 28.h,
decoration: BoxDecoration(
color: _getTabColor(tab),
borderRadius: BorderRadius.circular(28.r),
borderRadius: BorderRadius.circular(12.r),
),
child: Center(
child: Text(
count.toString(),
style: TextStyle(
fontSize: 24.sp,
fontSize: 20.sp,
fontWeight: FontWeight.bold,
color: Colors.white,
),
......@@ -163,13 +163,13 @@ class FilterPanel extends StatelessWidget {
color: isSelected
? const Color.fromRGBO(66, 165, 245, 1.0)
: const Color.fromRGBO(200, 208, 220, 1.0),
width: 2.w,
width: 1.w,
),
),
child: Text(
room,
style: TextStyle(
fontSize: 28.sp,
fontSize: 24.sp,
color: isSelected
? const Color.fromRGBO(66, 165, 245, 1.0)
: const Color.fromRGBO(100, 116, 139, 1.0),
......
......@@ -42,10 +42,10 @@ class InspectionDeviceView extends StatelessWidget {
fontWeight: FontWeight.w200,
),
),
Icon(
Icons.arrow_forward,
color: const Color.fromRGBO(100, 116, 139, 1),
),
// Icon(
// Icons.arrow_forward,
// color: const Color.fromRGBO(100, 116, 139, 1),
// ),
],
),
centerTitle: true,
......@@ -71,7 +71,7 @@ class InspectionDeviceView extends StatelessWidget {
InspectionHistoryCard(
historyList: state.inspectionHistory,
),
SizedBox(height: 20.h),
// SizedBox(height: 20.h),
InspectionItemsCard(
items: state.inspectionItems,
),
......
......@@ -15,9 +15,12 @@ class InspectionHistoryCard extends StatelessWidget {
return Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20.r),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20.r),
topRight: Radius.circular(20.r),
),
),
padding: EdgeInsets.symmetric(horizontal: 20.w, vertical: 16.h),
padding: EdgeInsets.only(left: 20.w, right: 20.w, top: 16.h),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
......
......@@ -15,7 +15,10 @@ class InspectionItemsCard extends StatelessWidget {
return Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20.r),
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(20.r),
bottomRight: Radius.circular(20.r),
),
),
padding: EdgeInsets.symmetric(horizontal: 20.w, vertical: 16.h),
child: Column(
......
......@@ -60,7 +60,7 @@ class _DefaultLayoutViewState extends State<DefaultLayoutView> {
width: 48.w,
height: 48.h,
),
label: "服务",
label: "管理",
),
BottomNavigationBarItem(
icon: Image.asset(
......@@ -73,7 +73,7 @@ class _DefaultLayoutViewState extends State<DefaultLayoutView> {
width: 48.w,
height: 48.h,
),
label: "看板",
label: "能耗",
),
BottomNavigationBarItem(
icon: Image.asset(
......
......@@ -105,7 +105,7 @@ class LoginView extends StatelessWidget {
'智能酒店管理系统',
style: TextStyle(
color: Color(0xFF333333),
fontSize: 36,
fontSize: 24,
fontWeight: FontWeight.bold,
),
),
......@@ -114,7 +114,7 @@ class LoginView extends StatelessWidget {
'Intelligent Hotel Management System',
style: TextStyle(
color: Color(0xFF999999),
fontSize: 24,
fontSize: 14,
),
),
],
......
......@@ -15,7 +15,7 @@ class BtnLogin extends StatelessWidget {
Widget build(BuildContext context) {
return Container(
width: double.infinity,
height: 96.h,
height: 104.h,
decoration: BoxDecoration(
color: Color.fromRGBO(73, 149, 234, 1),
borderRadius: BorderRadius.circular(40.w),
......@@ -40,7 +40,7 @@ class BtnLogin extends StatelessWidget {
"登录",
style: TextStyle(
color: Colors.white,
fontSize: 32.sp,
fontSize: 40.sp,
fontWeight: FontWeight.bold,
),
),
......
......@@ -16,7 +16,7 @@ class ProfileHeaderBlock extends StatelessWidget {
return Container(
width: double.infinity,
color: Colors.white,
padding: EdgeInsets.symmetric(horizontal: 28.w, vertical: 32.h),
padding: EdgeInsets.only(left: 28.w, right: 28.w, top: ScreenUtil().statusBarHeight + 32.h, bottom: 32.h),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
......
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:smart_hotel_app/routes/app_router.gr.dart';
import 'package:smart_hotel_app/views/profile/index/cubit/profile_state.dart';
class ProfileMenuBlock extends StatelessWidget {
......@@ -7,9 +9,15 @@ class ProfileMenuBlock extends StatelessWidget {
const ProfileMenuBlock({super.key, required this.menuList});
Widget _buildMenuItem(MenuItem item) {
Widget _buildMenuItem(BuildContext context, MenuItem item) {
return GestureDetector(
onTap: () => item.onTap?.call(),
onTap: () {
if (item.onTap != null) {
item.onTap!();
} else {
_handleMenuTap(context, item.title);
}
},
child: Container(
width: double.infinity,
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 28.h),
......@@ -38,7 +46,7 @@ class ProfileMenuBlock extends StatelessWidget {
child: Text(
item.title,
style: TextStyle(
fontSize: 30.sp,
fontSize: 28.sp,
fontWeight: FontWeight.w500,
color: const Color.fromRGBO(100, 116, 139, 1.0),
),
......@@ -55,13 +63,23 @@ class ProfileMenuBlock extends StatelessWidget {
);
}
void _handleMenuTap(BuildContext context, String title) {
switch (title) {
case '告警信息':
context.pushRoute(const AbnormalListRoute());
break;
default:
break;
}
}
@override
Widget build(BuildContext context) {
return Container(
width: double.infinity,
child: Column(
children: [
...menuList.map((item) => _buildMenuItem(item)).toList(),
...menuList.map((item) => _buildMenuItem(context, item)).toList(),
],
),
);
......
......@@ -17,12 +17,12 @@ class ReportEnergyDetailView extends StatelessWidget {
return BlocProvider(
create: (_) => EnergyCubit(),
child: Scaffold(
backgroundColor: const Color.fromRGBO(15, 23, 42, 1),
backgroundColor: const Color.fromRGBO(245, 245, 247, 1),
appBar: AppBar(
backgroundColor: const Color.fromRGBO(15, 23, 42, 1),
backgroundColor: Colors.white,
elevation: 0,
leading: IconButton(
icon: const Icon(Icons.arrow_back, color: Colors.white),
icon: const Icon(Icons.arrow_back, color: Colors.black87),
onPressed: () {
context.popRoute();
},
......@@ -30,8 +30,8 @@ class ReportEnergyDetailView extends StatelessWidget {
title: Text(
'能耗分析',
style: TextStyle(
color: Colors.white,
fontSize: 18.sp,
color: Colors.black87,
fontSize: 32.sp,
fontWeight: FontWeight.bold,
),
),
......@@ -42,7 +42,7 @@ class ReportEnergyDetailView extends StatelessWidget {
builder: (context, state) {
return Column(
children: [
SizedBox(height: 10.h),
SizedBox(height: 16.h),
EnergyStatsCardBlock(
todayEnergy: state.todayEnergy,
todayEnergyChange: state.todayEnergyChange,
......@@ -50,9 +50,9 @@ class ReportEnergyDetailView extends StatelessWidget {
monthEnergyChange: state.monthEnergyChange,
monthBill: state.monthBill,
),
SizedBox(height: 20.h),
SizedBox(height: 16.h),
HourlyChartBlock(hourlyData: state.hourlyData),
SizedBox(height: 20.h),
SizedBox(height: 16.h),
ZoneChartBlock(zoneData: state.zoneData),
SizedBox(height: 20.h),
],
......
......@@ -26,9 +26,10 @@ class EnergyStatsCardBlock extends StatelessWidget {
Expanded(
child: _buildCard(
'${todayEnergy.toInt()}',
'今日(kWh)',
'今日(kwh)',
'${todayEnergyChange.toInt()}%',
true,
const Color.fromRGBO(59, 130, 246, 1),
),
),
SizedBox(width: 12.w),
......@@ -38,6 +39,7 @@ class EnergyStatsCardBlock extends StatelessWidget {
'本月(kWh)',
'${monthEnergyChange.toInt()}%',
true,
const Color.fromRGBO(59, 130, 246, 1),
),
),
SizedBox(width: 12.w),
......@@ -47,6 +49,7 @@ class EnergyStatsCardBlock extends StatelessWidget {
'本月电费预估',
null,
null,
const Color.fromRGBO(16, 185, 129, 1),
),
),
],
......@@ -54,56 +57,56 @@ class EnergyStatsCardBlock extends StatelessWidget {
);
}
Widget _buildCard(String value, String label, String? change, bool? isDown) {
Widget _buildCard(String value, String label, String? change, bool? isDown, Color valueColor) {
return Container(
padding: EdgeInsets.symmetric(vertical: 16.h, horizontal: 12.w),
padding: EdgeInsets.symmetric(vertical: 24.h, horizontal: 16.w),
decoration: BoxDecoration(
color: const Color.fromRGBO(30, 41, 59, 1),
borderRadius: BorderRadius.circular(12.r),
color: Colors.white,
borderRadius: BorderRadius.circular(20.r),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
value,
style: TextStyle(
color: Colors.white,
fontSize: 24.sp,
fontWeight: FontWeight.bold,
color: valueColor,
fontSize: 40.sp,
fontWeight: FontWeight.w500,
),
),
SizedBox(height: 4.h),
Text(
label,
style: TextStyle(
color: const Color.fromRGBO(148, 163, 184, 1),
fontSize: 12.sp,
color: Colors.black54,
fontSize: 24.sp,
),
),
SizedBox(height: 4.h),
if (change != null)
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
isDown! ? Icons.arrow_drop_down : Icons.arrow_drop_up,
isDown! ? Icons.arrow_downward : Icons.arrow_upward,
color: isDown
? const Color.fromRGBO(34, 197, 94, 1)
? const Color.fromRGBO(16, 185, 129, 1)
: const Color.fromRGBO(239, 68, 68, 1),
size: 16.sp,
size: 24.sp,
),
Text(
change,
style: TextStyle(
color: isDown
? const Color.fromRGBO(34, 197, 94, 1)
? const Color.fromRGBO(16, 185, 129, 1)
: const Color.fromRGBO(239, 68, 68, 1),
fontSize: 12.sp,
fontSize: 24.sp,
),
),
],
)
else
SizedBox(height: 20.h),
SizedBox(height: 24.h),
],
),
);
......
......@@ -11,10 +11,10 @@ class HourlyChartBlock extends StatelessWidget {
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.symmetric(horizontal: 16.w),
padding: EdgeInsets.all(16.w),
padding: EdgeInsets.all(24.w),
decoration: BoxDecoration(
color: const Color.fromRGBO(30, 41, 59, 1),
borderRadius: BorderRadius.circular(12.r),
color: Colors.white,
borderRadius: BorderRadius.circular(20.r),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
......@@ -22,39 +22,55 @@ class HourlyChartBlock extends StatelessWidget {
Text(
'今日逐时用电',
style: TextStyle(
color: Colors.white,
fontSize: 16.sp,
fontWeight: FontWeight.bold,
color: Colors.black87,
fontSize: 24.sp,
fontWeight: FontWeight.w500,
),
),
SizedBox(height: 16.h),
SizedBox(height: 100.h),
SizedBox(
height: 200.h,
child: BarChart(
BarChartData(
alignment: BarChartAlignment.spaceBetween,
maxY: 200,
alignment: BarChartAlignment.spaceAround,
maxY: 100,
barTouchData: BarTouchData(enabled: false),
titlesData: const FlTitlesData(
titlesData: FlTitlesData(
show: true,
rightTitles: AxisTitles(
rightTitles: const AxisTitles(
sideTitles: SideTitles(showTitles: false),
),
topTitles: AxisTitles(
topTitles: const AxisTitles(
sideTitles: SideTitles(showTitles: false),
),
bottomTitles: AxisTitles(
sideTitles: SideTitles(
showTitles: true,
reservedSize: 20,
reservedSize: 30,
getTitlesWidget: _getBottomTitleWidget,
),
),
leftTitles: AxisTitles(
sideTitles: SideTitles(showTitles: false),
sideTitles: SideTitles(
showTitles: true,
reservedSize: 40,
getTitlesWidget: _getLeftTitleWidget,
),
),
),
borderData: FlBorderData(show: false),
gridData: const FlGridData(show: false),
gridData: FlGridData(
show: true,
drawVerticalLine: false,
horizontalInterval: 20,
getDrawingHorizontalLine: (value) {
return FlLine(
color: const Color.fromRGBO(200, 200, 200, 1),
strokeWidth: 1,
dashArray: [5, 5],
);
},
),
barGroups: _buildBarGroups(),
),
),
......@@ -64,6 +80,57 @@ class HourlyChartBlock extends StatelessWidget {
);
}
Widget _getBottomTitleWidget(double value, TitleMeta meta) {
const style = TextStyle(
color: Colors.black54,
fontSize: 14,
);
String text;
final index = value.toInt();
if (index % 4 == 0) {
if (index == 0) {
text = '00:00';
} else if (index == 24) {
text = '24:00';
} else {
text = '$index:04';
}
} else {
text = '';
}
return SideTitleWidget(
meta: meta,
child: Text(text, style: style),
);
}
Widget _getLeftTitleWidget(double value, TitleMeta meta) {
const style = TextStyle(
color: Colors.black54,
fontSize: 14,
);
String text;
if (value == 0) {
text = '0';
} else if (value == 20) {
text = '20';
} else if (value == 40) {
text = '40';
} else if (value == 60) {
text = '60';
} else if (value == 80) {
text = '80';
} else if (value == 100) {
text = '100';
} else {
text = '';
}
return SideTitleWidget(
meta: meta,
child: Text(text, style: style),
);
}
List<BarChartGroupData> _buildBarGroups() {
return hourlyData.asMap().entries.map((entry) {
final index = entry.key;
......@@ -73,10 +140,8 @@ class HourlyChartBlock extends StatelessWidget {
barRods: [
BarChartRodData(
toY: value,
color: index >= 8 && index <= 12
? const Color.fromRGBO(59, 130, 246, 1)
: const Color.fromRGBO(37, 99, 235, 1),
width: 10.w,
color: const Color.fromRGBO(59, 130, 246, 1),
width: 12.w,
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(4),
topRight: Radius.circular(4),
......
......@@ -11,10 +11,10 @@ class ZoneChartBlock extends StatelessWidget {
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.symmetric(horizontal: 16.w),
padding: EdgeInsets.all(16.w),
padding: EdgeInsets.all(24.w),
decoration: BoxDecoration(
color: const Color.fromRGBO(30, 41, 59, 1),
borderRadius: BorderRadius.circular(12.r),
color: Colors.white,
borderRadius: BorderRadius.circular(20.r),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
......@@ -22,59 +22,76 @@ class ZoneChartBlock extends StatelessWidget {
Text(
'分区用电占比',
style: TextStyle(
color: Colors.white,
fontSize: 16.sp,
fontWeight: FontWeight.bold,
color: Colors.black87,
fontSize: 24.sp,
fontWeight: FontWeight.w500,
),
),
SizedBox(height: 16.h),
SizedBox(height: 24.h),
...zoneData.asMap().entries.map((entry) {
final index = entry.key;
final data = entry.value;
return Padding(
padding: EdgeInsets.only(
bottom: index < zoneData.length - 1 ? 16.h : 0),
bottom: index < zoneData.length - 1 ? 20.h : 0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
data.name,
style: TextStyle(
color: Colors.white,
fontSize: 14.sp,
),
Row(
children: [
Container(
width: 12.w,
height: 12.h,
decoration: BoxDecoration(
color: index == 0
? const Color.fromRGBO(59, 130, 246, 1)
: const Color.fromRGBO(107, 114, 128, 1),
borderRadius: BorderRadius.circular(3.r),
),
),
SizedBox(width: 8.w),
Text(
data.name,
style: TextStyle(
color: Colors.black87,
fontSize: 24.sp,
),
),
],
),
Text(
'${data.percentage.toInt()}% (${data.energy.toInt()} kWh)',
style: TextStyle(
color: const Color.fromRGBO(148, 163, 184, 1),
fontSize: 14.sp,
color: index == 0
? const Color.fromRGBO(59, 130, 246, 1)
: Colors.black54,
fontSize: 24.sp,
),
),
],
),
SizedBox(height: 8.h),
SizedBox(height: 12.h),
Stack(
children: [
Container(
height: 12.h,
height: 16.h,
decoration: BoxDecoration(
color: const Color.fromRGBO(51, 65, 85, 1),
borderRadius: BorderRadius.circular(6.r),
color: const Color.fromRGBO(229, 231, 235, 1),
borderRadius: BorderRadius.circular(8.r),
),
),
FractionallySizedBox(
widthFactor: data.percentage / 100,
child: Container(
height: 12.h,
height: 16.h,
decoration: BoxDecoration(
color: index == 0
? const Color.fromRGBO(59, 130, 246, 1)
: const Color.fromRGBO(71, 85, 105, 1),
borderRadius: BorderRadius.circular(6.r),
: const Color.fromRGBO(107, 114, 128, 1),
borderRadius: BorderRadius.circular(8.r),
),
),
),
......
......@@ -31,7 +31,7 @@ class ReportIndexView extends StatelessWidget {
child: Container(
width: double.infinity,
color: const Color.fromRGBO(242, 243, 245, 1),
padding: EdgeInsets.symmetric(horizontal: 28.w),
padding: EdgeInsets.only(left: 28.w, right: 28.w, top: ScreenUtil().statusBarHeight),
child: Column(
children: [
ReportHeaderBlock(
......
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:smart_hotel_app/routes/app_router.dart';
import 'package:smart_hotel_app/routes/app_router.gr.dart';
class DeviceOnlineRate extends StatelessWidget {
final Map<String, dynamic> deviceOnlineRate;
......@@ -15,108 +18,124 @@ class DeviceOnlineRate extends StatelessWidget {
devices.fold<int>(0, (sum, device) => sum + (device['count'] as int));
final rate = deviceOnlineRate['rate'] as double;
return Container(
width: double.infinity,
padding: EdgeInsets.all(28.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(24.r),
color: Colors.white,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
deviceOnlineRate['title'] as String,
style: TextStyle(
fontSize: 28.sp,
fontWeight: FontWeight.normal,
color: const Color.fromRGBO(107, 114, 128, 1),
),
),
Text(
'共 $totalDevices 台',
style: TextStyle(
fontSize: 22.sp,
color: const Color.fromRGBO(156, 163, 175, 1),
return GestureDetector(
onTap: () {
context.pushRoute(const ReportDeviceListRoute());
},
child: Container(
width: double.infinity,
padding: EdgeInsets.all(28.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(24.r),
color: Colors.white,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
deviceOnlineRate['title'] as String,
style: TextStyle(
fontSize: 28.sp,
fontWeight: FontWeight.normal,
color: const Color.fromRGBO(107, 114, 128, 1),
),
),
),
],
),
SizedBox(height: 20.h),
Row(
children: [
SizedBox(
width: 120.w,
height: 120.h,
child: Stack(
alignment: Alignment.center,
Row(
children: [
PieChart(
PieChartData(
sections: [
PieChartSectionData(
value: rate,
color: const Color.fromRGBO(34, 197, 94, 1),
title: '',
radius: 50.w,
),
PieChartSectionData(
value: 1 - rate,
color: const Color.fromRGBO(229, 231, 235, 1),
title: '',
radius: 50.w,
),
],
sectionsSpace: 0,
centerSpaceRadius: 38.w,
),
),
Text(
deviceOnlineRate['rateText'] as String,
'共 $totalDevices 台',
style: TextStyle(
fontSize: 24.sp,
fontWeight: FontWeight.bold,
color: const Color.fromRGBO(31, 41, 55, 1),
fontSize: 22.sp,
color: const Color.fromRGBO(156, 163, 175, 1),
),
),
SizedBox(width: 8.w),
Icon(
Icons.chevron_right,
size: 24.sp,
color: const Color.fromRGBO(156, 163, 175, 1),
),
],
),
),
SizedBox(width: 24.w),
Expanded(
child: Column(
children: devices.map((device) {
return Padding(
padding: EdgeInsets.only(bottom: 8.h),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
device['name'] as String,
style: TextStyle(
fontSize: 22.sp,
color: const Color.fromRGBO(107, 114, 128, 1),
],
),
SizedBox(height: 20.h),
Row(
children: [
SizedBox(
width: 120.w,
height: 120.h,
child: Stack(
alignment: Alignment.center,
children: [
PieChart(
PieChartData(
sections: [
PieChartSectionData(
value: rate,
color: const Color.fromRGBO(34, 197, 94, 1),
title: '',
radius: 30.w,
),
),
Text(
'${device['count']} 台',
style: TextStyle(
fontSize: 22.sp,
color: const Color.fromRGBO(55, 65, 81, 1),
PieChartSectionData(
// value: 1 - rate,
value: 1 - rate,
color: const Color.fromRGBO(229, 231, 235, 1),
title: '',
radius: 30.w,
),
),
],
],
sectionsSpace: 0,
centerSpaceRadius: 38.w,
),
),
);
}).toList(),
Text(
deviceOnlineRate['rateText'] as String,
style: TextStyle(
fontSize: 24.sp,
fontWeight: FontWeight.bold,
color: const Color.fromRGBO(31, 41, 55, 1),
),
),
],
),
),
SizedBox(width: 24.w),
Expanded(
child: Column(
children: devices.map((device) {
return Padding(
padding: EdgeInsets.only(bottom: 8.h),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
device['name'] as String,
style: TextStyle(
fontSize: 22.sp,
color: const Color.fromRGBO(107, 114, 128, 1),
),
),
Text(
'${device['count']} 台',
style: TextStyle(
fontSize: 22.sp,
color: const Color.fromRGBO(55, 65, 81, 1),
),
),
],
),
);
}).toList(),
),
),
),
],
),
],
],
),
],
),
),
);
}
......
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:smart_hotel_app/routes/app_router.dart';
import 'package:smart_hotel_app/routes/app_router.gr.dart';
class QuickActionsBlock extends StatelessWidget {
final Map<String, dynamic> quickActions;
......@@ -31,32 +34,42 @@ class QuickActionsBlock extends StatelessWidget {
SizedBox(height: 28.h),
Row(
children: actions.map((action) {
final name = action['name'] as String;
return Padding(
padding: EdgeInsets.only(right: 60.w),
child: Column(
children: [
Container(
width: 80.w,
height: 80.h,
decoration: BoxDecoration(
color: const Color.fromRGBO(239, 246, 255, 1),
borderRadius: BorderRadius.circular(16.r),
child: GestureDetector(
onTap: () {
if (name == '联动规则') {
context.pushRoute(const ReportRuleManagementRoute());
} else if (name == '告警记录') {
context.pushRoute(const AbnormalListRoute());
}
},
child: Column(
children: [
Container(
width: 80.w,
height: 80.h,
decoration: BoxDecoration(
color: const Color.fromRGBO(239, 246, 255, 1),
borderRadius: BorderRadius.circular(16.r),
),
child: Icon(
action['icon'] as IconData,
color: const Color.fromRGBO(59, 130, 246, 1),
size: 36.sp,
),
),
child: Icon(
action['icon'] as IconData,
color: const Color.fromRGBO(59, 130, 246, 1),
size: 36.sp,
SizedBox(height: 8.h),
Text(
name,
style: TextStyle(
fontSize: 22.sp,
color: const Color.fromRGBO(107, 114, 128, 1),
),
),
),
SizedBox(height: 8.h),
Text(
action['name'] as String,
style: TextStyle(
fontSize: 22.sp,
color: const Color.fromRGBO(107, 114, 128, 1),
),
),
],
],
),
),
);
}).toList(),
......
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:smart_hotel_app/routes/app_router.gr.dart';
class RoomStatusDistribution extends StatelessWidget {
final Map<String, dynamic> roomStatusDistribution;
......@@ -13,108 +15,123 @@ class RoomStatusDistribution extends StatelessWidget {
roomStatusDistribution['statuses'] as List<Map<String, dynamic>>;
final totalRooms = roomStatusDistribution['totalRooms'] as int;
return Container(
width: double.infinity,
padding: EdgeInsets.all(28.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(24.r),
color: Colors.white,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
roomStatusDistribution['title'] as String,
style: TextStyle(
fontSize: 28.sp,
fontWeight: FontWeight.normal,
color: const Color.fromRGBO(107, 114, 128, 1),
return GestureDetector(
onTap: () {
context.pushRoute(const ReportRoomDetailRoute());
},
child: Container(
width: double.infinity,
padding: EdgeInsets.all(28.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(24.r),
color: Colors.white,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
roomStatusDistribution['title'] as String,
style: TextStyle(
fontSize: 28.sp,
fontWeight: FontWeight.normal,
color: const Color.fromRGBO(107, 114, 128, 1),
),
),
),
Text(
'共 $totalRooms 间',
style: TextStyle(
fontSize: 22.sp,
color: const Color.fromRGBO(156, 163, 175, 1),
Row(
children: [
Text(
'共 $totalRooms 间',
style: TextStyle(
fontSize: 22.sp,
color: const Color.fromRGBO(156, 163, 175, 1),
),
),
SizedBox(width: 8.w),
Icon(
Icons.arrow_forward_ios,
size: 20.sp,
color: const Color.fromRGBO(156, 163, 175, 1),
),
],
),
),
],
),
SizedBox(height: 20.h),
...statuses.map((status) {
final count = status['count'] as int;
final color = status['color'] as Color;
final name = status['name'] as String;
final percentage = totalRooms > 0 ? count / totalRooms : 0.0;
],
),
SizedBox(height: 20.h),
...statuses.map((status) {
final count = status['count'] as int;
final color = status['color'] as Color;
final name = status['name'] as String;
final percentage = totalRooms > 0 ? count / totalRooms : 0.0;
return Padding(
padding: EdgeInsets.only(bottom: 16.h),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
Container(
width: 12.w,
height: 12.h,
decoration: BoxDecoration(
color: color,
shape: BoxShape.circle,
return Padding(
padding: EdgeInsets.only(bottom: 16.h),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
Container(
width: 12.w,
height: 12.h,
decoration: BoxDecoration(
color: color,
shape: BoxShape.circle,
),
),
),
SizedBox(width: 8.w),
Text(
name,
style: TextStyle(
fontSize: 24.sp,
color: const Color.fromRGBO(55, 65, 81, 1),
SizedBox(width: 8.w),
Text(
name,
style: TextStyle(
fontSize: 24.sp,
color: const Color.fromRGBO(55, 65, 81, 1),
),
),
),
],
),
Text(
'$count 间',
style: TextStyle(
fontSize: 24.sp,
color: const Color.fromRGBO(55, 65, 81, 1),
],
),
),
],
),
SizedBox(height: 8.h),
Stack(
children: [
Container(
height: 8.h,
decoration: BoxDecoration(
color: const Color.fromRGBO(229, 231, 235, 1),
borderRadius: BorderRadius.circular(4.r),
Text(
'$count 间',
style: TextStyle(
fontSize: 24.sp,
color: const Color.fromRGBO(55, 65, 81, 1),
),
),
),
FractionallySizedBox(
widthFactor: percentage,
child: Container(
],
),
SizedBox(height: 8.h),
Stack(
children: [
Container(
height: 8.h,
decoration: BoxDecoration(
color: color,
color: const Color.fromRGBO(229, 231, 235, 1),
borderRadius: BorderRadius.circular(4.r),
),
),
),
],
),
],
),
);
}).toList(),
],
FractionallySizedBox(
widthFactor: percentage,
child: Container(
height: 8.h,
decoration: BoxDecoration(
color: color,
borderRadius: BorderRadius.circular(4.r),
),
),
),
],
),
],
),
);
}).toList(),
],
),
),
);
}
}
\ No newline at end of file
}
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:smart_hotel_app/routes/app_router.gr.dart';
class WeeklyPowerChart extends StatelessWidget {
final Map<String, dynamic> weeklyPowerUsage;
......@@ -11,36 +13,50 @@ class WeeklyPowerChart extends StatelessWidget {
Widget build(BuildContext context) {
final data = weeklyPowerUsage['data'] as List<Map<String, dynamic>>;
return Container(
width: double.infinity,
padding: EdgeInsets.all(28.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(24.r),
color: Colors.white,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'${weeklyPowerUsage['title']} (${weeklyPowerUsage['unit']})',
style: TextStyle(
fontSize: 28.sp,
fontWeight: FontWeight.normal,
color: const Color.fromRGBO(107, 114, 128, 1),
return GestureDetector(
onTap: () {
context.pushRoute(const ReportEnergyDetailRoute());
},
child: Container(
width: double.infinity,
padding: EdgeInsets.all(28.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(24.r),
color: Colors.white,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'${weeklyPowerUsage['title']} (${weeklyPowerUsage['unit']})',
style: TextStyle(
fontSize: 28.sp,
fontWeight: FontWeight.normal,
color: const Color.fromRGBO(107, 114, 128, 1),
),
),
),
Text(
weeklyPowerUsage['dateRange'] as String,
style: TextStyle(
fontSize: 22.sp,
color: const Color.fromRGBO(156, 163, 175, 1),
Row(
children: [
Text(
weeklyPowerUsage['dateRange'] as String,
style: TextStyle(
fontSize: 22.sp,
color: const Color.fromRGBO(156, 163, 175, 1),
),
),
SizedBox(width: 8.w),
Icon(
Icons.arrow_forward_ios,
size: 20.sp,
color: const Color.fromRGBO(156, 163, 175, 1),
),
],
),
),
],
),
],
),
SizedBox(height: 20.h),
SizedBox(
height: 200.h,
......@@ -108,6 +124,7 @@ class WeeklyPowerChart extends StatelessWidget {
),
],
),
),
);
}
}
\ No newline at end of file
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:smart_hotel_app/views/report/room/cubit/room_report_state.dart';
class RoomReportCubit extends Cubit<RoomReportState> {
RoomReportCubit() : super(const RoomReportState());
RoomReportCubit() : super(const RoomReportState()) {
_initData();
}
void _initData() {
final floors = [
FloorInfo(
floorName: '一楼',
rooms: List.generate(10, (index) => _createRoom(101 + index)),
),
FloorInfo(
floorName: '二楼',
rooms: List.generate(10, (index) => _createRoom(201 + index)),
),
FloorInfo(
floorName: '三楼',
rooms: List.generate(10, (index) => _createRoom(301 + index)),
),
FloorInfo(
floorName: '四楼',
rooms: List.generate(10, (index) => _createRoom(401 + index)),
),
FloorInfo(
floorName: '五楼',
rooms: List.generate(10, (index) => _createRoom(501 + index)),
),
FloorInfo(
floorName: '六楼',
rooms: List.generate(10, (index) => _createRoom(601 + index)),
),
];
final statusStats = [
const StatusStat(
label: '入住',
count: 45,
color: Color.fromRGBO(59, 130, 246, 1),
),
const StatusStat(
label: '空闲',
count: 7,
color: Color.fromRGBO(156, 163, 175, 1),
),
const StatusStat(
label: '预订',
count: 5,
color: Color.fromRGBO(147, 197, 253, 1),
),
const StatusStat(
label: '告警',
count: 3,
color: Color.fromRGBO(251, 191, 36, 1),
),
];
final detailRooms = [
RoomInfo(
roomNumber: '302',
status: RoomStatus.occupied,
statusText: '入住中',
deviceStatus: const RoomDeviceStatus(
hasPerson: true,
powerOn: true,
wifiNormal: true,
acOn: true,
acTemperature: '24',
lightOn: false,
tvOn: true,
curtainOn: false,
),
),
];
emit(state.copyWith(
floors: floors,
statusStats: statusStats,
detailRooms: detailRooms,
));
}
RoomInfo _createRoom(int number) {
RoomStatus status;
String statusText;
if (number == 303) {
status = RoomStatus.warning;
statusText = '告警';
} else if (number == 309) {
status = RoomStatus.temperature;
statusText = '温度';
} else if ([302, 304, 308].contains(number)) {
status = RoomStatus.occupied;
statusText = number == 308 ? '入住·勿扰' : '入住·在房';
} else if (number == 307) {
status = RoomStatus.reserved;
statusText = '预定';
} else {
status = RoomStatus.vacant;
statusText = '空闲';
}
return RoomInfo(
roomNumber: number.toString(),
status: status,
statusText: statusText,
);
}
void selectFloor(int index) {
emit(state.copyWith(selectedFloorIndex: index));
}
}
\ No newline at end of file
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
enum RoomStatus {
vacant,
occupied,
reserved,
warning,
temperature,
}
class RoomDeviceStatus {
final bool hasPerson;
final bool powerOn;
final bool wifiNormal;
final bool acOn;
final String acTemperature;
final bool lightOn;
final bool tvOn;
final bool curtainOn;
const RoomDeviceStatus({
this.hasPerson = true,
this.powerOn = true,
this.wifiNormal = true,
this.acOn = false,
this.acTemperature = '24',
this.lightOn = false,
this.tvOn = false,
this.curtainOn = false,
});
RoomDeviceStatus copyWith({
bool? hasPerson,
bool? powerOn,
bool? wifiNormal,
bool? acOn,
String? acTemperature,
bool? lightOn,
bool? tvOn,
bool? curtainOn,
}) {
return RoomDeviceStatus(
hasPerson: hasPerson ?? this.hasPerson,
powerOn: powerOn ?? this.powerOn,
wifiNormal: wifiNormal ?? this.wifiNormal,
acOn: acOn ?? this.acOn,
acTemperature: acTemperature ?? this.acTemperature,
lightOn: lightOn ?? this.lightOn,
tvOn: tvOn ?? this.tvOn,
curtainOn: curtainOn ?? this.curtainOn,
);
}
}
class RoomInfo {
final String roomNumber;
final RoomStatus status;
final String statusText;
final RoomDeviceStatus deviceStatus;
const RoomInfo({
required this.roomNumber,
required this.status,
required this.statusText,
this.deviceStatus = const RoomDeviceStatus(),
});
RoomInfo copyWith({
String? roomNumber,
RoomStatus? status,
String? statusText,
RoomDeviceStatus? deviceStatus,
}) {
return RoomInfo(
roomNumber: roomNumber ?? this.roomNumber,
status: status ?? this.status,
statusText: statusText ?? this.statusText,
deviceStatus: deviceStatus ?? this.deviceStatus,
);
}
}
class FloorInfo {
final String floorName;
final List<RoomInfo> rooms;
const FloorInfo({
required this.floorName,
required this.rooms,
});
FloorInfo copyWith({
String? floorName,
List<RoomInfo>? rooms,
}) {
return FloorInfo(
floorName: floorName ?? this.floorName,
rooms: rooms ?? this.rooms,
);
}
}
class StatusStat {
final String label;
final int count;
final Color color;
const StatusStat({
required this.label,
required this.count,
required this.color,
});
}
class RoomReportState extends Equatable {
const RoomReportState();
final List<FloorInfo> floors;
final int selectedFloorIndex;
final List<StatusStat> statusStats;
final List<RoomInfo> detailRooms;
const RoomReportState({
this.floors = const [],
this.selectedFloorIndex = 2,
this.statusStats = const [],
this.detailRooms = const [],
});
RoomReportState copyWith() {
return const RoomReportState();
RoomReportState copyWith({
List<FloorInfo>? floors,
int? selectedFloorIndex,
List<StatusStat>? statusStats,
List<RoomInfo>? detailRooms,
}) {
return RoomReportState(
floors: floors ?? this.floors,
selectedFloorIndex: selectedFloorIndex ?? this.selectedFloorIndex,
statusStats: statusStats ?? this.statusStats,
detailRooms: detailRooms ?? this.detailRooms,
);
}
@override
List<Object?> get props => [];
List<Object?> get props => [
floors,
selectedFloorIndex,
statusStats,
detailRooms,
];
}
\ No newline at end of file
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_switch/flutter_switch.dart';
import 'dart:math' as math;
class TemperatureControlBlock extends StatefulWidget {
final bool isOn;
......@@ -29,7 +29,8 @@ class TemperatureControlBlock extends StatefulWidget {
_TemperatureControlBlockState();
}
class _TemperatureControlBlockState extends State<TemperatureControlBlock> {
class _TemperatureControlBlockState extends State<TemperatureControlBlock>
with SingleTickerProviderStateMixin {
@override
Widget build(BuildContext context) {
final progress = (widget.targetTemperature - widget.minTemperature) /
......@@ -37,142 +38,282 @@ class _TemperatureControlBlockState extends State<TemperatureControlBlock> {
return Container(
width: double.infinity,
padding: EdgeInsets.all(20.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(24.r),
color: Colors.white,
),
padding: EdgeInsets.symmetric(vertical: 20.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'温度控制',
style: TextStyle(
fontSize: 28.sp,
fontWeight: FontWeight.bold,
color: const Color.fromRGBO(31, 41, 55, 1),
),
),
FlutterSwitch(
value: widget.isOn,
onToggle: widget.onTogglePower,
activeColor: const Color.fromRGBO(59, 130, 246, 1),
inactiveColor: const Color.fromRGBO(209, 213, 219, 1),
width: 60.w,
height: 30.h,
toggleSize: 26,
),
],
Align(
alignment: Alignment.centerRight,
child: Padding(
padding: EdgeInsets.only(right: 20.w),
child: _buildPowerSwitch(),
),
),
SizedBox(height: 20.h),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
'${widget.currentTemperature}°',
style: TextStyle(
fontSize: 64.sp,
fontWeight: FontWeight.bold,
color: widget.isOn
? const Color.fromRGBO(31, 41, 55, 1)
: const Color.fromRGBO(209, 213, 219, 1),
_buildCircularTemperatureControl(progress),
SizedBox(height: 40.h),
_buildControlButtons(),
],
),
);
}
Widget _buildPowerSwitch() {
return GestureDetector(
onTap: () => widget.onTogglePower(!widget.isOn),
child: Container(
width: 88.w,
height: 48.h,
decoration: BoxDecoration(
gradient: widget.isOn
? const LinearGradient(
colors: [
Color.fromRGBO(96, 165, 250, 1),
Color.fromRGBO(59, 130, 246, 1),
],
)
: const LinearGradient(
colors: [
Color.fromRGBO(209, 213, 219, 1),
Color.fromRGBO(156, 163, 175, 1),
],
),
),
Column(
children: [
GestureDetector(
onTap: widget.onIncreaseTemperature,
child: Container(
width: 48.w,
height: 48.h,
decoration: BoxDecoration(
color: const Color.fromRGBO(229, 231, 235, 1),
borderRadius: BorderRadius.circular(12.r),
),
child: Icon(
Icons.add,
color: const Color.fromRGBO(107, 114, 128, 1),
size: 24.sp,
borderRadius: BorderRadius.circular(24.r),
),
child: Stack(
children: [
AnimatedAlign(
duration: const Duration(milliseconds: 200),
alignment: widget.isOn ? Alignment.centerRight : Alignment.centerLeft,
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 4.w),
child: Container(
width: 40.w,
height: 40.h,
decoration: BoxDecoration(
color: Colors.white,
shape: BoxShape.circle,
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.1),
blurRadius: 4,
offset: const Offset(0, 2),
),
),
],
),
SizedBox(height: 8.h),
Text(
'${widget.targetTemperature}°',
style: TextStyle(
fontSize: 24.sp,
color: const Color.fromRGBO(107, 114, 128, 1),
),
),
),
),
],
),
),
);
}
Widget _buildCircularTemperatureControl(double progress) {
final size = 400.w;
final center = size / 2;
final radius = size / 2 - 20;
// 计算小圆点的位置 - 从顶部开始逆时针旋转
final angle = -math.pi / 2 + (2 * math.pi * progress);
final dotX = center + radius * math.cos(angle);
final dotY = center + radius * math.sin(angle);
return SizedBox(
width: size,
height: size,
child: Stack(
children: [
CustomPaint(
size: Size(size, size),
painter: _CircularProgressPainter(
progress: progress,
isOn: widget.isOn,
),
),
Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'${widget.targetTemperature}',
style: TextStyle(
fontSize: 100.sp,
fontWeight: FontWeight.w500,
color: widget.isOn
? const Color.fromRGBO(37, 99, 235, 1)
: const Color.fromRGBO(209, 213, 219, 1),
),
),
SizedBox(height: 8.h),
Text(
'°C',
style: TextStyle(
fontSize: 48.sp,
fontWeight: FontWeight.w400,
color: widget.isOn
? const Color.fromRGBO(59, 130, 246, 1)
: const Color.fromRGBO(209, 213, 219, 1),
),
SizedBox(height: 8.h),
GestureDetector(
onTap: widget.onDecreaseTemperature,
child: Container(
width: 48.w,
height: 48.h,
decoration: BoxDecoration(
color: const Color.fromRGBO(229, 231, 235, 1),
borderRadius: BorderRadius.circular(12.r),
),
SizedBox(height: 20.h),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'当前室温 ',
style: TextStyle(
fontSize: 28.sp,
color: const Color.fromRGBO(156, 163, 175, 1),
),
child: Icon(
Icons.remove,
),
Text(
'${widget.currentTemperature}°C',
style: TextStyle(
fontSize: 28.sp,
color: const Color.fromRGBO(107, 114, 128, 1),
size: 24.sp,
),
),
],
),
],
),
),
AnimatedPositioned(
duration: const Duration(milliseconds: 200),
left: dotX - 32.w,
top: dotY - 32.w,
child: Container(
width: 64.w,
height: 64.w,
decoration: BoxDecoration(
color: const Color.fromRGBO(37, 99, 235, 1),
shape: BoxShape.circle,
boxShadow: [
BoxShadow(
color: const Color.fromRGBO(37, 99, 235, 0.3),
blurRadius: 10,
offset: const Offset(0, 4),
),
],
),
],
),
SizedBox(height: 20.h),
Stack(
children: [
Container(
height: 8.h,
decoration: BoxDecoration(
color: const Color.fromRGBO(229, 231, 235, 1),
borderRadius: BorderRadius.circular(4.r),
),
),
FractionallySizedBox(
widthFactor: progress,
child: Center(
child: Container(
height: 8.h,
decoration: BoxDecoration(
color: const Color.fromRGBO(59, 130, 246, 1),
borderRadius: BorderRadius.circular(4.r),
width: 20.w,
height: 20.w,
decoration: const BoxDecoration(
color: Colors.white,
shape: BoxShape.circle,
),
),
),
],
),
SizedBox(height: 8.h),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'${widget.minTemperature}°',
style: TextStyle(
fontSize: 22.sp,
color: const Color.fromRGBO(156, 163, 175, 1),
),
),
Text(
'${widget.maxTemperature}°',
style: TextStyle(
fontSize: 22.sp,
color: const Color.fromRGBO(156, 163, 175, 1),
),
),
],
),
),
],
),
);
}
}
\ No newline at end of file
Widget _buildControlButtons() {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
GestureDetector(
onTap: widget.onDecreaseTemperature,
child: Container(
width: 140.w,
height: 120.h,
decoration: BoxDecoration(
color: const Color.fromRGBO(229, 231, 235, 1),
borderRadius: BorderRadius.circular(40.r),
),
child: Icon(
Icons.remove,
size: 48.sp,
color: const Color.fromRGBO(107, 114, 128, 1),
),
),
),
SizedBox(width: 40.w),
Text(
'温度调节',
style: TextStyle(
fontSize: 32.sp,
color: const Color.fromRGBO(107, 114, 128, 1),
),
),
SizedBox(width: 40.w),
GestureDetector(
onTap: widget.onIncreaseTemperature,
child: Container(
width: 140.w,
height: 120.h,
decoration: BoxDecoration(
color: const Color.fromRGBO(229, 231, 235, 1),
borderRadius: BorderRadius.circular(40.r),
),
child: Icon(
Icons.add,
size: 48.sp,
color: const Color.fromRGBO(107, 114, 128, 1),
),
),
),
],
);
}
}
class _CircularProgressPainter extends CustomPainter {
final double progress;
final bool isOn;
_CircularProgressPainter({required this.progress, required this.isOn});
@override
void paint(Canvas canvas, Size size) {
final center = Offset(size.width / 2, size.height / 2);
final radius = size.width / 2 - 20;
final backgroundPaint = Paint()
..color = const Color.fromRGBO(219, 234, 254, 1)
..style = PaintingStyle.stroke
..strokeWidth = 40.w
..strokeCap = StrokeCap.round;
final foregroundPaint = Paint()
..shader = isOn
? const LinearGradient(
colors: [
Color.fromRGBO(96, 165, 250, 1),
Color.fromRGBO(59, 130, 246, 1),
],
).createShader(Rect.fromCircle(center: center, radius: radius))
: const LinearGradient(
colors: [
Color.fromRGBO(209, 213, 219, 1),
Color.fromRGBO(209, 213, 219, 1),
],
).createShader(Rect.fromCircle(center: center, radius: radius))
..style = PaintingStyle.stroke
..strokeWidth = 40.w
..strokeCap = StrokeCap.round;
canvas.drawCircle(center, radius, backgroundPaint);
final startAngle = -math.pi / 2;
final sweepAngle = 2 * math.pi * progress;
canvas.drawArc(
Rect.fromCircle(center: center, radius: radius),
startAngle,
sweepAngle,
false,
foregroundPaint,
);
}
@override
bool shouldRepaint(covariant _CircularProgressPainter oldDelegate) {
return oldDelegate.progress != progress || oldDelegate.isOn != isOn;
}
}
......@@ -37,12 +37,12 @@ class ServiceIndexCubit extends Cubit<ServiceIndexState> {
Map<String, List<Map<String, dynamic>>> _buildRoomCache() {
return {
'1楼': _generateRooms(1, 80),
'2楼': _generateRooms(2, Random().nextInt(41) + 10),
'3楼': _generateRooms(3, Random().nextInt(41) + 10),
'4楼': _generateRooms(4, Random().nextInt(41) + 10),
'1楼': _generateRooms(1, 20),
'2楼': _generateRooms(2, Random().nextInt(21) + 10),
'3楼': _generateRooms(3, Random().nextInt(21) + 10),
'4楼': _generateRooms(4, Random().nextInt(21) + 10),
'5楼': _generateRooms(5, Random().nextInt(5) + 10),
'6楼': _generateRooms(6, Random().nextInt(41) + 10),
'6楼': _generateRooms(6, Random().nextInt(21) + 10),
};
}
......
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:smart_hotel_app/views/service/index/cubit/service_index_cubit.dart';
import 'package:smart_hotel_app/views/service/index/cubit/service_index_state.dart';
......@@ -18,15 +19,17 @@ class ServiceIndexView extends StatelessWidget {
child: LayoutBuilder(
builder: (context, constraints) {
return SingleChildScrollView(
padding: EdgeInsets.symmetric(horizontal: 28.w),
child: ConstrainedBox(
constraints: BoxConstraints(minHeight: constraints.maxHeight),
child: Container(
color: const Color.fromRGBO(242, 243, 245, 1),
// color: const Color.fromRGBO(242, 243, 245, 1),
color: Color.fromRGBO(242, 243, 245, 1.0),
child: BlocBuilder<ServiceIndexCubit, ServiceIndexState>(
builder: (context, state) {
return Column(
children: [
ServiceHeadBlock(pendingCount: state.pendingCount),
const ServiceHeadBlock(),
ServiceStatsBlock(
pendingCount: state.pendingCount,
occupiedCount: state.occupiedRooms,
......
......@@ -525,4 +525,4 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
],
);
}
}
\ No newline at end of file
}
......@@ -2,76 +2,47 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
class ServiceHeadBlock extends StatelessWidget {
final int pendingCount;
const ServiceHeadBlock({super.key, required this.pendingCount});
const ServiceHeadBlock({super.key});
@override
Widget build(BuildContext context) {
return Container(
width: double.infinity,
padding: EdgeInsets.fromLTRB(28.w, 20.h, 28.w, 20.h),
color: Color.fromRGBO(73, 149, 234, 1),
child: Stack(
height: 150.h,
padding: EdgeInsets.only(top: ScreenUtil().statusBarHeight, left: 20.w, right: 20.w),
decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(20.r),
color: Colors.white,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Icon(Icons.emoji_emotions_outlined,
color: Color.fromRGBO(255, 255, 255, 1), size: 40.sp),
SizedBox(width: 10.w),
Text(
'早安,张先生',
style: TextStyle(
fontSize: 40.sp,
fontWeight: FontWeight.bold,
color: Colors.white,
fontFamily: 'FZLTXH',
),
),
],
),
SizedBox(height: 15.h),
Text(
'今日天气:晴 25°C ~ 35°C',
style: TextStyle(
fontSize: 24.sp,
fontWeight: FontWeight.bold,
color: Color.fromRGBO(255, 255, 255, 1),
fontFamily: 'FZLTXH',
),
),
],
Text(
'客房服务看板',
style: TextStyle(
fontSize: 32.sp,
fontWeight: FontWeight.bold,
color: const Color.fromRGBO(0, 0, 0, 1),
fontFamily: 'FZLTXH',
),
),
Positioned(
right: 0,
bottom: 0,
child: GestureDetector(
onTap: () {},
child: Container(
padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 3.h),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20.r),
color: const Color.fromRGBO(1, 1, 1, 0.1),
),
child: Row(
children: [
Icon(Icons.notifications_outlined,
color: Colors.white, size: 38.sp),
SizedBox(width: 5.w),
Text(
'待响应需求 $pendingCount',
style: TextStyle(
fontSize: 24.sp,
fontWeight: FontWeight.bold,
color: Colors.white,
fontFamily: 'FZLTXH',
),
),
],
),
Container(
width: 64.w,
height: 64.w,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(
color: const Color.fromRGBO(73, 149, 234, 1),
width: 1.w,
),
),
child: CircleAvatar(
radius: 40.w,
backgroundColor: Colors.white,
child: Icon(
Icons.person,
color: const Color.fromRGBO(73, 149, 234, 1),
size: 48.sp,
),
),
),
......@@ -79,4 +50,4 @@ class ServiceHeadBlock extends StatelessWidget {
),
);
}
}
\ No newline at end of file
}
......@@ -19,21 +19,21 @@ class ServiceStatsBlock extends StatelessWidget {
width: double.infinity,
padding: EdgeInsets.all(20.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(24.r),
color: Colors.white,
// borderRadius: BorderRadius.circular(24.r),
color: Color.fromRGBO(242, 243, 245, 1.0),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'服务概览',
style: TextStyle(
fontSize: 28.sp,
fontWeight: FontWeight.bold,
color: const Color.fromRGBO(31, 41, 55, 1),
),
),
SizedBox(height: 20.h),
// Text(
// '服务概览',
// style: TextStyle(
// fontSize: 28.sp,
// fontWeight: FontWeight.bold,
// color: const Color.fromRGBO(31, 41, 55, 1),
// ),
// ),
// SizedBox(height: 20.h),
Row(
children: [
_buildStatCard(
......@@ -74,12 +74,12 @@ class ServiceStatsBlock extends StatelessWidget {
),
child: Column(
children: [
Icon(icon, color: color, size: 28.sp),
// Icon(icon, color: color, size: 28.sp),
SizedBox(height: 8.h),
Text(
value,
style: TextStyle(
fontSize: 32.sp,
fontSize: 60.sp,
fontWeight: FontWeight.bold,
color: color,
),
......@@ -88,7 +88,7 @@ class ServiceStatsBlock extends StatelessWidget {
Text(
label,
style: TextStyle(
fontSize: 20.sp,
fontSize: 24.sp,
color: const Color.fromRGBO(107, 114, 128, 1),
),
),
......@@ -97,4 +97,4 @@ class ServiceStatsBlock extends StatelessWidget {
),
);
}
}
\ No newline at end of file
}
......@@ -2,6 +2,7 @@ import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:smart_hotel_app/routes/app_router.gr.dart';
import 'package:smart_hotel_app/views/service/room/cubit/service_room_cubit.dart';
import 'package:smart_hotel_app/views/service/room/cubit/service_room_state.dart';
import 'package:smart_hotel_app/views/service/room/widget/room_overview_card.dart';
......@@ -64,6 +65,11 @@ class ServiceRoomDetailView extends StatelessWidget {
controlDevices: state.controlDevices,
onMainPowerToggle: (value) => cubit.toggleMainPower(value),
onDeviceToggle: (index, value) => cubit.toggleControlDevice(index, value),
onDeviceTap: (index, device) {
if (device.name == '空调') {
context.pushRoute(const ServiceDeviceDetailRoute());
}
},
),
SizedBox(height: 20.h),
const RoomBottomButtons(),
......
......@@ -8,6 +8,7 @@ class DeviceControlCard extends StatelessWidget {
final List<ControlDevice> controlDevices;
final Function(bool) onMainPowerToggle;
final Function(int, bool) onDeviceToggle;
final Function(int, ControlDevice)? onDeviceTap;
const DeviceControlCard({
super.key,
......@@ -15,6 +16,7 @@ class DeviceControlCard extends StatelessWidget {
required this.controlDevices,
required this.onMainPowerToggle,
required this.onDeviceToggle,
this.onDeviceTap,
});
@override
......@@ -107,14 +109,21 @@ class DeviceControlCard extends StatelessWidget {
],
),
FlutterSwitch(
width: 48.0,
height: 25.0,
value: mainPowerOn,
onToggle: onMainPowerToggle,
activeColor: const Color.fromRGBO(59, 130, 246, 1),
inactiveColor: const Color.fromRGBO(209, 213, 219, 1),
width: 60.w,
height: 30.h,
toggleSize: 26,
showOnOff: false,
onToggle: onMainPowerToggle
),
// FlutterSwitch(
// value: mainPowerOn,
// onToggle: onMainPowerToggle,
// activeColor: const Color.fromRGBO(59, 130, 246, 1),
// inactiveColor: const Color.fromRGBO(209, 213, 219, 1),
// width: 50.w,
// height: 28.h,
// // toggleSize: 26,
// ),
],
),
SizedBox(height: 20.h),
......@@ -134,49 +143,62 @@ class DeviceControlCard extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
child: Material(
color: Colors.transparent,
child: InkWell(
onTap: onDeviceTap != null ? () => onDeviceTap!(index, device) : null,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Icon(
device.icon,
color: const Color.fromRGBO(66, 165, 245, 1.0),
size: 36.sp,
Row(
children: [
Icon(
device.icon,
color: const Color.fromRGBO(66, 165, 245, 1.0),
size: 36.sp,
),
SizedBox(width: 8.w),
Text(
device.name,
style: TextStyle(
fontSize: 28.sp,
fontWeight: FontWeight.bold,
color: const Color.fromRGBO(10, 13, 20, 1.0),
),
),
],
),
SizedBox(width: 8.w),
Text(
device.name,
style: TextStyle(
fontSize: 28.sp,
fontWeight: FontWeight.bold,
color: const Color.fromRGBO(10, 13, 20, 1.0),
if (device.detailText != null) ...[
SizedBox(height: 8.h),
Text(
device.detailText!,
style: TextStyle(
fontSize: 24.sp,
color: const Color.fromRGBO(100, 116, 139, 1.0),
),
),
),
],
],
),
if (device.detailText != null) ...[
SizedBox(height: 8.h),
Text(
device.detailText!,
style: TextStyle(
fontSize: 24.sp,
color: const Color.fromRGBO(100, 116, 139, 1.0),
),
),
],
],
),
),
),
FlutterSwitch(
width: 48.0,
height: 25.0,
value: device.isOn,
showOnOff: false,
onToggle: (value) => onDeviceToggle(index, value),
activeColor: const Color.fromRGBO(66, 165, 245, 1.0),
inactiveColor: const Color.fromRGBO(200, 208, 220, 1.0),
width: 60.w,
height: 30.h,
toggleSize: 26,
),
// FlutterSwitch(
// value: device.isOn,
// onToggle: (value) => onDeviceToggle(index, value),
// activeColor: const Color.fromRGBO(66, 165, 245, 1.0),
// inactiveColor: const Color.fromRGBO(200, 208, 220, 1.0),
// width: 60.w,
// height: 30.h,
// toggleSize: 26,
// ),
],
),
if (index < controlDevices.length - 1) ...[
......
......@@ -7,6 +7,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST
jni
)
set(PLUGIN_BUNDLED_LIBRARIES)
......
......@@ -6,9 +6,7 @@ import FlutterMacOS
import Foundation
import flutter_secure_storage_macos
import path_provider_foundation
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
}
......@@ -5,34 +5,34 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051
sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7"
url: "https://pub.dev"
source: hosted
version: "64.0.0"
version: "67.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893"
sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d"
url: "https://pub.dev"
source: hosted
version: "6.2.0"
version: "6.4.1"
args:
dependency: transitive
description:
name: args
sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a"
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
url: "https://pub.dev"
source: hosted
version: "2.5.0"
version: "2.7.0"
async:
dependency: transitive
description:
name: async
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
url: "https://pub.dev"
source: hosted
version: "2.11.0"
version: "2.13.1"
auto_route:
dependency: "direct main"
description:
......@@ -61,10 +61,10 @@ packages:
dependency: transitive
description:
name: boolean_selector
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
version: "2.1.2"
build:
dependency: transitive
description:
......@@ -77,18 +77,18 @@ packages:
dependency: transitive
description:
name: build_config
sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1
sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
version: "1.1.2"
build_daemon:
dependency: transitive
description:
name: build_daemon
sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1"
sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957
url: "https://pub.dev"
source: hosted
version: "4.0.1"
version: "4.1.1"
build_resolvers:
dependency: transitive
description:
......@@ -101,18 +101,18 @@ packages:
dependency: "direct dev"
description:
name: build_runner
sha256: "3ac61a79bfb6f6cc11f693591063a7f19a7af628dc52f141743edac5c16e8c22"
sha256: "028819cfb90051c6b5440c7e574d1896f8037e3c96cf17aaeb054c9311cfbf4d"
url: "https://pub.dev"
source: hosted
version: "2.4.9"
version: "2.4.13"
build_runner_core:
dependency: transitive
description:
name: build_runner_core
sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799"
sha256: f8126682b87a7282a339b871298cc12009cb67109cfa1614d6436fb0289193e0
url: "https://pub.dev"
source: hosted
version: "7.3.0"
version: "7.3.2"
built_collection:
dependency: transitive
description:
......@@ -141,10 +141,10 @@ packages:
dependency: transitive
description:
name: checked_yaml
sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff
sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f"
url: "https://pub.dev"
source: hosted
version: "2.0.3"
version: "2.0.4"
clock:
dependency: transitive
description:
......@@ -153,14 +153,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.2"
code_assets:
dependency: transitive
description:
name: code_assets
sha256: bf394f466ba9205f1812a0433b392d6af280f155f56651eda7c18cc32ed493b8
url: "https://pub.dev"
source: hosted
version: "1.2.1"
code_builder:
dependency: transitive
description:
name: code_builder
sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37
sha256: "6a6cab2ba4680d6423f34a9b972a4c9a94ebe1b62ecec4e1a1f2cba91fd1319d"
url: "https://pub.dev"
source: hosted
version: "4.10.0"
version: "4.11.1"
collection:
dependency: transitive
description:
......@@ -173,26 +181,26 @@ packages:
dependency: transitive
description:
name: convert
sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592"
sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
url: "https://pub.dev"
source: hosted
version: "3.1.1"
version: "3.1.2"
crypto:
dependency: transitive
description:
name: crypto
sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab
sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
url: "https://pub.dev"
source: hosted
version: "3.0.3"
version: "3.0.7"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6
sha256: "41e005c33bd814be4d3096aff55b1908d419fde52ca656c8c47719ec745873cd"
url: "https://pub.dev"
source: hosted
version: "1.0.8"
version: "1.0.9"
dart_style:
dependency: transitive
description:
......@@ -213,10 +221,10 @@ packages:
dependency: transitive
description:
name: dio_web_adapter
sha256: "0a2e95fc6bdeb623bb623fc41e90e6924e9a3bbd65089f9221f83c185366b479"
sha256: "2f9e64323a7c3c7ef69567d5c800424a11f8337b8b228bad02524c9fb3c1f340"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
version: "2.1.2"
equatable:
dependency: "direct main"
description:
......@@ -364,10 +372,10 @@ packages:
dependency: "direct main"
description:
name: fluttertoast
sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66"
sha256: "90778fe0497fe3a09166e8cf2e0867310ff434b794526589e77ec03cf08ba8e8"
url: "https://pub.dev"
source: hosted
version: "8.2.5"
version: "8.2.14"
frontend_server_client:
dependency: transitive
description:
......@@ -380,18 +388,26 @@ packages:
dependency: transitive
description:
name: glob
sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63"
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
url: "https://pub.dev"
source: hosted
version: "2.1.2"
version: "2.1.3"
graphs:
dependency: transitive
description:
name: graphs
sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19
sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0"
url: "https://pub.dev"
source: hosted
version: "2.3.1"
version: "2.3.2"
hooks:
dependency: transitive
description:
name: hooks
sha256: "9a62a50b50b769a737bc0a8ff381f333529df3ab746b2f6b02e83760231455ba"
url: "https://pub.dev"
source: hosted
version: "2.0.2"
http_multi_server:
dependency: transitive
description:
......@@ -404,18 +420,34 @@ packages:
dependency: transitive
description:
name: http_parser
sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
url: "https://pub.dev"
source: hosted
version: "4.0.2"
version: "4.1.2"
io:
dependency: transitive
description:
name: io
sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e"
sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b
url: "https://pub.dev"
source: hosted
version: "1.0.5"
jni:
dependency: transitive
description:
name: jni
sha256: c2230682d5bc2362c1c9e8d3c7f406d9cbba23ab3f2e203a025dd47e0fb2e68f
url: "https://pub.dev"
source: hosted
version: "1.0.4"
version: "1.0.0"
jni_flutter:
dependency: transitive
description:
name: jni_flutter
sha256: "8b59e590786050b1cd866677dddaf76b1ade5e7bc751abe04b86e84d379d3ba6"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
js:
dependency: transitive
description:
......@@ -428,10 +460,10 @@ packages:
dependency: transitive
description:
name: json_annotation
sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
sha256: "2a743920d81b7910627f68ee2c9ac1fc0bfee32b9fc3403587d7c6791ca12f80"
url: "https://pub.dev"
source: hosted
version: "4.9.0"
version: "4.12.0"
leak_tracker:
dependency: transitive
description:
......@@ -476,10 +508,10 @@ packages:
dependency: transitive
description:
name: logging
sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340"
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
url: "https://pub.dev"
source: hosted
version: "1.2.0"
version: "1.3.0"
matcher:
dependency: transitive
description:
......@@ -508,10 +540,10 @@ packages:
dependency: transitive
description:
name: mime
sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a"
sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
url: "https://pub.dev"
source: hosted
version: "1.0.6"
version: "2.0.0"
nested:
dependency: transitive
description:
......@@ -520,14 +552,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.0"
objective_c:
dependency: transitive
description:
name: objective_c
sha256: "6cb691c686fa2838c6deb34980d426145c2a5d537491cb83d463c33cdbc726ed"
url: "https://pub.dev"
source: hosted
version: "9.4.1"
package_config:
dependency: transitive
description:
name: package_config
sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd"
sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
url: "https://pub.dev"
source: hosted
version: "2.1.0"
version: "2.2.0"
path:
dependency: transitive
description:
......@@ -540,26 +580,26 @@ packages:
dependency: transitive
description:
name: path_provider
sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
version: "2.1.5"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d
sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd"
url: "https://pub.dev"
source: hosted
version: "2.2.4"
version: "2.3.1"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699"
url: "https://pub.dev"
source: hosted
version: "2.4.0"
version: "2.6.0"
path_provider_linux:
dependency: transitive
description:
......@@ -588,10 +628,10 @@ packages:
dependency: transitive
description:
name: petitparser
sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
sha256: "91bd59303e9f769f108f8df05e371341b15d59e995e6806aefab827b58336675"
url: "https://pub.dev"
source: hosted
version: "6.0.2"
version: "7.0.2"
platform:
dependency: transitive
description:
......@@ -612,10 +652,10 @@ packages:
dependency: transitive
description:
name: pool
sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a"
sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d"
url: "https://pub.dev"
source: hosted
version: "1.5.1"
version: "1.5.2"
provider:
dependency: transitive
description:
......@@ -628,34 +668,42 @@ packages:
dependency: transitive
description:
name: pub_semver
sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c"
sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
version: "2.2.0"
pubspec_parse:
dependency: transitive
description:
name: pubspec_parse
sha256: "81876843eb50dc2e1e5b151792c9a985c5ed2536914115ed04e9c8528f6647b0"
sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
url: "https://pub.dev"
source: hosted
version: "1.4.0"
version: "1.5.0"
record_use:
dependency: transitive
description:
name: record_use
sha256: "2551bd8eecfe95d14ae75f6021ad0248be5c27f138c2ec12fcb52b500b3ba1ed"
url: "https://pub.dev"
source: hosted
version: "0.6.0"
shelf:
dependency: transitive
description:
name: shelf
sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4
sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12
url: "https://pub.dev"
source: hosted
version: "1.4.1"
version: "1.4.2"
shelf_web_socket:
dependency: transitive
description:
name: shelf_web_socket
sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1"
sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67
url: "https://pub.dev"
source: hosted
version: "1.0.4"
version: "2.0.1"
sky_engine:
dependency: transitive
description: flutter
......@@ -673,10 +721,10 @@ packages:
dependency: transitive
description:
name: source_span
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
url: "https://pub.dev"
source: hosted
version: "1.10.0"
version: "1.10.2"
stack_trace:
dependency: transitive
description:
......@@ -705,18 +753,18 @@ packages:
dependency: transitive
description:
name: string_scanner
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
version: "1.4.1"
term_glyph:
dependency: transitive
description:
name: term_glyph
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
version: "1.2.2"
test_api:
dependency: transitive
description:
......@@ -729,18 +777,18 @@ packages:
dependency: transitive
description:
name: timing
sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32"
sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
version: "1.0.2"
typed_data:
dependency: transitive
description:
name: typed_data
sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
url: "https://pub.dev"
source: hosted
version: "1.3.2"
version: "1.4.0"
vector_math:
dependency: transitive
description:
......@@ -761,18 +809,34 @@ packages:
dependency: transitive
description:
name: watcher
sha256: "592ab6e2892f67760543fb712ff0177f4ec76c031f02f5b4ff8d3fc5eb9fb61a"
sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
web:
dependency: transitive
description:
name: web
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
web_socket:
dependency: transitive
description:
name: web_socket
sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
url: "https://pub.dev"
source: hosted
version: "1.1.4"
version: "1.0.1"
web_socket_channel:
dependency: transitive
description:
name: web_socket_channel
sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b
sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
url: "https://pub.dev"
source: hosted
version: "2.4.0"
version: "3.0.3"
win32:
dependency: "direct overridden"
description:
......@@ -785,26 +849,26 @@ packages:
dependency: transitive
description:
name: xdg_directories
sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
url: "https://pub.dev"
source: hosted
version: "1.0.4"
version: "1.1.0"
xml:
dependency: transitive
description:
name: xml
sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025"
url: "https://pub.dev"
source: hosted
version: "6.5.0"
version: "6.6.1"
yaml:
dependency: transitive
description:
name: yaml
sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
url: "https://pub.dev"
source: hosted
version: "3.1.2"
version: "3.1.3"
sdks:
dart: ">=3.8.0-0 <4.0.0"
flutter: ">=3.18.0-18.0.pre.54"
dart: ">=3.10.3 <4.0.0"
flutter: ">=3.38.4"
......@@ -7,6 +7,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST
jni
)
set(PLUGIN_BUNDLED_LIBRARIES)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment