[Gallery] Close Shrine cart on back button press for android (#288)

* Close Shrine cart on back button press for android
pull/290/head
Per Classon 5 years ago committed by GitHub
parent 81a8e98c1a
commit b891c7cc77
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -78,6 +78,18 @@ class _ShrineAppState extends State<ShrineApp> with TickerProviderStateMixin {
); );
} }
// Closes the bottom sheet if it is open.
Future<bool> _onWillPop() async {
final status = _expandingController.status;
if (status == AnimationStatus.completed ||
status == AnimationStatus.forward) {
_expandingController.reverse();
return false;
}
return true;
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final bool isDesktop = isDisplayDesktop(context); final bool isDesktop = isDisplayDesktop(context);
@ -86,34 +98,37 @@ class _ShrineAppState extends State<ShrineApp> with TickerProviderStateMixin {
return ScopedModel<AppStateModel>( return ScopedModel<AppStateModel>(
model: _model, model: _model,
child: MaterialApp( child: WillPopScope(
navigatorKey: widget.navigatorKey, onWillPop: _onWillPop,
title: 'Shrine', child: MaterialApp(
debugShowCheckedModeBanner: false, navigatorKey: widget.navigatorKey,
home: LayoutCache( title: 'Shrine',
layouts: _layouts, debugShowCheckedModeBanner: false,
child: PageStatus( home: LayoutCache(
menuController: _controller, layouts: _layouts,
cartController: _expandingController, child: PageStatus(
child: HomePage( menuController: _controller,
backdrop: backdrop, cartController: _expandingController,
scrim: Scrim(controller: _expandingController), child: HomePage(
expandingBottomSheet: ExpandingBottomSheet( backdrop: backdrop,
hideController: _controller, scrim: Scrim(controller: _expandingController),
expandingController: _expandingController, expandingBottomSheet: ExpandingBottomSheet(
hideController: _controller,
expandingController: _expandingController,
),
), ),
), ),
), ),
initialRoute: '/login',
onGenerateRoute: _getRoute,
theme: shrineTheme.copyWith(
platform: GalleryOptions.of(context).platform,
),
// L10n settings.
localizationsDelegates: GalleryLocalizations.localizationsDelegates,
supportedLocales: GalleryLocalizations.supportedLocales,
locale: GalleryOptions.of(context).locale,
), ),
initialRoute: '/login',
onGenerateRoute: _getRoute,
theme: shrineTheme.copyWith(
platform: GalleryOptions.of(context).platform,
),
// L10n settings.
localizationsDelegates: GalleryLocalizations.localizationsDelegates,
supportedLocales: GalleryLocalizations.supportedLocales,
locale: GalleryOptions.of(context).locale,
), ),
); );
} }

@ -2,11 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
import 'dart:async';
import 'dart:math'; import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:meta/meta.dart'; import 'package:meta/meta.dart';
import 'package:scoped_model/scoped_model.dart'; import 'package:scoped_model/scoped_model.dart';
@ -51,11 +49,11 @@ double _paddedThumbnailHeight(BuildContext context) {
} }
class ExpandingBottomSheet extends StatefulWidget { class ExpandingBottomSheet extends StatefulWidget {
const ExpandingBottomSheet( const ExpandingBottomSheet({
{Key key, Key key,
@required this.hideController, @required this.hideController,
@required this.expandingController}) @required this.expandingController,
: assert(hideController != null), }) : assert(hideController != null),
assert(expandingController != null), assert(expandingController != null),
super(key: key); super(key: key);
@ -551,18 +549,6 @@ class _ExpandingBottomSheetState extends State<ExpandingBottomSheet>
} }
} }
// Closes the cart if the cart is open, otherwise exits the app (this should
// only be relevant for Android).
Future<bool> _onWillPop() async {
if (!_isOpen) {
await SystemNavigator.pop();
return true;
}
close();
return true;
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return AnimatedSize( return AnimatedSize(
@ -571,16 +557,13 @@ class _ExpandingBottomSheetState extends State<ExpandingBottomSheet>
curve: Curves.easeInOut, curve: Curves.easeInOut,
vsync: this, vsync: this,
alignment: AlignmentDirectional.topStart, alignment: AlignmentDirectional.topStart,
child: WillPopScope( child: AnimatedBuilder(
onWillPop: _onWillPop, animation: widget.hideController,
child: AnimatedBuilder( builder: (context, child) => AnimatedBuilder(
animation: widget.hideController, animation: widget.expandingController,
builder: (context, child) => AnimatedBuilder( builder: (context, child) => ScopedModelDescendant<AppStateModel>(
animation: widget.expandingController, builder: (context, child, model) =>
builder: (context, child) => ScopedModelDescendant<AppStateModel>( _buildSlideAnimation(context, _buildCart(context)),
builder: (context, child, model) =>
_buildSlideAnimation(context, _buildCart(context)),
),
), ),
), ),
), ),

Loading…
Cancel
Save