1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
use crate::{
elements::{Element, ScaffoldElement},
foundation::{colorspace::Color, Id, Key, WidgetProperties},
gestures::DragStartBehavior,
widgets::{NoneWidget, PreferredSizeWidget, Widget},
};
use super::{DrawerCallback, FloatingActionButtonAnimator, FloatingActionButtonLocation};
pub struct Scaffold {
pub key: Key,
pub app_bar: Box<dyn PreferredSizeWidget>,
pub body: Box<dyn Widget>,
pub floating_action_button: Box<dyn Widget>,
pub floating_action_button_location: FloatingActionButtonLocation,
pub floating_action_button_animator: FloatingActionButtonAnimator,
pub persistent_footer_buttons: Vec<Box<dyn Widget>>,
pub drawer: Box<dyn Widget>,
pub on_drawer_changed: Option<Box<dyn DrawerCallback>>,
pub end_drawer: Box<dyn Widget>,
pub on_end_drawer_changed: Option<Box<dyn DrawerCallback>>,
pub bottom_navigation_bar: Box<dyn Widget>,
pub bottom_sheet: Box<dyn Widget>,
pub background_color: Color,
pub resize_to_avoid_bottom_inset: bool,
pub primary: bool,
pub drawer_drag_start_behavior: DragStartBehavior,
pub extend_body: bool,
pub extend_body_behind_app_bar: bool,
pub drawer_scrim_color: Color,
pub drawer_edge_drag_width: f32,
pub drawer_enable_open_drag_gesture: bool,
pub end_drawer_enable_open_drag_gesture: bool,
pub restoration_id: String,
}
impl Default for Scaffold {
fn default() -> Self {
Self {
key: Default::default(),
app_bar: box NoneWidget,
body: box NoneWidget,
floating_action_button: box NoneWidget,
floating_action_button_location: Default::default(),
floating_action_button_animator: Default::default(),
persistent_footer_buttons: Default::default(),
drawer: box NoneWidget,
on_drawer_changed: Default::default(),
end_drawer: box NoneWidget,
on_end_drawer_changed: Default::default(),
bottom_navigation_bar: box NoneWidget,
bottom_sheet: box NoneWidget,
background_color: Default::default(),
resize_to_avoid_bottom_inset: Default::default(),
primary: Default::default(),
drawer_drag_start_behavior: Default::default(),
extend_body: Default::default(),
extend_body_behind_app_bar: Default::default(),
drawer_scrim_color: Default::default(),
drawer_edge_drag_width: Default::default(),
drawer_enable_open_drag_gesture: Default::default(),
end_drawer_enable_open_drag_gesture: Default::default(),
restoration_id: Default::default(),
}
}
}
impl Widget for Scaffold {
fn create_element(&self) -> Box<dyn Element> {
box ScaffoldElement::new(self)
}
}
impl WidgetProperties for Scaffold {
fn key(&self) -> &Key {
&self.key
}
fn x(&self) -> f32 {
0.0
}
fn y(&self) -> f32 {
0.0
}
fn w(&self) -> f32 {
0.0
}
fn h(&self) -> f32 {
0.0
}
fn w_min(&self) -> f32 {
0.0
}
fn h_min(&self) -> f32 {
0.0
}
fn w_max(&self) -> f32 {
0.0
}
fn h_max(&self) -> f32 {
0.0
}
fn parent(&self) -> Option<Id> {
None
}
fn depth(&self) -> f32 {
0.0
}
fn visible(&self) -> bool {
true
}
fn mouse_input(&self) -> bool {
true
}
fn key_input(&self) -> bool {
true
}
fn renderable(&self) -> bool {
true
}
fn internal_visible(&self) -> bool {
true
}
}