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

智能酒店相关页面

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