skip to Main Content

I am new to flutter,Here I can’t find why my snackbar is not showing in the ui.I tried exactly like the documentation .

Scaffold(
      body: Center(
        child: ElevatedButton(
          child: const Text('Show SnackBar'),
          onPressed: () {
            final snackBar = SnackBar(
              content: const Text('Yay! A SnackBar!'),
              action: SnackBarAction(
                label: 'Undo',
                onPressed: () {},
              ),
            );
            ScaffoldMessenger.of(context).showSnackBar(snackBar);
          },
        ),
      ),
    ));

3

Answers


  1. This is a sample code for displaying SnackBar in flutter

    import 'package:flutter/material.dart';
    
    void main() => runApp(const SnackBarDemo());
    
    class SnackBarDemo extends StatelessWidget {
      const SnackBarDemo({super.key});
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'SnackBar Demo',
          home: Scaffold(
            appBar: AppBar(
              title: const Text('SnackBar Demo'),
            ),
            body: const SnackBarPage(),
          ),
        );
      }
    }
    
    class SnackBarPage extends StatelessWidget {
      const SnackBarPage({super.key});
    
      @override
      Widget build(BuildContext context) {
        return Center(
          child: ElevatedButton(
            onPressed: () {
              final snackBar = SnackBar(
                content: const Text('Yay! A SnackBar!'),
                action: SnackBarAction(
                  label: 'Undo',
                  onPressed: () {
                    // Some code to undo the change.
                  },
                ),
              );
    
              // Find the ScaffoldMessenger in the widget tree
              // and use it to show a SnackBar.
              ScaffoldMessenger.of(context).showSnackBar(snackBar);
            },
            child: const Text('Show SnackBar'),
          ),
        );
      }
    }
    

    Photo:

    enter image description here

    Login or Signup to reply.
  2. Try the below code, You may missed forgot to wrap your scaffold
    with MaterialApp();

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: MyWidget(),
        );
      }
    }
    
    class MyWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
            child: ElevatedButton(
              child: const Text('Show SnackBar'),
              onPressed: () {
                final snackBar = SnackBar(
                  content: const Text('Yay! A SnackBar!'),
                  action: SnackBarAction(
                    label: 'Undo',
                    onPressed: () {},
                  ),
                );
                ScaffoldMessenger.of(context).showSnackBar(snackBar);
              },
            ),
          ),
        );
      }
    }
    
    Login or Signup to reply.
  3. The problem is, that the call to ScaffoldMessenger.of(context).showSnackBar(snackBar) makes Flutter search the widget tree for ancestors of type ScaffoldMessenger and it’s not able to find one.

    This happens, because you pass in the BuildContext of the widget under which the Scaffold is declared. But it searches in the opposite direction.

    One solution to this is, to wrap the call to ScaffoldMessenger.of in a Builder widget, wich introduces a new BuildContext. Then Flutter is able to find a ScaffoldMessenger in the widget tree and use it to show the SnackBar.

    import 'package:flutter/material.dart';
    
    void main() => runApp(const MyApp());
    
    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Demo',
          home: Scaffold(
            body: Center(
              child: Builder(
                builder: (context) {
                  return ElevatedButton(
                    child: const Text('Show SnackBar'),
                    onPressed: () {
                      final snackBar = SnackBar(
                        content: const Text('Yay! A SnackBar!'),
                        action: SnackBarAction(
                          label: 'Undo',
                          onPressed: () {},
                        ),
                      );
                      ScaffoldMessenger.of(context).showSnackBar(snackBar);
                    },
                  );
                }
              ),
            ),
          ),
        );
      }
    }
    

    Check out the Builder documentation, it explains everything about those .of() methods: https://api.flutter.dev/flutter/widgets/Builder-class.html

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search