diff --git a/vignettes/ticket_fold/lib/flight_barcode.dart b/vignettes/ticket_fold/lib/flight_barcode.dart index 80bd1c50..eb765767 100644 --- a/vignettes/ticket_fold/lib/flight_barcode.dart +++ b/vignettes/ticket_fold/lib/flight_barcode.dart @@ -10,6 +10,10 @@ class FlightBarcode extends StatelessWidget { decoration: BoxDecoration(borderRadius: BorderRadius.circular(4.0), color: Colors.white), child: Padding( padding: const EdgeInsets.symmetric(vertical: 14.0), - child: Image.asset('images/barcode.png', package: App.pkg), + child: MaterialButton( + child: Image.asset('images/barcode.png', package: App.pkg), + onPressed: () { + print('Button was pressed'); + }), )); } diff --git a/vignettes/ticket_fold/lib/folding_ticket.dart b/vignettes/ticket_fold/lib/folding_ticket.dart index 480f2fa6..1d30199f 100644 --- a/vignettes/ticket_fold/lib/folding_ticket.dart +++ b/vignettes/ticket_fold/lib/folding_ticket.dart @@ -6,9 +6,10 @@ class FoldingTicket extends StatefulWidget { static const double padding = 16.0; final bool isOpen; final List entries; + final Function onClick; final Duration duration; - FoldingTicket({this.duration, @required this.entries, this.isOpen = false}); + FoldingTicket({this.duration, @required this.entries, this.isOpen = false, this.onClick}); @override _FoldingTicketState createState() => _FoldingTicketState(); @@ -36,7 +37,6 @@ class _FoldingTicketState extends State with SingleTickerProvider @override void didUpdateWidget(FoldingTicket oldWidget) { // Opens or closes the ticked if the status changed - isOpen ? _controller.forward() : _controller.reverse(); _updateFromWidget(); super.didUpdateWidget(oldWidget); } @@ -47,7 +47,6 @@ class _FoldingTicketState extends State with SingleTickerProvider super.dispose(); } - @override Widget build(BuildContext context) { return Container( @@ -61,7 +60,7 @@ class _FoldingTicketState extends State with SingleTickerProvider ); } - Widget _buildEntry(int index, [double offset = 0.0]) { + Widget _buildEntry(int index) { FoldEntry entry = _entries[index]; int count = _entries.length - 1; double ratio = max(0.0, min(1.0, _ratio * count + 1.0 - index * 1.0)); @@ -69,7 +68,6 @@ class _FoldingTicketState extends State with SingleTickerProvider Matrix4 mtx = Matrix4.identity() ..setEntry(3, 2, 0.001) ..setEntry(1, 2, 0.2) - ..translate(0.0, offset) ..rotateX(pi * (ratio - 1.0)); Widget card = SizedBox(height: entry.height, child: ratio < 0.5 ? entry.back : entry.front); @@ -77,22 +75,26 @@ class _FoldingTicketState extends State with SingleTickerProvider return Transform( alignment: Alignment.topCenter, transform: mtx, - child: Container( - // Note: Container supports a transform property, but not alignment for it. - foregroundDecoration: BoxDecoration(color: Colors.black.withOpacity((0.5 - (0.5 - ratio).abs()) * 0.5)), - child: (index == count || ratio <= 0.5) - ? card - : // Don't build a stack if it isn't needed. - Stack(children: [ - card, - _buildEntry(index + 1, entry.height), - ]), + child: GestureDetector( + onTap: widget.onClick, + child: SingleChildScrollView( + physics: NeverScrollableScrollPhysics(), + // Note: Container supports a transform property, but not alignment for it. + child: (index == count || ratio <= 0.5) + ? card + : // Don't build a stack if it isn't needed. + Column(children: [ + card, + _buildEntry(index + 1), + ]), + ), )); } void _updateFromWidget() { _entries = widget.entries; _controller.duration = widget.duration ?? Duration(milliseconds: 400 * (_entries.length - 1)); + isOpen ? _controller.forward() : _controller.reverse(); } void _tick() { diff --git a/vignettes/ticket_fold/lib/ticket.dart b/vignettes/ticket_fold/lib/ticket.dart index f3daf853..4b52f417 100644 --- a/vignettes/ticket_fold/lib/ticket.dart +++ b/vignettes/ticket_fold/lib/ticket.dart @@ -39,13 +39,7 @@ class _TicketState extends State { @override Widget build(BuildContext context) { - return GestureDetector( - onTap: _handleOnTap, - child: FoldingTicket( - entries: _getEntries(), - isOpen: _isOpen, - ), - ); + return FoldingTicket(entries: _getEntries(), isOpen: _isOpen, onClick: _handleOnTap); } List _getEntries() { diff --git a/vignettes/ticket_fold/pubspec.lock b/vignettes/ticket_fold/pubspec.lock index d30bf24f..423e0611 100644 --- a/vignettes/ticket_fold/pubspec.lock +++ b/vignettes/ticket_fold/pubspec.lock @@ -140,7 +140,7 @@ packages: shared: dependency: "direct main" description: - path: "..\\_shared" + path: "../_shared" relative: true source: path version: "1.0.0+1"