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
1bfb3cc9
Commit
1bfb3cc9
authored
May 20, 2026
by
张宏
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
.
parent
7f4d2341
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
54 additions
and
30 deletions
+54
-30
room_management_block.dart
lib/views/service/index/child/room_management_block.dart
+35
-26
controller.dart
lib/views/service/index/controller.dart
+19
-4
No files found.
lib/views/service/index/child/room_management_block.dart
View file @
1bfb3cc9
...
@@ -11,8 +11,8 @@ class RoomManagementBlock extends StatefulWidget {
...
@@ -11,8 +11,8 @@ class RoomManagementBlock extends StatefulWidget {
class
_RoomManagementBlockState
extends
State
<
RoomManagementBlock
>
{
class
_RoomManagementBlockState
extends
State
<
RoomManagementBlock
>
{
late
final
ServiceIndexController
_controller
;
late
final
ServiceIndexController
_controller
;
String
_selectedFloor
=
'1楼'
;
String
?
_selectedFloor
;
String
_selectedType
=
'客房'
;
String
?
_selectedType
;
String
?
_selectedRoom
;
String
?
_selectedRoom
;
String
_searchText
=
''
;
String
_searchText
=
''
;
final
TextEditingController
_searchController
=
TextEditingController
();
final
TextEditingController
_searchController
=
TextEditingController
();
...
@@ -28,7 +28,22 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
...
@@ -28,7 +28,22 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
List
<
Map
<
String
,
dynamic
>>
_getFilteredRooms
()
{
List
<
Map
<
String
,
dynamic
>>
_getFilteredRooms
()
{
final
allRooms
=
_controller
.
getRoomsByFloor
(
_selectedFloor
);
List
<
Map
<
String
,
dynamic
>>
allRooms
;
if
(
_selectedFloor
==
null
)
{
allRooms
=
[];
for
(
final
floor
in
_controller
.
getFloors
())
{
allRooms
.
addAll
(
_controller
.
getRoomsByFloor
(
floor
));
}
}
else
{
allRooms
=
_controller
.
getRoomsByFloor
(
_selectedFloor
!);
}
if
(
_selectedType
!=
null
)
{
allRooms
=
allRooms
.
where
((
room
)
=>
room
[
'type'
]
==
_selectedType
)
.
toList
();
}
if
(
_searchText
.
isEmpty
)
{
if
(
_searchText
.
isEmpty
)
{
return
allRooms
;
return
allRooms
;
}
}
...
@@ -76,8 +91,8 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
...
@@ -76,8 +91,8 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
// 搜索框
// 搜索框
_buildSearchBox
(),
_buildSearchBox
(),
SizedBox
(
height:
15
.
h
),
SizedBox
(
height:
15
.
h
),
// 房间区域
或其他类型内容
// 房间区域
_
selectedType
==
'客房'
?
_buildRoomGrid
()
:
_buildOtherContent
(),
_
buildRoomGrid
(),
SizedBox
(
height:
20
.
h
),
SizedBox
(
height:
20
.
h
),
// 选中状态提示
// 选中状态提示
if
(
_selectedRoom
!=
null
)
if
(
_selectedRoom
!=
null
)
...
@@ -115,7 +130,11 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
...
@@ -115,7 +130,11 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
child:
GestureDetector
(
child:
GestureDetector
(
onTap:
()
{
onTap:
()
{
setState
(()
{
setState
(()
{
if
(
_selectedFloor
==
floor
)
{
_selectedFloor
=
null
;
}
else
{
_selectedFloor
=
floor
;
_selectedFloor
=
floor
;
}
_searchController
.
clear
();
_searchController
.
clear
();
_searchText
=
''
;
_searchText
=
''
;
});
});
...
@@ -158,7 +177,11 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
...
@@ -158,7 +177,11 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
child:
GestureDetector
(
child:
GestureDetector
(
onTap:
()
{
onTap:
()
{
setState
(()
{
setState
(()
{
if
(
_selectedType
==
type
)
{
_selectedType
=
null
;
}
else
{
_selectedType
=
type
;
_selectedType
=
type
;
}
});
});
},
},
child:
Container
(
child:
Container
(
...
@@ -229,6 +252,12 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
...
@@ -229,6 +252,12 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
);
);
}
}
String
_buildFilterLabel
()
{
final
typePart
=
_selectedType
??
'全部类型'
;
final
floorPart
=
_selectedFloor
??
'全部楼层'
;
return
'
$typePart
·
$floorPart
'
;
}
Widget
_buildRoomGrid
()
{
Widget
_buildRoomGrid
()
{
final
filteredRooms
=
_getFilteredRooms
();
final
filteredRooms
=
_getFilteredRooms
();
final
crossAxisCount
=
8
;
// 列
final
crossAxisCount
=
8
;
// 列
...
@@ -240,7 +269,7 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
...
@@ -240,7 +269,7 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
children:
[
Text
(
Text
(
'客房
$_selectedFloor
· 左右滑动选择'
,
_buildFilterLabel
()
,
style:
TextStyle
(
style:
TextStyle
(
fontSize:
16
.
sp
,
fontSize:
16
.
sp
,
color:
Colors
.
white
,
color:
Colors
.
white
,
...
@@ -377,26 +406,6 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
...
@@ -377,26 +406,6 @@ class _RoomManagementBlockState extends State<RoomManagementBlock> {
);
);
}
}
Widget
_buildOtherContent
()
{
return
Container
(
width:
double
.
infinity
,
height:
200
.
h
,
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
20
.
r
),
color:
Color
.
fromRGBO
(
51
,
65
,
85
,
1
),
),
child:
Center
(
child:
Text
(
'
$_selectedType
区域内容'
,
style:
TextStyle
(
fontSize:
16
.
sp
,
color:
Colors
.
grey
,
),
),
),
);
}
Widget
_buildBottomButtons
()
{
Widget
_buildBottomButtons
()
{
return
Row
(
return
Row
(
children:
[
children:
[
...
...
lib/views/service/index/controller.dart
View file @
1bfb3cc9
...
@@ -31,30 +31,45 @@ class ServiceIndexController {
...
@@ -31,30 +31,45 @@ class ServiceIndexController {
return
[
'1楼'
,
'2楼'
,
'3楼'
,
'4楼'
,
'5楼'
,
'6楼'
];
return
[
'1楼'
,
'2楼'
,
'3楼'
,
'4楼'
,
'5楼'
,
'6楼'
];
}
}
List
<
Map
<
String
,
dynamic
>>
getRoomsByFloor
(
String
floor
)
{
Map
<
String
,
List
<
Map
<
String
,
dynamic
>>>
_buildRoomCache
(
)
{
_roomCache
??=
{
return
{
'1楼'
:
_generateRooms
(
1
,
4
0
),
'1楼'
:
_generateRooms
(
1
,
8
0
),
'2楼'
:
_generateRooms
(
2
,
Random
().
nextInt
(
41
)
+
10
),
'2楼'
:
_generateRooms
(
2
,
Random
().
nextInt
(
41
)
+
10
),
'3楼'
:
_generateRooms
(
3
,
Random
().
nextInt
(
41
)
+
10
),
'3楼'
:
_generateRooms
(
3
,
Random
().
nextInt
(
41
)
+
10
),
'4楼'
:
_generateRooms
(
4
,
Random
().
nextInt
(
41
)
+
10
),
'4楼'
:
_generateRooms
(
4
,
Random
().
nextInt
(
41
)
+
10
),
'5楼'
:
_generateRooms
(
5
,
Random
().
nextInt
(
5
)
+
10
),
'5楼'
:
_generateRooms
(
5
,
Random
().
nextInt
(
5
)
+
10
),
'6楼'
:
_generateRooms
(
6
,
Random
().
nextInt
(
41
)
+
10
),
'6楼'
:
_generateRooms
(
6
,
Random
().
nextInt
(
41
)
+
10
),
};
};
}
bool
get
_cacheValid
{
if
(
_roomCache
==
null
)
return
false
;
final
firstFloor
=
_roomCache
![
'1楼'
];
if
(
firstFloor
==
null
||
firstFloor
.
isEmpty
)
return
false
;
return
firstFloor
.
first
.
containsKey
(
'type'
);
}
List
<
Map
<
String
,
dynamic
>>
getRoomsByFloor
(
String
floor
)
{
if
(!
_cacheValid
)
{
_roomCache
=
_buildRoomCache
();
}
return
_roomCache
![
floor
]
??
[];
return
_roomCache
![
floor
]
??
[];
}
}
List
<
Map
<
String
,
dynamic
>>
_generateRooms
(
int
floor
,
int
count
)
{
List
<
Map
<
String
,
dynamic
>>
_generateRooms
(
int
floor
,
int
count
)
{
final
statuses
=
[
'空闲'
,
'入住'
,
'待清洁'
];
final
statuses
=
[
'空闲'
,
'入住'
,
'待清洁'
];
final
types
=
[
'客房'
,
'大堂'
,
'过道'
,
'会议'
,
'餐厅'
];
final
List
<
Map
<
String
,
dynamic
>>
rooms
=
[];
final
List
<
Map
<
String
,
dynamic
>>
rooms
=
[];
for
(
int
i
=
1
;
i
<=
count
;
i
++)
{
for
(
int
i
=
1
;
i
<=
count
;
i
++)
{
final
roomNum
=
floor
*
100
+
i
;
final
roomNum
=
floor
*
100
+
i
;
// 随机分配状态,但保持一定比例
final
statusIndex
=
(
roomNum
%
3
);
final
statusIndex
=
(
roomNum
%
3
);
final
typeIndex
=
(
roomNum
%
types
.
length
);
rooms
.
add
({
rooms
.
add
({
'number'
:
roomNum
.
toString
(),
'number'
:
roomNum
.
toString
(),
'status'
:
statuses
[
statusIndex
],
'status'
:
statuses
[
statusIndex
],
'type'
:
types
[
typeIndex
],
});
});
}
}
...
...
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