// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:flutter/material.dart'; /// Flutter code sample for [SnackBar]. void main() => runApp(const SnackBarApp()); class SnackBarApp extends StatelessWidget { const SnackBarApp({super.key}); @override Widget build(BuildContext context) { return const MaterialApp( home: SnackBarExample(), ); } } class SnackBarExample extends StatefulWidget { const SnackBarExample({super.key}); @override State<SnackBarExample> createState() => _SnackBarExampleState(); } class _SnackBarExampleState extends State<SnackBarExample> { bool _largeLogo = false; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('SnackBar Sample')), body: Padding( padding: const EdgeInsets.all(8.0), child: Column( children: <Widget>[ ElevatedButton( onPressed: () { const SnackBar snackBar = SnackBar( content: Text('A SnackBar has been shown.'), behavior: SnackBarBehavior.floating, ); ScaffoldMessenger.of(context).showSnackBar(snackBar); }, child: const Text('Show SnackBar'), ), const SizedBox(height: 8.0), ElevatedButton( onPressed: () { setState(() => _largeLogo = !_largeLogo); }, child: Text(_largeLogo ? 'Shrink Logo' : 'Grow Logo'), ), ], ), ), // A floating [SnackBar] is positioned above [Scaffold.floatingActionButton]. // If the Widget provided to the floatingActionButton slot takes up too much space // for the SnackBar to be visible, an error will be thrown. floatingActionButton: Container( constraints: BoxConstraints.tightFor( width: 150, height: _largeLogo ? double.infinity : 150, ), decoration: const BoxDecoration( color: Colors.blueGrey, borderRadius: BorderRadius.all(Radius.circular(20)), ), child: const FlutterLogo(), ), ); } }