Committed by
GitHub
Merge pull request #232 from bierbaumtim/example-darkmode
Darkmode support for example
Showing
6 changed files
with
503 additions
and
381 deletions
@@ -26,7 +26,7 @@ apply plugin: 'kotlin-android' | @@ -26,7 +26,7 @@ apply plugin: 'kotlin-android' | ||
26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" | 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" |
27 | 27 | ||
28 | android { | 28 | android { |
29 | - compileSdkVersion 30 | 29 | + compileSdkVersion 31 |
30 | 30 | ||
31 | sourceSets { | 31 | sourceSets { |
32 | main.java.srcDirs += 'src/main/kotlin' | 32 | main.java.srcDirs += 'src/main/kotlin' |
@@ -36,7 +36,7 @@ android { | @@ -36,7 +36,7 @@ android { | ||
36 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). | 36 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). |
37 | applicationId "com.example.example" | 37 | applicationId "com.example.example" |
38 | minSdkVersion 16 | 38 | minSdkVersion 16 |
39 | - targetSdkVersion 30 | 39 | + targetSdkVersion 31 |
40 | versionCode flutterVersionCode.toInteger() | 40 | versionCode flutterVersionCode.toInteger() |
41 | versionName flutterVersionName | 41 | versionName flutterVersionName |
42 | } | 42 | } |
@@ -9,7 +9,8 @@ | @@ -9,7 +9,8 @@ | ||
9 | android:theme="@style/LaunchTheme" | 9 | android:theme="@style/LaunchTheme" |
10 | android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" | 10 | android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" |
11 | android:hardwareAccelerated="true" | 11 | android:hardwareAccelerated="true" |
12 | - android:windowSoftInputMode="adjustResize"> | 12 | + android:windowSoftInputMode="adjustResize" |
13 | + android:exported="true"> | ||
13 | <!-- Specifies an Android theme to apply to this Activity as soon as | 14 | <!-- Specifies an Android theme to apply to this Activity as soon as |
14 | the Android process has started. This theme is visible to the user | 15 | the Android process has started. This theme is visible to the user |
15 | while the Flutter UI initializes. After that, this theme continues | 16 | while the Flutter UI initializes. After that, this theme continues |
@@ -7,38 +7,60 @@ import 'package:modal_bottom_sheet/modal_bottom_sheet.dart'; | @@ -7,38 +7,60 @@ import 'package:modal_bottom_sheet/modal_bottom_sheet.dart'; | ||
7 | class CupertinoSharePage extends StatelessWidget { | 7 | class CupertinoSharePage extends StatelessWidget { |
8 | @override | 8 | @override |
9 | Widget build(BuildContext context) { | 9 | Widget build(BuildContext context) { |
10 | - return Scaffold( | ||
11 | - appBar: appBar(context), | ||
12 | - body: CupertinoPageScaffold( | ||
13 | - child: Center( | ||
14 | - child: Hero( | ||
15 | - tag: 'image', | ||
16 | - child: Image.asset('assets/demo_image.jpeg'), | ||
17 | - )), | ||
18 | - ), | ||
19 | - bottomNavigationBar: bottomAppBar(context)); | ||
20 | - } | 10 | + final baseTextStyle = CupertinoTheme.of(context).textTheme.textStyle; |
21 | 11 | ||
22 | - PreferredSizeWidget appBar(BuildContext context) { | ||
23 | - return CupertinoNavigationBar( | ||
24 | - middle: Column( | ||
25 | - children: <Widget>[ | ||
26 | - Text('New York', style: TextStyle(fontWeight: FontWeight.normal)), | ||
27 | - Text('1 February 11:45', | ||
28 | - style: TextStyle(fontWeight: FontWeight.normal, fontSize: 12)) | ||
29 | - ], | ||
30 | - ), | ||
31 | - trailing: Text( | ||
32 | - 'Edit', | ||
33 | - style: TextStyle( | ||
34 | - color: CupertinoTheme.of(context).primaryColor, | 12 | + return CupertinoPageScaffold( |
13 | + backgroundColor: CupertinoTheme.of(context).scaffoldBackgroundColor, | ||
14 | + navigationBar: CupertinoNavigationBar( | ||
15 | + backgroundColor: CupertinoTheme.of(context).barBackgroundColor, | ||
16 | + middle: Column( | ||
17 | + children: <Widget>[ | ||
18 | + Text( | ||
19 | + 'New York', | ||
20 | + style: baseTextStyle, | ||
21 | + ), | ||
22 | + Text( | ||
23 | + '1 February 11:45', | ||
24 | + style: baseTextStyle.copyWith( | ||
25 | + fontWeight: FontWeight.normal, | ||
26 | + fontSize: 12, | ||
27 | + ), | ||
28 | + ), | ||
29 | + ], | ||
30 | + ), | ||
31 | + trailing: CupertinoButton( | ||
32 | + child: Text('Edit'), | ||
33 | + padding: EdgeInsets.zero, | ||
34 | + onPressed: () {}, | ||
35 | ), | 35 | ), |
36 | ), | 36 | ), |
37 | + child: Column( | ||
38 | + children: [ | ||
39 | + Expanded( | ||
40 | + child: Center( | ||
41 | + child: Hero( | ||
42 | + tag: 'image', | ||
43 | + child: Image.asset('assets/demo_image.jpeg'), | ||
44 | + ), | ||
45 | + ), | ||
46 | + ), | ||
47 | + bottomAppBar(context), | ||
48 | + ], | ||
49 | + ), | ||
37 | ); | 50 | ); |
38 | } | 51 | } |
39 | 52 | ||
40 | Widget bottomAppBar(BuildContext context) { | 53 | Widget bottomAppBar(BuildContext context) { |
41 | - return BottomAppBar( | 54 | + return Container( |
55 | + decoration: BoxDecoration( | ||
56 | + border: Border( | ||
57 | + top: BorderSide( | ||
58 | + width: 0.5, | ||
59 | + color: CupertinoColors.separator.resolveFrom(context), | ||
60 | + ), | ||
61 | + ), | ||
62 | + color: CupertinoTheme.of(context).barBackgroundColor, | ||
63 | + ), | ||
42 | child: Row( | 64 | child: Row( |
43 | mainAxisAlignment: MainAxisAlignment.spaceBetween, | 65 | mainAxisAlignment: MainAxisAlignment.spaceBetween, |
44 | children: <Widget>[ | 66 | children: <Widget>[ |
@@ -76,182 +98,250 @@ class PhotoShareBottomSheet extends StatelessWidget { | @@ -76,182 +98,250 @@ class PhotoShareBottomSheet extends StatelessWidget { | ||
76 | @override | 98 | @override |
77 | Widget build(BuildContext context) { | 99 | Widget build(BuildContext context) { |
78 | return BackdropFilter( | 100 | return BackdropFilter( |
79 | - filter: ImageFilter.blur(sigmaX: 12, sigmaY: 12), | ||
80 | - child: Material( | ||
81 | - color: Colors.transparent, | ||
82 | - child: Scaffold( | ||
83 | - backgroundColor: CupertinoTheme.of(context) | ||
84 | - .scaffoldBackgroundColor | ||
85 | - .withOpacity(0.95), | ||
86 | - extendBodyBehindAppBar: true, | ||
87 | - appBar: appBar(context), | ||
88 | - body: CustomScrollView( | ||
89 | - physics: ClampingScrollPhysics(), | ||
90 | - controller: ModalScrollController.of(context), | ||
91 | - slivers: <Widget>[ | ||
92 | - SliverSafeArea( | ||
93 | - bottom: false, | ||
94 | - sliver: SliverToBoxAdapter( | ||
95 | - child: Container( | ||
96 | - height: 318, | ||
97 | - child: ListView( | ||
98 | - padding: EdgeInsets.all(12).copyWith( | ||
99 | - right: | ||
100 | - MediaQuery.of(context).size.width / 2 - 100), | ||
101 | - reverse: true, | ||
102 | - scrollDirection: Axis.horizontal, | ||
103 | - physics: PageScrollPhysics(), | 101 | + filter: ImageFilter.blur(sigmaX: 12, sigmaY: 12), |
102 | + child: Material( | ||
103 | + color: Colors.transparent, | ||
104 | + child: Scaffold( | ||
105 | + backgroundColor: CupertinoTheme.of(context).scaffoldBackgroundColor, | ||
106 | + extendBodyBehindAppBar: true, | ||
107 | + appBar: appBar(context), | ||
108 | + body: CustomScrollView( | ||
109 | + physics: ClampingScrollPhysics(), | ||
110 | + controller: ModalScrollController.of(context), | ||
111 | + slivers: <Widget>[ | ||
112 | + SliverSafeArea( | ||
113 | + bottom: false, | ||
114 | + sliver: SliverToBoxAdapter( | ||
115 | + child: Container( | ||
116 | + height: 318, | ||
117 | + child: ListView( | ||
118 | + padding: EdgeInsets.all(12).copyWith( | ||
119 | + right: MediaQuery.of(context).size.width / 2 - 100), | ||
120 | + reverse: true, | ||
121 | + scrollDirection: Axis.horizontal, | ||
122 | + physics: PageScrollPhysics(), | ||
123 | + children: <Widget>[ | ||
124 | + Padding( | ||
125 | + padding: EdgeInsets.symmetric(horizontal: 6), | ||
126 | + child: ClipRRect( | ||
127 | + borderRadius: BorderRadius.circular(12), | ||
128 | + child: Hero( | ||
129 | + tag: 'image', | ||
130 | + child: Image.asset('assets/demo_image.jpeg'), | ||
131 | + ), | ||
132 | + ), | ||
133 | + ), | ||
134 | + Padding( | ||
135 | + padding: EdgeInsets.symmetric(horizontal: 6), | ||
136 | + child: ClipRRect( | ||
137 | + borderRadius: BorderRadius.circular(12), | ||
138 | + child: Image.asset('assets/demo_image.jpeg'), | ||
139 | + ), | ||
140 | + ), | ||
141 | + Padding( | ||
142 | + padding: EdgeInsets.symmetric(horizontal: 6), | ||
143 | + child: ClipRRect( | ||
144 | + borderRadius: BorderRadius.circular(12), | ||
145 | + child: Image.asset('assets/demo_image.jpeg'), | ||
146 | + ), | ||
147 | + ), | ||
148 | + ], | ||
149 | + ), | ||
150 | + ), | ||
151 | + ), | ||
152 | + ), | ||
153 | + SliverToBoxAdapter( | ||
154 | + child: Divider(height: 1), | ||
155 | + ), | ||
156 | + sliverContactsSection(context), | ||
157 | + SliverToBoxAdapter( | ||
158 | + child: Divider(height: 1), | ||
159 | + ), | ||
160 | + SliverToBoxAdapter( | ||
161 | + child: Container( | ||
162 | + height: 120, | ||
163 | + padding: EdgeInsets.only(top: 12), | ||
164 | + child: ListView.builder( | ||
165 | + padding: EdgeInsets.all(10), | ||
166 | + scrollDirection: Axis.horizontal, | ||
167 | + itemBuilder: (context, index) { | ||
168 | + final app = apps[index]; | ||
169 | + return Container( | ||
170 | + width: 72, | ||
171 | + margin: EdgeInsets.symmetric(horizontal: 4), | ||
172 | + child: Column( | ||
104 | children: <Widget>[ | 173 | children: <Widget>[ |
105 | - Padding( | ||
106 | - padding: EdgeInsets.symmetric(horizontal: 6), | ||
107 | - child: ClipRRect( | ||
108 | - borderRadius: BorderRadius.circular(12), | ||
109 | - child: Hero( | ||
110 | - tag: 'image', | ||
111 | - child: | ||
112 | - Image.asset('assets/demo_image.jpeg'), | ||
113 | - ))), | ||
114 | - Padding( | ||
115 | - padding: EdgeInsets.symmetric(horizontal: 6), | 174 | + if (app.imageUrl != null) |
175 | + Material( | ||
116 | child: ClipRRect( | 176 | child: ClipRRect( |
117 | - borderRadius: BorderRadius.circular(12), | ||
118 | - child: Image.asset('assets/demo_image.jpeg'), | ||
119 | - )), | ||
120 | - Padding( | ||
121 | - padding: EdgeInsets.symmetric(horizontal: 6), | ||
122 | - child: ClipRRect( | ||
123 | - borderRadius: BorderRadius.circular(12), | ||
124 | - child: Image.asset('assets/demo_image.jpeg'), | ||
125 | - )), | 177 | + child: Container( |
178 | + height: 60, | ||
179 | + width: 60, | ||
180 | + decoration: BoxDecoration( | ||
181 | + image: DecorationImage( | ||
182 | + image: AssetImage(app.imageUrl!), | ||
183 | + fit: BoxFit.cover), | ||
184 | + color: Colors.white, | ||
185 | + borderRadius: | ||
186 | + BorderRadius.circular(15)), | ||
187 | + ), | ||
188 | + ), | ||
189 | + shape: RoundedRectangleBorder( | ||
190 | + borderRadius: BorderRadius.circular(15), | ||
191 | + ), | ||
192 | + elevation: 12, | ||
193 | + shadowColor: Colors.black12, | ||
194 | + ), | ||
195 | + SizedBox(height: 8), | ||
196 | + Text( | ||
197 | + app.title, | ||
198 | + maxLines: 2, | ||
199 | + textAlign: TextAlign.center, | ||
200 | + style: TextStyle(fontSize: 11), | ||
201 | + ) | ||
126 | ], | 202 | ], |
127 | ), | 203 | ), |
204 | + ); | ||
205 | + }, | ||
206 | + itemCount: apps.length, | ||
207 | + ), | ||
208 | + ), | ||
209 | + ), | ||
210 | + SliverPadding( | ||
211 | + padding: EdgeInsets.symmetric(horizontal: 18, vertical: 6), | ||
212 | + sliver: SliverList( | ||
213 | + delegate: SliverChildListDelegate.fixed( | ||
214 | + List<Widget>.from( | ||
215 | + actions.map( | ||
216 | + (action) => Container( | ||
217 | + padding: EdgeInsets.symmetric( | ||
218 | + vertical: 16, horizontal: 16), | ||
219 | + child: Text( | ||
220 | + action.title, | ||
221 | + style: | ||
222 | + CupertinoTheme.of(context).textTheme.textStyle, | ||
223 | + ), | ||
224 | + decoration: BoxDecoration( | ||
225 | + borderRadius: BorderRadius.circular(8), | ||
226 | + color: CupertinoColors | ||
227 | + .tertiarySystemGroupedBackground | ||
228 | + .resolveFrom(context), | ||
229 | + ), | ||
230 | + ), | ||
231 | + ), | ||
232 | + ).addItemInBetween( | ||
233 | + Container( | ||
234 | + width: double.infinity, | ||
235 | + height: 1, | ||
236 | + color: CupertinoColors.separator.resolveFrom(context), | ||
128 | ), | 237 | ), |
129 | ), | 238 | ), |
130 | ), | 239 | ), |
131 | - SliverToBoxAdapter( | ||
132 | - child: Divider(height: 1), | ||
133 | - ), | ||
134 | - sliverContactsSection(context), | ||
135 | - SliverToBoxAdapter( | ||
136 | - child: Divider(height: 1), | 240 | + ), |
241 | + ), | ||
242 | + SliverPadding( | ||
243 | + padding: EdgeInsets.symmetric(horizontal: 18, vertical: 6), | ||
244 | + sliver: SliverList( | ||
245 | + delegate: SliverChildListDelegate.fixed( | ||
246 | + List<Widget>.from( | ||
247 | + actions1.map( | ||
248 | + (action) => Container( | ||
249 | + padding: EdgeInsets.symmetric( | ||
250 | + vertical: 16, horizontal: 16), | ||
251 | + child: Text( | ||
252 | + action.title, | ||
253 | + style: | ||
254 | + CupertinoTheme.of(context).textTheme.textStyle, | ||
255 | + ), | ||
256 | + decoration: BoxDecoration( | ||
257 | + borderRadius: BorderRadius.only( | ||
258 | + topLeft: action == actions1.first | ||
259 | + ? Radius.circular(8) | ||
260 | + : Radius.zero, | ||
261 | + topRight: action == actions1.first | ||
262 | + ? Radius.circular(8) | ||
263 | + : Radius.zero, | ||
264 | + bottomLeft: action == actions1.last | ||
265 | + ? Radius.circular(8) | ||
266 | + : Radius.zero, | ||
267 | + bottomRight: action == actions1.last | ||
268 | + ? Radius.circular(8) | ||
269 | + : Radius.zero, | ||
270 | + ), | ||
271 | + color: CupertinoColors | ||
272 | + .tertiarySystemGroupedBackground | ||
273 | + .resolveFrom(context), | ||
274 | + ), | ||
275 | + ), | ||
276 | + ), | ||
277 | + ).addItemInBetween( | ||
278 | + Container( | ||
279 | + width: double.infinity, | ||
280 | + height: 1, | ||
281 | + color: CupertinoColors.separator.resolveFrom(context), | ||
282 | + ), | ||
283 | + ), | ||
137 | ), | 284 | ), |
138 | - SliverToBoxAdapter( | ||
139 | - child: Container( | ||
140 | - height: 120, | ||
141 | - padding: EdgeInsets.only(top: 12), | ||
142 | - child: ListView.builder( | ||
143 | - padding: EdgeInsets.all(10), | ||
144 | - scrollDirection: Axis.horizontal, | ||
145 | - itemBuilder: (context, index) { | ||
146 | - final app = apps[index]; | ||
147 | - return Container( | ||
148 | - width: 72, | ||
149 | - margin: EdgeInsets.symmetric(horizontal: 4), | ||
150 | - child: Column( | ||
151 | - children: <Widget>[ | ||
152 | - if (app.imageUrl != null) | ||
153 | - Material( | ||
154 | - child: ClipRRect( | ||
155 | - child: Container( | ||
156 | - height: 60, | ||
157 | - width: 60, | ||
158 | - decoration: BoxDecoration( | ||
159 | - image: DecorationImage( | ||
160 | - image: | ||
161 | - AssetImage(app.imageUrl!), | ||
162 | - fit: BoxFit.cover), | ||
163 | - color: Colors.white, | ||
164 | - borderRadius: | ||
165 | - BorderRadius.circular(15)), | ||
166 | - ), | ||
167 | - ), | ||
168 | - shape: RoundedRectangleBorder( | ||
169 | - borderRadius: | ||
170 | - BorderRadius.circular(15)), | ||
171 | - elevation: 12, | ||
172 | - shadowColor: Colors.black12, | ||
173 | - ), | ||
174 | - SizedBox(height: 8), | ||
175 | - Text( | ||
176 | - app.title, | ||
177 | - maxLines: 2, | ||
178 | - textAlign: TextAlign.center, | ||
179 | - style: TextStyle(fontSize: 11), | ||
180 | - ) | ||
181 | - ], | ||
182 | - )); | ||
183 | - }, | ||
184 | - itemCount: apps.length, | 285 | + ), |
286 | + ), | ||
287 | + SliverPadding( | ||
288 | + padding: EdgeInsets.symmetric(horizontal: 18, vertical: 4), | ||
289 | + sliver: SliverList( | ||
290 | + delegate: SliverChildListDelegate.fixed( | ||
291 | + List<Widget>.from( | ||
292 | + actions2.map( | ||
293 | + (action) => Container( | ||
294 | + padding: EdgeInsets.symmetric( | ||
295 | + vertical: 16, horizontal: 16), | ||
296 | + child: Text( | ||
297 | + action.title, | ||
298 | + style: | ||
299 | + CupertinoTheme.of(context).textTheme.textStyle, | ||
300 | + ), | ||
301 | + decoration: BoxDecoration( | ||
302 | + borderRadius: BorderRadius.only( | ||
303 | + topLeft: action == actions2.first | ||
304 | + ? Radius.circular(8) | ||
305 | + : Radius.zero, | ||
306 | + topRight: action == actions2.first | ||
307 | + ? Radius.circular(8) | ||
308 | + : Radius.zero, | ||
309 | + bottomLeft: action == actions2.last | ||
310 | + ? Radius.circular(8) | ||
311 | + : Radius.zero, | ||
312 | + bottomRight: action == actions2.last | ||
313 | + ? Radius.circular(8) | ||
314 | + : Radius.zero, | ||
315 | + ), | ||
316 | + color: CupertinoColors | ||
317 | + .tertiarySystemGroupedBackground | ||
318 | + .resolveFrom(context), | ||
319 | + ), | ||
320 | + ), | ||
321 | + ), | ||
322 | + ).addItemInBetween( | ||
323 | + Container( | ||
324 | + width: double.infinity, | ||
325 | + height: 1, | ||
326 | + color: CupertinoColors.separator.resolveFrom(context), | ||
185 | ), | 327 | ), |
186 | ), | 328 | ), |
187 | ), | 329 | ), |
188 | - SliverPadding( | ||
189 | - padding: | ||
190 | - EdgeInsets.symmetric(horizontal: 18, vertical: 6), | ||
191 | - sliver: SliverList( | ||
192 | - delegate: SliverChildListDelegate.fixed( | ||
193 | - List<Widget>.from(actions.map( | ||
194 | - (action) => Container( | ||
195 | - padding: EdgeInsets.symmetric( | ||
196 | - vertical: 16, horizontal: 16), | ||
197 | - child: Text( | ||
198 | - action.title, | ||
199 | - style: CupertinoTheme.of(context) | ||
200 | - .textTheme | ||
201 | - .textStyle, | ||
202 | - )), | ||
203 | - )).addItemInBetween(Divider( | ||
204 | - height: 1, | ||
205 | - ))), | ||
206 | - )), | ||
207 | - SliverPadding( | ||
208 | - padding: | ||
209 | - EdgeInsets.symmetric(horizontal: 18, vertical: 6), | ||
210 | - sliver: SliverList( | ||
211 | - delegate: SliverChildListDelegate.fixed( | ||
212 | - List<Widget>.from(actions1.map( | ||
213 | - (action) => Container( | ||
214 | - padding: EdgeInsets.symmetric( | ||
215 | - vertical: 16, horizontal: 16), | ||
216 | - child: Text( | ||
217 | - action.title, | ||
218 | - style: CupertinoTheme.of(context) | ||
219 | - .textTheme | ||
220 | - .textStyle, | ||
221 | - )), | ||
222 | - )).addItemInBetween(Divider( | ||
223 | - height: 1, | ||
224 | - ))), | ||
225 | - )), | ||
226 | - SliverPadding( | ||
227 | - padding: | ||
228 | - EdgeInsets.symmetric(horizontal: 18, vertical: 4), | ||
229 | - sliver: SliverList( | ||
230 | - delegate: SliverChildListDelegate.fixed( | ||
231 | - List<Widget>.from(actions2.map( | ||
232 | - (action) => Container( | ||
233 | - padding: EdgeInsets.symmetric( | ||
234 | - vertical: 16, horizontal: 16), | ||
235 | - child: Text( | ||
236 | - action.title, | ||
237 | - style: CupertinoTheme.of(context) | ||
238 | - .textTheme | ||
239 | - .textStyle, | ||
240 | - )), | ||
241 | - )).addItemInBetween(Divider( | ||
242 | - height: 1, | ||
243 | - ))), | ||
244 | - )), | ||
245 | - SliverSafeArea( | ||
246 | - top: false, | ||
247 | - sliver: SliverPadding( | ||
248 | - padding: EdgeInsets.only( | ||
249 | - bottom: 20, | ||
250 | - )), | ||
251 | - ) | ||
252 | - ], | 330 | + ), |
253 | ), | 331 | ), |
254 | - ))); | 332 | + SliverSafeArea( |
333 | + top: false, | ||
334 | + sliver: SliverPadding( | ||
335 | + padding: EdgeInsets.only( | ||
336 | + bottom: 20, | ||
337 | + ), | ||
338 | + ), | ||
339 | + ) | ||
340 | + ], | ||
341 | + ), | ||
342 | + ), | ||
343 | + ), | ||
344 | + ); | ||
255 | } | 345 | } |
256 | 346 | ||
257 | Widget sliverContactsSection(BuildContext context) { | 347 | Widget sliverContactsSection(BuildContext context) { |
@@ -317,28 +407,29 @@ class PhotoShareBottomSheet extends StatelessWidget { | @@ -317,28 +407,29 @@ class PhotoShareBottomSheet extends StatelessWidget { | ||
317 | children: <Widget>[ | 407 | children: <Widget>[ |
318 | SizedBox(width: 18), | 408 | SizedBox(width: 18), |
319 | ClipRRect( | 409 | ClipRRect( |
320 | - borderRadius: BorderRadius.circular(4), | ||
321 | - child: Image.asset( | ||
322 | - 'assets/demo_image.jpeg', | ||
323 | - fit: BoxFit.cover, | ||
324 | - height: 40, | ||
325 | - width: 40, | ||
326 | - )), | 410 | + borderRadius: BorderRadius.circular(4), |
411 | + child: Image.asset( | ||
412 | + 'assets/demo_image.jpeg', | ||
413 | + fit: BoxFit.cover, | ||
414 | + height: 40, | ||
415 | + width: 40, | ||
416 | + ), | ||
417 | + ), | ||
327 | SizedBox(width: 12), | 418 | SizedBox(width: 12), |
328 | Expanded( | 419 | Expanded( |
329 | - child: Column( | ||
330 | - mainAxisAlignment: MainAxisAlignment.center, | ||
331 | - crossAxisAlignment: CrossAxisAlignment.stretch, | ||
332 | - children: <Widget>[ | ||
333 | - Text( | ||
334 | - '1 Photo selected', | ||
335 | - style: CupertinoTheme.of(context) | ||
336 | - .textTheme | ||
337 | - .textStyle | ||
338 | - .copyWith(fontWeight: FontWeight.w600), | ||
339 | - ), | ||
340 | - SizedBox(height: 4), | ||
341 | - Row( | 420 | + child: Column( |
421 | + mainAxisAlignment: MainAxisAlignment.center, | ||
422 | + crossAxisAlignment: CrossAxisAlignment.stretch, | ||
423 | + children: <Widget>[ | ||
424 | + Text( | ||
425 | + '1 Photo selected', | ||
426 | + style: CupertinoTheme.of(context) | ||
427 | + .textTheme | ||
428 | + .textStyle | ||
429 | + .copyWith(fontWeight: FontWeight.w600), | ||
430 | + ), | ||
431 | + SizedBox(height: 4), | ||
432 | + Row( | ||
342 | crossAxisAlignment: CrossAxisAlignment.baseline, | 433 | crossAxisAlignment: CrossAxisAlignment.baseline, |
343 | textBaseline: TextBaseline.alphabetic, | 434 | textBaseline: TextBaseline.alphabetic, |
344 | children: <Widget>[ | 435 | children: <Widget>[ |
@@ -348,8 +439,9 @@ class PhotoShareBottomSheet extends StatelessWidget { | @@ -348,8 +439,9 @@ class PhotoShareBottomSheet extends StatelessWidget { | ||
348 | .textTheme | 439 | .textTheme |
349 | .actionTextStyle | 440 | .actionTextStyle |
350 | .copyWith( | 441 | .copyWith( |
351 | - fontSize: 14, | ||
352 | - fontWeight: FontWeight.normal), | 442 | + fontSize: 14, |
443 | + fontWeight: FontWeight.normal, | ||
444 | + ), | ||
353 | ), | 445 | ), |
354 | SizedBox(width: 2), | 446 | SizedBox(width: 2), |
355 | Icon( | 447 | Icon( |
@@ -358,9 +450,11 @@ class PhotoShareBottomSheet extends StatelessWidget { | @@ -358,9 +450,11 @@ class PhotoShareBottomSheet extends StatelessWidget { | ||
358 | color: | 450 | color: |
359 | CupertinoTheme.of(context).primaryColor, | 451 | CupertinoTheme.of(context).primaryColor, |
360 | ) | 452 | ) |
361 | - ]), | ||
362 | - ], | ||
363 | - )), | 453 | + ], |
454 | + ), | ||
455 | + ], | ||
456 | + ), | ||
457 | + ), | ||
364 | GestureDetector( | 458 | GestureDetector( |
365 | onTap: () => Navigator.of(context).pop(), | 459 | onTap: () => Navigator.of(context).pop(), |
366 | child: Align( | 460 | child: Align( |
@@ -369,13 +463,15 @@ class PhotoShareBottomSheet extends StatelessWidget { | @@ -369,13 +463,15 @@ class PhotoShareBottomSheet extends StatelessWidget { | ||
369 | margin: EdgeInsets.only(top: 14), | 463 | margin: EdgeInsets.only(top: 14), |
370 | padding: EdgeInsets.all(4), | 464 | padding: EdgeInsets.all(4), |
371 | decoration: BoxDecoration( | 465 | decoration: BoxDecoration( |
372 | - color: Colors.black.withOpacity(0.1), | 466 | + color: CupertinoColors.secondarySystemFill |
467 | + .resolveFrom(context), | ||
373 | shape: BoxShape.circle, | 468 | shape: BoxShape.circle, |
374 | ), | 469 | ), |
375 | child: Icon( | 470 | child: Icon( |
376 | Icons.close, | 471 | Icons.close, |
377 | size: 24, | 472 | size: 24, |
378 | - color: Colors.black54, | 473 | + color: CupertinoColors.systemFill |
474 | + .resolveFrom(context), | ||
379 | ), | 475 | ), |
380 | ), | 476 | ), |
381 | ), | 477 | ), |
@@ -24,9 +24,16 @@ class MyApp extends StatelessWidget { | @@ -24,9 +24,16 @@ class MyApp extends StatelessWidget { | ||
24 | Widget build(BuildContext context) { | 24 | Widget build(BuildContext context) { |
25 | return MaterialApp( | 25 | return MaterialApp( |
26 | theme: ThemeData(platform: TargetPlatform.iOS), | 26 | theme: ThemeData(platform: TargetPlatform.iOS), |
27 | + darkTheme: ThemeData.dark().copyWith(platform: TargetPlatform.iOS), | ||
27 | title: 'BottomSheet Modals', | 28 | title: 'BottomSheet Modals', |
28 | builder: (context, Widget? child) => WebFrame( | 29 | builder: (context, Widget? child) => WebFrame( |
29 | - child: child!, | 30 | + child: CupertinoTheme( |
31 | + data: CupertinoThemeData( | ||
32 | + brightness: Theme.of(context).brightness, | ||
33 | + scaffoldBackgroundColor: CupertinoColors.systemBackground, | ||
34 | + ), | ||
35 | + child: child!, | ||
36 | + ), | ||
30 | ), | 37 | ), |
31 | onGenerateRoute: (RouteSettings settings) { | 38 | onGenerateRoute: (RouteSettings settings) { |
32 | switch (settings.name) { | 39 | switch (settings.name) { |
@@ -36,47 +43,48 @@ class MyApp extends StatelessWidget { | @@ -36,47 +43,48 @@ class MyApp extends StatelessWidget { | ||
36 | settings: settings); | 43 | settings: settings); |
37 | } | 44 | } |
38 | return MaterialPageRoute( | 45 | return MaterialPageRoute( |
39 | - builder: (context) => Scaffold( | ||
40 | - body: CupertinoScaffold( | ||
41 | - body: Builder( | ||
42 | - builder: (context) => CupertinoPageScaffold( | ||
43 | - backgroundColor: Colors.white, | ||
44 | - navigationBar: CupertinoNavigationBar( | ||
45 | - transitionBetweenRoutes: false, | ||
46 | - middle: Text('Normal Navigation Presentation'), | ||
47 | - trailing: GestureDetector( | ||
48 | - child: Icon(Icons.arrow_upward), | ||
49 | - onTap: () => CupertinoScaffold | ||
50 | - .showCupertinoModalBottomSheet( | ||
51 | - expand: true, | ||
52 | - context: context, | ||
53 | - backgroundColor: Colors.transparent, | ||
54 | - builder: (context) => Stack( | ||
55 | - children: <Widget>[ | ||
56 | - ModalWithScroll(), | ||
57 | - Positioned( | ||
58 | - height: 40, | ||
59 | - left: 40, | ||
60 | - right: 40, | ||
61 | - bottom: 20, | ||
62 | - child: MaterialButton( | ||
63 | - onPressed: () => Navigator.of( | ||
64 | - context) | ||
65 | - .popUntil((route) => | ||
66 | - route.settings.name == '/'), | ||
67 | - child: Text('Pop back home'), | ||
68 | - ), | ||
69 | - ) | ||
70 | - ], | ||
71 | - ), | ||
72 | - )), | 46 | + builder: (context) => Scaffold( |
47 | + body: CupertinoScaffold( | ||
48 | + body: Builder( | ||
49 | + builder: (context) => CupertinoPageScaffold( | ||
50 | + navigationBar: CupertinoNavigationBar( | ||
51 | + transitionBetweenRoutes: false, | ||
52 | + middle: Text('Normal Navigation Presentation'), | ||
53 | + trailing: GestureDetector( | ||
54 | + child: Icon(Icons.arrow_upward), | ||
55 | + onTap: () => | ||
56 | + CupertinoScaffold.showCupertinoModalBottomSheet( | ||
57 | + expand: true, | ||
58 | + context: context, | ||
59 | + backgroundColor: Colors.transparent, | ||
60 | + builder: (context) => Stack( | ||
61 | + children: <Widget>[ | ||
62 | + ModalWithScroll(), | ||
63 | + Positioned( | ||
64 | + height: 40, | ||
65 | + left: 40, | ||
66 | + right: 40, | ||
67 | + bottom: 20, | ||
68 | + child: MaterialButton( | ||
69 | + onPressed: () => Navigator.of(context).popUntil( | ||
70 | + (route) => route.settings.name == '/'), | ||
71 | + child: Text('Pop back home'), | ||
72 | + ), | ||
73 | + ) | ||
74 | + ], | ||
73 | ), | 75 | ), |
74 | - child: Center(child: Container()), | ||
75 | ), | 76 | ), |
76 | ), | 77 | ), |
77 | ), | 78 | ), |
79 | + child: Center( | ||
80 | + child: Container(), | ||
81 | + ), | ||
78 | ), | 82 | ), |
79 | - settings: settings); | 83 | + ), |
84 | + ), | ||
85 | + ), | ||
86 | + settings: settings, | ||
87 | + ); | ||
80 | }, | 88 | }, |
81 | debugShowCheckedModeBanner: false, | 89 | debugShowCheckedModeBanner: false, |
82 | ); | 90 | ); |
@@ -98,7 +106,6 @@ class _MyHomePageState extends State<MyHomePage> { | @@ -98,7 +106,6 @@ class _MyHomePageState extends State<MyHomePage> { | ||
98 | return Material( | 106 | return Material( |
99 | child: Scaffold( | 107 | child: Scaffold( |
100 | body: CupertinoPageScaffold( | 108 | body: CupertinoPageScaffold( |
101 | - backgroundColor: Colors.white, | ||
102 | navigationBar: CupertinoNavigationBar( | 109 | navigationBar: CupertinoNavigationBar( |
103 | transitionBetweenRoutes: false, | 110 | transitionBetweenRoutes: false, |
104 | middle: Text('iOS13 Modal Presentation'), | 111 | middle: Text('iOS13 Modal Presentation'), |
@@ -123,43 +130,48 @@ class _MyHomePageState extends State<MyHomePage> { | @@ -123,43 +130,48 @@ class _MyHomePageState extends State<MyHomePage> { | ||
123 | builder: (context) => CupertinoSharePage()))), | 130 | builder: (context) => CupertinoSharePage()))), |
124 | section('STYLES'), | 131 | section('STYLES'), |
125 | ListTile( | 132 | ListTile( |
126 | - title: Text('Material fit'), | ||
127 | - onTap: () => showMaterialModalBottomSheet( | ||
128 | - expand: false, | ||
129 | - context: context, | ||
130 | - backgroundColor: Colors.transparent, | ||
131 | - builder: (context) => ModalFit(), | ||
132 | - )), | 133 | + title: Text('Material fit'), |
134 | + onTap: () => showMaterialModalBottomSheet( | ||
135 | + expand: false, | ||
136 | + context: context, | ||
137 | + backgroundColor: Colors.transparent, | ||
138 | + builder: (context) => ModalFit(), | ||
139 | + ), | ||
140 | + ), | ||
133 | ListTile( | 141 | ListTile( |
134 | - title: Text('Bar Modal'), | ||
135 | - onTap: () => showBarModalBottomSheet( | ||
136 | - expand: true, | ||
137 | - context: context, | ||
138 | - backgroundColor: Colors.transparent, | ||
139 | - builder: (context) => ModalInsideModal(), | ||
140 | - )), | 142 | + title: Text('Bar Modal'), |
143 | + onTap: () => showBarModalBottomSheet( | ||
144 | + expand: true, | ||
145 | + context: context, | ||
146 | + backgroundColor: Colors.transparent, | ||
147 | + builder: (context) => ModalInsideModal(), | ||
148 | + ), | ||
149 | + ), | ||
141 | ListTile( | 150 | ListTile( |
142 | - title: Text('Avatar Modal'), | ||
143 | - onTap: () => showAvatarModalBottomSheet( | ||
144 | - expand: true, | ||
145 | - context: context, | ||
146 | - backgroundColor: Colors.transparent, | ||
147 | - builder: (context) => ModalInsideModal(), | ||
148 | - )), | 151 | + title: Text('Avatar Modal'), |
152 | + onTap: () => showAvatarModalBottomSheet( | ||
153 | + expand: true, | ||
154 | + context: context, | ||
155 | + backgroundColor: Colors.transparent, | ||
156 | + builder: (context) => ModalInsideModal(), | ||
157 | + ), | ||
158 | + ), | ||
149 | ListTile( | 159 | ListTile( |
150 | - title: Text('Float Modal'), | ||
151 | - onTap: () => showFloatingModalBottomSheet( | ||
152 | - context: context, | ||
153 | - builder: (context) => ModalFit(), | ||
154 | - )), | 160 | + title: Text('Float Modal'), |
161 | + onTap: () => showFloatingModalBottomSheet( | ||
162 | + context: context, | ||
163 | + builder: (context) => ModalFit(), | ||
164 | + ), | ||
165 | + ), | ||
155 | ListTile( | 166 | ListTile( |
156 | - title: Text('Cupertino Modal fit'), | ||
157 | - onTap: () => showCupertinoModalBottomSheet( | ||
158 | - expand: false, | ||
159 | - context: context, | ||
160 | - backgroundColor: Colors.transparent, | ||
161 | - builder: (context) => ModalFit(), | ||
162 | - )), | 167 | + title: Text('Cupertino Modal fit'), |
168 | + onTap: () => showCupertinoModalBottomSheet( | ||
169 | + expand: false, | ||
170 | + context: context, | ||
171 | + backgroundColor: Colors.transparent, | ||
172 | + builder: (context) => ModalFit(), | ||
173 | + ), | ||
174 | + ), | ||
163 | section('COMPLEX CASES'), | 175 | section('COMPLEX CASES'), |
164 | ListTile( | 176 | ListTile( |
165 | title: Text('Cupertino Small Modal forced to expand'), | 177 | title: Text('Cupertino Small Modal forced to expand'), |
@@ -170,22 +182,23 @@ class _MyHomePageState extends State<MyHomePage> { | @@ -170,22 +182,23 @@ class _MyHomePageState extends State<MyHomePage> { | ||
170 | builder: (context) => ModalFit(), | 182 | builder: (context) => ModalFit(), |
171 | )), | 183 | )), |
172 | ListTile( | 184 | ListTile( |
173 | - title: Text('Reverse list'), | ||
174 | - onTap: () => showBarModalBottomSheet( | ||
175 | - expand: true, | ||
176 | - context: context, | ||
177 | - backgroundColor: Colors.transparent, | ||
178 | - builder: (context) => | ||
179 | - ModalInsideModal(reverse: true), | ||
180 | - )), | 185 | + title: Text('Reverse list'), |
186 | + onTap: () => showBarModalBottomSheet( | ||
187 | + expand: true, | ||
188 | + context: context, | ||
189 | + backgroundColor: Colors.transparent, | ||
190 | + builder: (context) => ModalInsideModal(reverse: true), | ||
191 | + ), | ||
192 | + ), | ||
181 | ListTile( | 193 | ListTile( |
182 | - title: Text('Cupertino Modal inside modal'), | ||
183 | - onTap: () => showCupertinoModalBottomSheet( | ||
184 | - expand: true, | ||
185 | - context: context, | ||
186 | - backgroundColor: Colors.transparent, | ||
187 | - builder: (context) => ModalInsideModal(), | ||
188 | - )), | 194 | + title: Text('Cupertino Modal inside modal'), |
195 | + onTap: () => showCupertinoModalBottomSheet( | ||
196 | + expand: true, | ||
197 | + context: context, | ||
198 | + backgroundColor: Colors.transparent, | ||
199 | + builder: (context) => ModalInsideModal(), | ||
200 | + ), | ||
201 | + ), | ||
189 | ListTile( | 202 | ListTile( |
190 | title: Text('Cupertino Modal with inside navigation'), | 203 | title: Text('Cupertino Modal with inside navigation'), |
191 | onTap: () => showCupertinoModalBottomSheet( | 204 | onTap: () => showCupertinoModalBottomSheet( |
@@ -195,36 +208,40 @@ class _MyHomePageState extends State<MyHomePage> { | @@ -195,36 +208,40 @@ class _MyHomePageState extends State<MyHomePage> { | ||
195 | builder: (context) => ModalWithNavigator(), | 208 | builder: (context) => ModalWithNavigator(), |
196 | )), | 209 | )), |
197 | ListTile( | 210 | ListTile( |
198 | - title: | ||
199 | - Text('Cupertino Navigator + Scroll + WillPopScope'), | ||
200 | - onTap: () => showCupertinoModalBottomSheet( | ||
201 | - expand: true, | ||
202 | - context: context, | ||
203 | - backgroundColor: Colors.transparent, | ||
204 | - builder: (context) => ComplexModal(), | ||
205 | - )), | 211 | + title: |
212 | + Text('Cupertino Navigator + Scroll + WillPopScope'), | ||
213 | + onTap: () => showCupertinoModalBottomSheet( | ||
214 | + expand: true, | ||
215 | + context: context, | ||
216 | + backgroundColor: Colors.transparent, | ||
217 | + builder: (context) => ComplexModal(), | ||
218 | + ), | ||
219 | + ), | ||
206 | ListTile( | 220 | ListTile( |
207 | - title: Text('Modal with WillPopScope'), | ||
208 | - onTap: () => showCupertinoModalBottomSheet( | ||
209 | - expand: true, | ||
210 | - context: context, | ||
211 | - backgroundColor: Colors.transparent, | ||
212 | - builder: (context) => ModalWillScope(), | ||
213 | - )), | 221 | + title: Text('Modal with WillPopScope'), |
222 | + onTap: () => showCupertinoModalBottomSheet( | ||
223 | + expand: true, | ||
224 | + context: context, | ||
225 | + backgroundColor: Colors.transparent, | ||
226 | + builder: (context) => ModalWillScope(), | ||
227 | + ), | ||
228 | + ), | ||
214 | ListTile( | 229 | ListTile( |
215 | - title: Text('Modal with Nested Scroll'), | ||
216 | - onTap: () => showCupertinoModalBottomSheet( | ||
217 | - expand: true, | ||
218 | - context: context, | ||
219 | - builder: (context) => NestedScrollModal(), | ||
220 | - )), | 230 | + title: Text('Modal with Nested Scroll'), |
231 | + onTap: () => showCupertinoModalBottomSheet( | ||
232 | + expand: true, | ||
233 | + context: context, | ||
234 | + builder: (context) => NestedScrollModal(), | ||
235 | + ), | ||
236 | + ), | ||
221 | ListTile( | 237 | ListTile( |
222 | - title: Text('Modal with PageView'), | ||
223 | - onTap: () => showBarModalBottomSheet( | ||
224 | - expand: true, | ||
225 | - context: context, | ||
226 | - builder: (context) => ModalWithPageView(), | ||
227 | - )), | 238 | + title: Text('Modal with PageView'), |
239 | + onTap: () => showBarModalBottomSheet( | ||
240 | + expand: true, | ||
241 | + context: context, | ||
242 | + builder: (context) => ModalWithPageView(), | ||
243 | + ), | ||
244 | + ), | ||
228 | SizedBox( | 245 | SizedBox( |
229 | height: 60, | 246 | height: 60, |
230 | ) | 247 | ) |
@@ -240,10 +257,11 @@ class _MyHomePageState extends State<MyHomePage> { | @@ -240,10 +257,11 @@ class _MyHomePageState extends State<MyHomePage> { | ||
240 | 257 | ||
241 | Widget section(String title) { | 258 | Widget section(String title) { |
242 | return Padding( | 259 | return Padding( |
243 | - padding: EdgeInsets.fromLTRB(16, 20, 16, 8), | ||
244 | - child: Text( | ||
245 | - title, | ||
246 | - style: Theme.of(context).textTheme.caption, | ||
247 | - )); | 260 | + padding: EdgeInsets.fromLTRB(16, 20, 16, 8), |
261 | + child: Text( | ||
262 | + title, | ||
263 | + style: Theme.of(context).textTheme.caption, | ||
264 | + ), | ||
265 | + ); | ||
248 | } | 266 | } |
249 | } | 267 | } |
@@ -17,52 +17,59 @@ class AvatarBottomSheet extends StatelessWidget { | @@ -17,52 +17,59 @@ class AvatarBottomSheet extends StatelessWidget { | ||
17 | return AnnotatedRegion<SystemUiOverlayStyle>( | 17 | return AnnotatedRegion<SystemUiOverlayStyle>( |
18 | value: SystemUiOverlayStyle.light, | 18 | value: SystemUiOverlayStyle.light, |
19 | child: Column( | 19 | child: Column( |
20 | - mainAxisSize: MainAxisSize.min, | ||
21 | - crossAxisAlignment: CrossAxisAlignment.start, | ||
22 | - children: [ | ||
23 | - SizedBox(height: 12), | ||
24 | - SafeArea( | ||
25 | - bottom: false, | ||
26 | - child: AnimatedBuilder( | ||
27 | - animation: animation, | ||
28 | - builder: (context, child) => Transform.translate( | ||
29 | - offset: Offset(0, (1 - animation.value) * 100), | ||
30 | - child: Opacity( | ||
31 | - child: child, | ||
32 | - opacity: max(0, animation.value * 2 - 1))), | ||
33 | - child: Row( | ||
34 | - children: <Widget>[ | ||
35 | - SizedBox(width: 20), | ||
36 | - CircleAvatar( | ||
37 | - child: Text('JB'), | ||
38 | - radius: 32, | ||
39 | - ), | ||
40 | - ], | 20 | + mainAxisSize: MainAxisSize.min, |
21 | + crossAxisAlignment: CrossAxisAlignment.start, | ||
22 | + children: [ | ||
23 | + SizedBox(height: 12), | ||
24 | + SafeArea( | ||
25 | + bottom: false, | ||
26 | + child: AnimatedBuilder( | ||
27 | + animation: animation, | ||
28 | + builder: (context, child) => Transform.translate( | ||
29 | + offset: Offset(0, (1 - animation.value) * 100), | ||
30 | + child: Opacity( | ||
31 | + child: child, opacity: max(0, animation.value * 2 - 1))), | ||
32 | + child: Row( | ||
33 | + children: <Widget>[ | ||
34 | + SizedBox(width: 20), | ||
35 | + CircleAvatar( | ||
36 | + child: Text( | ||
37 | + 'JB', | ||
38 | + style: TextStyle(color: Colors.black), | ||
39 | + ), | ||
40 | + radius: 32, | ||
41 | + backgroundColor: Colors.blueAccent, | ||
41 | ), | 42 | ), |
42 | - )), | ||
43 | - SizedBox(height: 12), | ||
44 | - Flexible( | ||
45 | - flex: 1, | ||
46 | - fit: FlexFit.loose, | ||
47 | - child: ClipRRect( | ||
48 | - borderRadius: BorderRadius.only( | ||
49 | - topLeft: Radius.circular(15), | ||
50 | - topRight: Radius.circular(15)), | ||
51 | - child: Container( | ||
52 | - decoration: BoxDecoration( | ||
53 | - color: Theme.of(context).scaffoldBackgroundColor, | ||
54 | - boxShadow: [ | ||
55 | - BoxShadow( | ||
56 | - blurRadius: 10, | ||
57 | - color: Colors.black12, | ||
58 | - spreadRadius: 5) | ||
59 | - ]), | ||
60 | - width: double.infinity, | ||
61 | - child: MediaQuery.removePadding( | ||
62 | - context: context, removeTop: true, child: child)), | 43 | + ], |
63 | ), | 44 | ), |
64 | ), | 45 | ), |
65 | - ]), | 46 | + ), |
47 | + SizedBox(height: 12), | ||
48 | + Flexible( | ||
49 | + flex: 1, | ||
50 | + fit: FlexFit.loose, | ||
51 | + child: ClipRRect( | ||
52 | + borderRadius: BorderRadius.only( | ||
53 | + topLeft: Radius.circular(15), topRight: Radius.circular(15)), | ||
54 | + child: Container( | ||
55 | + decoration: BoxDecoration( | ||
56 | + color: Theme.of(context).scaffoldBackgroundColor, | ||
57 | + boxShadow: [ | ||
58 | + BoxShadow( | ||
59 | + blurRadius: 10, | ||
60 | + color: Colors.black12, | ||
61 | + spreadRadius: 5, | ||
62 | + ), | ||
63 | + ], | ||
64 | + ), | ||
65 | + width: double.infinity, | ||
66 | + child: MediaQuery.removePadding( | ||
67 | + context: context, removeTop: true, child: child), | ||
68 | + ), | ||
69 | + ), | ||
70 | + ), | ||
71 | + ], | ||
72 | + ), | ||
66 | ); | 73 | ); |
67 | } | 74 | } |
68 | } | 75 | } |
-
Please register or login to post a comment