Make it possible to dismiss a snackbar manually

Fixes #463
This commit is contained in:
Adam Barth
2016-03-30 13:57:17 -07:00
parent 040ff9b037
commit d4febd085d
2 changed files with 36 additions and 17 deletions

View File

@@ -304,6 +304,17 @@ class ScaffoldState extends State<Scaffold> {
}
}
void removeCurrentSnackBar() {
if (_snackBars.isEmpty)
return;
Completer<Null> completer = _snackBars.first._completer;
if (!completer.isCompleted)
completer.complete();
_snackBarTimer?.cancel();
_snackBarTimer = null;
_snackBarController.value = 0.0;
}
void _hideSnackBar() {
assert(_snackBarController.status == AnimationStatus.forward ||
_snackBarController.status == AnimationStatus.completed);

View File

@@ -7,6 +7,7 @@ import 'package:flutter/widgets.dart';
import 'button.dart';
import 'flat_button.dart';
import 'material.dart';
import 'scaffold.dart';
import 'theme_data.dart';
import 'theme.dart';
import 'typography.dart';
@@ -118,23 +119,30 @@ class SnackBar extends StatelessWidget {
},
child: new Semantics(
container: true,
child: new Material(
elevation: 6,
color: _kSnackBackground,
child: new Container(
margin: const EdgeInsets.symmetric(horizontal: _kSideMargins),
child: new Theme(
data: new ThemeData(
brightness: ThemeBrightness.dark,
accentColor: theme.accentColor,
accentColorBrightness: theme.accentColorBrightness,
textTheme: Typography.white
),
child: new FadeTransition(
opacity: fadeAnimation,
child: new Row(
children: children,
crossAxisAlignment: CrossAxisAlignment.center
child: new Dismissable(
key: new Key('dismissable'),
direction: DismissDirection.down,
onDismissed: (DismissDirection direction) {
Scaffold.of(context).removeCurrentSnackBar();
},
child: new Material(
elevation: 6,
color: _kSnackBackground,
child: new Container(
margin: const EdgeInsets.symmetric(horizontal: _kSideMargins),
child: new Theme(
data: new ThemeData(
brightness: ThemeBrightness.dark,
accentColor: theme.accentColor,
accentColorBrightness: theme.accentColorBrightness,
textTheme: Typography.white
),
child: new FadeTransition(
opacity: fadeAnimation,
child: new Row(
children: children,
crossAxisAlignment: CrossAxisAlignment.center
)
)
)
)