Jaime Blasco
Committed by GitHub

Merge pull request #232 from bierbaumtim/example-darkmode

Darkmode support for example
@@ -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
1 buildscript { 1 buildscript {
2 - ext.kotlin_version = '1.3.50' 2 + ext.kotlin_version = '1.6.10'
3 repositories { 3 repositories {
4 google() 4 google()
5 jcenter() 5 jcenter()
@@ -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( 10 + final baseTextStyle = CupertinoTheme.of(context).textTheme.textStyle;
  11 +
  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 + ),
  36 + ),
  37 + child: Column(
  38 + children: [
  39 + Expanded(
13 child: Center( 40 child: Center(
14 child: Hero( 41 child: Hero(
15 tag: 'image', 42 tag: 'image',
16 child: Image.asset('assets/demo_image.jpeg'), 43 child: Image.asset('assets/demo_image.jpeg'),
17 - )),  
18 ), 44 ),
19 - bottomNavigationBar: bottomAppBar(context));  
20 - }  
21 -  
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 ), 45 ),
31 - trailing: Text(  
32 - 'Edit',  
33 - style: TextStyle(  
34 - color: CupertinoTheme.of(context).primaryColor,  
35 ), 46 ),
  47 + bottomAppBar(context),
  48 + ],
36 ), 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>[
@@ -80,9 +102,7 @@ class PhotoShareBottomSheet extends StatelessWidget { @@ -80,9 +102,7 @@ class PhotoShareBottomSheet extends StatelessWidget {
80 child: Material( 102 child: Material(
81 color: Colors.transparent, 103 color: Colors.transparent,
82 child: Scaffold( 104 child: Scaffold(
83 - backgroundColor: CupertinoTheme.of(context)  
84 - .scaffoldBackgroundColor  
85 - .withOpacity(0.95), 105 + backgroundColor: CupertinoTheme.of(context).scaffoldBackgroundColor,
86 extendBodyBehindAppBar: true, 106 extendBodyBehindAppBar: true,
87 appBar: appBar(context), 107 appBar: appBar(context),
88 body: CustomScrollView( 108 body: CustomScrollView(
@@ -96,8 +116,7 @@ class PhotoShareBottomSheet extends StatelessWidget { @@ -96,8 +116,7 @@ class PhotoShareBottomSheet extends StatelessWidget {
96 height: 318, 116 height: 318,
97 child: ListView( 117 child: ListView(
98 padding: EdgeInsets.all(12).copyWith( 118 padding: EdgeInsets.all(12).copyWith(
99 - right:  
100 - MediaQuery.of(context).size.width / 2 - 100), 119 + right: MediaQuery.of(context).size.width / 2 - 100),
101 reverse: true, 120 reverse: true,
102 scrollDirection: Axis.horizontal, 121 scrollDirection: Axis.horizontal,
103 physics: PageScrollPhysics(), 122 physics: PageScrollPhysics(),
@@ -108,21 +127,24 @@ class PhotoShareBottomSheet extends StatelessWidget { @@ -108,21 +127,24 @@ class PhotoShareBottomSheet extends StatelessWidget {
108 borderRadius: BorderRadius.circular(12), 127 borderRadius: BorderRadius.circular(12),
109 child: Hero( 128 child: Hero(
110 tag: 'image', 129 tag: 'image',
111 - child:  
112 - Image.asset('assets/demo_image.jpeg'),  
113 - ))), 130 + child: Image.asset('assets/demo_image.jpeg'),
  131 + ),
  132 + ),
  133 + ),
114 Padding( 134 Padding(
115 padding: EdgeInsets.symmetric(horizontal: 6), 135 padding: EdgeInsets.symmetric(horizontal: 6),
116 child: ClipRRect( 136 child: ClipRRect(
117 borderRadius: BorderRadius.circular(12), 137 borderRadius: BorderRadius.circular(12),
118 child: Image.asset('assets/demo_image.jpeg'), 138 child: Image.asset('assets/demo_image.jpeg'),
119 - )), 139 + ),
  140 + ),
120 Padding( 141 Padding(
121 padding: EdgeInsets.symmetric(horizontal: 6), 142 padding: EdgeInsets.symmetric(horizontal: 6),
122 child: ClipRRect( 143 child: ClipRRect(
123 borderRadius: BorderRadius.circular(12), 144 borderRadius: BorderRadius.circular(12),
124 child: Image.asset('assets/demo_image.jpeg'), 145 child: Image.asset('assets/demo_image.jpeg'),
125 - )), 146 + ),
  147 + ),
126 ], 148 ],
127 ), 149 ),
128 ), 150 ),
@@ -157,8 +179,7 @@ class PhotoShareBottomSheet extends StatelessWidget { @@ -157,8 +179,7 @@ class PhotoShareBottomSheet extends StatelessWidget {
157 width: 60, 179 width: 60,
158 decoration: BoxDecoration( 180 decoration: BoxDecoration(
159 image: DecorationImage( 181 image: DecorationImage(
160 - image:  
161 - AssetImage(app.imageUrl!), 182 + image: AssetImage(app.imageUrl!),
162 fit: BoxFit.cover), 183 fit: BoxFit.cover),
163 color: Colors.white, 184 color: Colors.white,
164 borderRadius: 185 borderRadius:
@@ -166,8 +187,8 @@ class PhotoShareBottomSheet extends StatelessWidget { @@ -166,8 +187,8 @@ class PhotoShareBottomSheet extends StatelessWidget {
166 ), 187 ),
167 ), 188 ),
168 shape: RoundedRectangleBorder( 189 shape: RoundedRectangleBorder(
169 - borderRadius:  
170 - BorderRadius.circular(15)), 190 + borderRadius: BorderRadius.circular(15),
  191 + ),
171 elevation: 12, 192 elevation: 12,
172 shadowColor: Colors.black12, 193 shadowColor: Colors.black12,
173 ), 194 ),
@@ -179,79 +200,148 @@ class PhotoShareBottomSheet extends StatelessWidget { @@ -179,79 +200,148 @@ class PhotoShareBottomSheet extends StatelessWidget {
179 style: TextStyle(fontSize: 11), 200 style: TextStyle(fontSize: 11),
180 ) 201 )
181 ], 202 ],
182 - )); 203 + ),
  204 + );
183 }, 205 },
184 itemCount: apps.length, 206 itemCount: apps.length,
185 ), 207 ),
186 ), 208 ),
187 ), 209 ),
188 SliverPadding( 210 SliverPadding(
189 - padding:  
190 - EdgeInsets.symmetric(horizontal: 18, vertical: 6), 211 + padding: EdgeInsets.symmetric(horizontal: 18, vertical: 6),
191 sliver: SliverList( 212 sliver: SliverList(
192 delegate: SliverChildListDelegate.fixed( 213 delegate: SliverChildListDelegate.fixed(
193 - List<Widget>.from(actions.map( 214 + List<Widget>.from(
  215 + actions.map(
194 (action) => Container( 216 (action) => Container(
195 padding: EdgeInsets.symmetric( 217 padding: EdgeInsets.symmetric(
196 vertical: 16, horizontal: 16), 218 vertical: 16, horizontal: 16),
197 child: Text( 219 child: Text(
198 action.title, 220 action.title,
199 - style: CupertinoTheme.of(context)  
200 - .textTheme  
201 - .textStyle,  
202 - )),  
203 - )).addItemInBetween(Divider( 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,
204 height: 1, 235 height: 1,
205 - ))),  
206 - )), 236 + color: CupertinoColors.separator.resolveFrom(context),
  237 + ),
  238 + ),
  239 + ),
  240 + ),
  241 + ),
207 SliverPadding( 242 SliverPadding(
208 - padding:  
209 - EdgeInsets.symmetric(horizontal: 18, vertical: 6), 243 + padding: EdgeInsets.symmetric(horizontal: 18, vertical: 6),
210 sliver: SliverList( 244 sliver: SliverList(
211 delegate: SliverChildListDelegate.fixed( 245 delegate: SliverChildListDelegate.fixed(
212 - List<Widget>.from(actions1.map( 246 + List<Widget>.from(
  247 + actions1.map(
213 (action) => Container( 248 (action) => Container(
214 padding: EdgeInsets.symmetric( 249 padding: EdgeInsets.symmetric(
215 vertical: 16, horizontal: 16), 250 vertical: 16, horizontal: 16),
216 child: Text( 251 child: Text(
217 action.title, 252 action.title,
218 - style: CupertinoTheme.of(context)  
219 - .textTheme  
220 - .textStyle,  
221 - )),  
222 - )).addItemInBetween(Divider( 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,
223 height: 1, 280 height: 1,
224 - ))),  
225 - )), 281 + color: CupertinoColors.separator.resolveFrom(context),
  282 + ),
  283 + ),
  284 + ),
  285 + ),
  286 + ),
226 SliverPadding( 287 SliverPadding(
227 - padding:  
228 - EdgeInsets.symmetric(horizontal: 18, vertical: 4), 288 + padding: EdgeInsets.symmetric(horizontal: 18, vertical: 4),
229 sliver: SliverList( 289 sliver: SliverList(
230 delegate: SliverChildListDelegate.fixed( 290 delegate: SliverChildListDelegate.fixed(
231 - List<Widget>.from(actions2.map( 291 + List<Widget>.from(
  292 + actions2.map(
232 (action) => Container( 293 (action) => Container(
233 padding: EdgeInsets.symmetric( 294 padding: EdgeInsets.symmetric(
234 vertical: 16, horizontal: 16), 295 vertical: 16, horizontal: 16),
235 child: Text( 296 child: Text(
236 action.title, 297 action.title,
237 - style: CupertinoTheme.of(context)  
238 - .textTheme  
239 - .textStyle,  
240 - )),  
241 - )).addItemInBetween(Divider( 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,
242 height: 1, 325 height: 1,
243 - ))),  
244 - )), 326 + color: CupertinoColors.separator.resolveFrom(context),
  327 + ),
  328 + ),
  329 + ),
  330 + ),
  331 + ),
245 SliverSafeArea( 332 SliverSafeArea(
246 top: false, 333 top: false,
247 sliver: SliverPadding( 334 sliver: SliverPadding(
248 padding: EdgeInsets.only( 335 padding: EdgeInsets.only(
249 bottom: 20, 336 bottom: 20,
250 - )), 337 + ),
  338 + ),
251 ) 339 )
252 ], 340 ],
253 ), 341 ),
254 - ))); 342 + ),
  343 + ),
  344 + );
255 } 345 }
256 346
257 Widget sliverContactsSection(BuildContext context) { 347 Widget sliverContactsSection(BuildContext context) {
@@ -323,7 +413,8 @@ class PhotoShareBottomSheet extends StatelessWidget { @@ -323,7 +413,8 @@ class PhotoShareBottomSheet extends StatelessWidget {
323 fit: BoxFit.cover, 413 fit: BoxFit.cover,
324 height: 40, 414 height: 40,
325 width: 40, 415 width: 40,
326 - )), 416 + ),
  417 + ),
327 SizedBox(width: 12), 418 SizedBox(width: 12),
328 Expanded( 419 Expanded(
329 child: Column( 420 child: Column(
@@ -349,7 +440,8 @@ class PhotoShareBottomSheet extends StatelessWidget { @@ -349,7 +440,8 @@ class PhotoShareBottomSheet extends StatelessWidget {
349 .actionTextStyle 440 .actionTextStyle
350 .copyWith( 441 .copyWith(
351 fontSize: 14, 442 fontSize: 14,
352 - fontWeight: FontWeight.normal), 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 ], 453 ],
363 - )), 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,10 +24,17 @@ class MyApp extends StatelessWidget { @@ -24,10 +24,17 @@ 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(
  30 + child: CupertinoTheme(
  31 + data: CupertinoThemeData(
  32 + brightness: Theme.of(context).brightness,
  33 + scaffoldBackgroundColor: CupertinoColors.systemBackground,
  34 + ),
29 child: child!, 35 child: child!,
30 ), 36 ),
  37 + ),
31 onGenerateRoute: (RouteSettings settings) { 38 onGenerateRoute: (RouteSettings settings) {
32 switch (settings.name) { 39 switch (settings.name) {
33 case '/': 40 case '/':
@@ -40,14 +47,13 @@ class MyApp extends StatelessWidget { @@ -40,14 +47,13 @@ class MyApp extends StatelessWidget {
40 body: CupertinoScaffold( 47 body: CupertinoScaffold(
41 body: Builder( 48 body: Builder(
42 builder: (context) => CupertinoPageScaffold( 49 builder: (context) => CupertinoPageScaffold(
43 - backgroundColor: Colors.white,  
44 navigationBar: CupertinoNavigationBar( 50 navigationBar: CupertinoNavigationBar(
45 transitionBetweenRoutes: false, 51 transitionBetweenRoutes: false,
46 middle: Text('Normal Navigation Presentation'), 52 middle: Text('Normal Navigation Presentation'),
47 trailing: GestureDetector( 53 trailing: GestureDetector(
48 child: Icon(Icons.arrow_upward), 54 child: Icon(Icons.arrow_upward),
49 - onTap: () => CupertinoScaffold  
50 - .showCupertinoModalBottomSheet( 55 + onTap: () =>
  56 + CupertinoScaffold.showCupertinoModalBottomSheet(
51 expand: true, 57 expand: true,
52 context: context, 58 context: context,
53 backgroundColor: Colors.transparent, 59 backgroundColor: Colors.transparent,
@@ -60,23 +66,25 @@ class MyApp extends StatelessWidget { @@ -60,23 +66,25 @@ class MyApp extends StatelessWidget {
60 right: 40, 66 right: 40,
61 bottom: 20, 67 bottom: 20,
62 child: MaterialButton( 68 child: MaterialButton(
63 - onPressed: () => Navigator.of(  
64 - context)  
65 - .popUntil((route) =>  
66 - route.settings.name == '/'), 69 + onPressed: () => Navigator.of(context).popUntil(
  70 + (route) => route.settings.name == '/'),
67 child: Text('Pop back home'), 71 child: Text('Pop back home'),
68 ), 72 ),
69 ) 73 )
70 ], 74 ],
71 ), 75 ),
72 - )),  
73 ), 76 ),
74 - child: Center(child: Container()),  
75 ), 77 ),
76 ), 78 ),
  79 + child: Center(
  80 + child: Container(),
77 ), 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'),
@@ -129,7 +136,8 @@ class _MyHomePageState extends State<MyHomePage> { @@ -129,7 +136,8 @@ class _MyHomePageState extends State<MyHomePage> {
129 context: context, 136 context: context,
130 backgroundColor: Colors.transparent, 137 backgroundColor: Colors.transparent,
131 builder: (context) => ModalFit(), 138 builder: (context) => ModalFit(),
132 - )), 139 + ),
  140 + ),
133 ListTile( 141 ListTile(
134 title: Text('Bar Modal'), 142 title: Text('Bar Modal'),
135 onTap: () => showBarModalBottomSheet( 143 onTap: () => showBarModalBottomSheet(
@@ -137,7 +145,8 @@ class _MyHomePageState extends State<MyHomePage> { @@ -137,7 +145,8 @@ class _MyHomePageState extends State<MyHomePage> {
137 context: context, 145 context: context,
138 backgroundColor: Colors.transparent, 146 backgroundColor: Colors.transparent,
139 builder: (context) => ModalInsideModal(), 147 builder: (context) => ModalInsideModal(),
140 - )), 148 + ),
  149 + ),
141 ListTile( 150 ListTile(
142 title: Text('Avatar Modal'), 151 title: Text('Avatar Modal'),
143 onTap: () => showAvatarModalBottomSheet( 152 onTap: () => showAvatarModalBottomSheet(
@@ -145,13 +154,15 @@ class _MyHomePageState extends State<MyHomePage> { @@ -145,13 +154,15 @@ class _MyHomePageState extends State<MyHomePage> {
145 context: context, 154 context: context,
146 backgroundColor: Colors.transparent, 155 backgroundColor: Colors.transparent,
147 builder: (context) => ModalInsideModal(), 156 builder: (context) => ModalInsideModal(),
148 - )), 157 + ),
  158 + ),
149 ListTile( 159 ListTile(
150 title: Text('Float Modal'), 160 title: Text('Float Modal'),
151 onTap: () => showFloatingModalBottomSheet( 161 onTap: () => showFloatingModalBottomSheet(
152 context: context, 162 context: context,
153 builder: (context) => ModalFit(), 163 builder: (context) => ModalFit(),
154 - )), 164 + ),
  165 + ),
155 ListTile( 166 ListTile(
156 title: Text('Cupertino Modal fit'), 167 title: Text('Cupertino Modal fit'),
157 onTap: () => showCupertinoModalBottomSheet( 168 onTap: () => showCupertinoModalBottomSheet(
@@ -159,7 +170,8 @@ class _MyHomePageState extends State<MyHomePage> { @@ -159,7 +170,8 @@ class _MyHomePageState extends State<MyHomePage> {
159 context: context, 170 context: context,
160 backgroundColor: Colors.transparent, 171 backgroundColor: Colors.transparent,
161 builder: (context) => ModalFit(), 172 builder: (context) => ModalFit(),
162 - )), 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'),
@@ -175,9 +187,9 @@ class _MyHomePageState extends State<MyHomePage> { @@ -175,9 +187,9 @@ class _MyHomePageState extends State<MyHomePage> {
175 expand: true, 187 expand: true,
176 context: context, 188 context: context,
177 backgroundColor: Colors.transparent, 189 backgroundColor: Colors.transparent,
178 - builder: (context) =>  
179 - ModalInsideModal(reverse: true),  
180 - )), 190 + builder: (context) => ModalInsideModal(reverse: true),
  191 + ),
  192 + ),
181 ListTile( 193 ListTile(
182 title: Text('Cupertino Modal inside modal'), 194 title: Text('Cupertino Modal inside modal'),
183 onTap: () => showCupertinoModalBottomSheet( 195 onTap: () => showCupertinoModalBottomSheet(
@@ -185,7 +197,8 @@ class _MyHomePageState extends State<MyHomePage> { @@ -185,7 +197,8 @@ class _MyHomePageState extends State<MyHomePage> {
185 context: context, 197 context: context,
186 backgroundColor: Colors.transparent, 198 backgroundColor: Colors.transparent,
187 builder: (context) => ModalInsideModal(), 199 builder: (context) => ModalInsideModal(),
188 - )), 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(
@@ -202,7 +215,8 @@ class _MyHomePageState extends State<MyHomePage> { @@ -202,7 +215,8 @@ class _MyHomePageState extends State<MyHomePage> {
202 context: context, 215 context: context,
203 backgroundColor: Colors.transparent, 216 backgroundColor: Colors.transparent,
204 builder: (context) => ComplexModal(), 217 builder: (context) => ComplexModal(),
205 - )), 218 + ),
  219 + ),
206 ListTile( 220 ListTile(
207 title: Text('Modal with WillPopScope'), 221 title: Text('Modal with WillPopScope'),
208 onTap: () => showCupertinoModalBottomSheet( 222 onTap: () => showCupertinoModalBottomSheet(
@@ -210,21 +224,24 @@ class _MyHomePageState extends State<MyHomePage> { @@ -210,21 +224,24 @@ class _MyHomePageState extends State<MyHomePage> {
210 context: context, 224 context: context,
211 backgroundColor: Colors.transparent, 225 backgroundColor: Colors.transparent,
212 builder: (context) => ModalWillScope(), 226 builder: (context) => ModalWillScope(),
213 - )), 227 + ),
  228 + ),
214 ListTile( 229 ListTile(
215 title: Text('Modal with Nested Scroll'), 230 title: Text('Modal with Nested Scroll'),
216 onTap: () => showCupertinoModalBottomSheet( 231 onTap: () => showCupertinoModalBottomSheet(
217 expand: true, 232 expand: true,
218 context: context, 233 context: context,
219 builder: (context) => NestedScrollModal(), 234 builder: (context) => NestedScrollModal(),
220 - )), 235 + ),
  236 + ),
221 ListTile( 237 ListTile(
222 title: Text('Modal with PageView'), 238 title: Text('Modal with PageView'),
223 onTap: () => showBarModalBottomSheet( 239 onTap: () => showBarModalBottomSheet(
224 expand: true, 240 expand: true,
225 context: context, 241 context: context,
226 builder: (context) => ModalWithPageView(), 242 builder: (context) => ModalWithPageView(),
227 - )), 243 + ),
  244 + ),
228 SizedBox( 245 SizedBox(
229 height: 60, 246 height: 60,
230 ) 247 )
@@ -244,6 +261,7 @@ class _MyHomePageState extends State<MyHomePage> { @@ -244,6 +261,7 @@ class _MyHomePageState extends State<MyHomePage> {
244 child: Text( 261 child: Text(
245 title, 262 title,
246 style: Theme.of(context).textTheme.caption, 263 style: Theme.of(context).textTheme.caption,
247 - )); 264 + ),
  265 + );
248 } 266 }
249 } 267 }
@@ -28,26 +28,29 @@ class AvatarBottomSheet extends StatelessWidget { @@ -28,26 +28,29 @@ class AvatarBottomSheet extends StatelessWidget {
28 builder: (context, child) => Transform.translate( 28 builder: (context, child) => Transform.translate(
29 offset: Offset(0, (1 - animation.value) * 100), 29 offset: Offset(0, (1 - animation.value) * 100),
30 child: Opacity( 30 child: Opacity(
31 - child: child,  
32 - opacity: max(0, animation.value * 2 - 1))), 31 + child: child, opacity: max(0, animation.value * 2 - 1))),
33 child: Row( 32 child: Row(
34 children: <Widget>[ 33 children: <Widget>[
35 SizedBox(width: 20), 34 SizedBox(width: 20),
36 CircleAvatar( 35 CircleAvatar(
37 - child: Text('JB'), 36 + child: Text(
  37 + 'JB',
  38 + style: TextStyle(color: Colors.black),
  39 + ),
38 radius: 32, 40 radius: 32,
  41 + backgroundColor: Colors.blueAccent,
39 ), 42 ),
40 ], 43 ],
41 ), 44 ),
42 - )), 45 + ),
  46 + ),
43 SizedBox(height: 12), 47 SizedBox(height: 12),
44 Flexible( 48 Flexible(
45 flex: 1, 49 flex: 1,
46 fit: FlexFit.loose, 50 fit: FlexFit.loose,
47 child: ClipRRect( 51 child: ClipRRect(
48 borderRadius: BorderRadius.only( 52 borderRadius: BorderRadius.only(
49 - topLeft: Radius.circular(15),  
50 - topRight: Radius.circular(15)), 53 + topLeft: Radius.circular(15), topRight: Radius.circular(15)),
51 child: Container( 54 child: Container(
52 decoration: BoxDecoration( 55 decoration: BoxDecoration(
53 color: Theme.of(context).scaffoldBackgroundColor, 56 color: Theme.of(context).scaffoldBackgroundColor,
@@ -55,14 +58,18 @@ class AvatarBottomSheet extends StatelessWidget { @@ -55,14 +58,18 @@ class AvatarBottomSheet extends StatelessWidget {
55 BoxShadow( 58 BoxShadow(
56 blurRadius: 10, 59 blurRadius: 10,
57 color: Colors.black12, 60 color: Colors.black12,
58 - spreadRadius: 5)  
59 - ]), 61 + spreadRadius: 5,
  62 + ),
  63 + ],
  64 + ),
60 width: double.infinity, 65 width: double.infinity,
61 child: MediaQuery.removePadding( 66 child: MediaQuery.removePadding(
62 - context: context, removeTop: true, child: child)), 67 + context: context, removeTop: true, child: child),
  68 + ),
63 ), 69 ),
64 ), 70 ),
65 - ]), 71 + ],
  72 + ),
66 ); 73 );
67 } 74 }
68 } 75 }