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