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