DEV Community

loading...

How to access Scaffold methods in stateless Flutter widget

lesnitsky profile image Andrei Lesnitsky ・2 min read

Built with

Git Tutor

GitHub stars
Twitter Follow

Hi πŸ‘‹

This post will demonstrate how to access ScaffoldState methods (like showSnackBar) in StatelessWidget.

Let's reproduce a simple example demonstrating the issue and create a HomePage stateless widget with a Scaffold

πŸ“„ lib/main.dart

      );
    }
  }
+ 
+ class HomePage extends StatelessWidget {
+   @override
+   Widget build(BuildContext context) {
+     return Scaffold(
+       appBar: AppBar(
+         title: Text('Stateless Widget Scaffold'),
+       ),
+     );
+   }
+ }

Add a button which will call _showSnackbar when pressed

πŸ“„ lib/main.dart

        appBar: AppBar(
          title: Text('Stateless Widget Scaffold'),
        ),
+       body: Center(
+         child: FlatButton(
+           child: Text("Show snackbar"),
+           onPressed: _showSnackbar,
+         ),
+       ),
      );
    }
  }

We can use GlobalKey to access ScaffoldState, so let's create one

πŸ“„ lib/main.dart

  }

  class HomePage extends StatelessWidget {
+   final scaffoldKey = new GlobalKey();
+ 
    @override
    Widget build(BuildContext context) {
      return Scaffold(

pass it to Scaffold

πŸ“„ lib/main.dart

    @override
    Widget build(BuildContext context) {
      return Scaffold(
+       key: scaffoldKey,
        appBar: AppBar(
          title: Text('Stateless Widget Scaffold'),
        ),

and implement method _showSnackbar

πŸ“„ lib/main.dart

  class HomePage extends StatelessWidget {
    final scaffoldKey = new GlobalKey();

+   _showSnackbar() {
+     (scaffoldKey.currentState as ScaffoldState).showSnackBar(
+       SnackBar(
+         content: Text("I'm snackbar!"),
+       ),
+     );
+   }
+ 
    @override
    Widget build(BuildContext context) {
      return Scaffold(

That's it! πŸŽ‰

Soruce code is available here

Stateless widget scaffold screenshot

Built with

Git Tutor

GitHub stars
Twitter Follow

Discussion (0)

Forem Open with the Forem app