How to Use the flutter_portal Library to Create Overlays in Flutter

Sep 5, 2021 | Programming

If you’re looking to create beautiful floating overlays—like tooltips, menus, and dialogs—in your Flutter applications, the flutter_portal library is your go-to solution. This library provides an enhanced way to manage overlays compared to Flutter’s built-in options. Let’s dive into how you can implement it effectively!

Why Choose flutter_portal?

  • Declarative Approach: Unlike Flutter’s built-in Overlay, which relies on imperatives, flutter_portal allows you to declare your UI in a more intuitive way.
  • Easy Alignment: Position overlays relative to UI components effortlessly, eliminating the complexity of manual positioning.
  • Customizable Alignment Logic: Ensure your overlays never go off-screen and even extend the default alignment methods to fit your needs.
  • Intuitive Contextual Awareness: Overlays use their parent’s context, which provides access to themes and other providers seamlessly.

Setting Up flutter_portal

To get started with flutter_portal, follow these steps:

  1. Install the Library: Use the command:
    flutter pub add flutter_portal
  2. Add the Portal Widget: Insert the Portal widget at the root of your widget tree or just above the MaterialApp.
  3. Creating Portal Targets: Use PortalTarget when you want to display overlays connected with corresponding interface elements.

Creating a Contextual Menu Example

Let’s take a look at a practical example of how to create a contextual menu that appears when a button is pressed. Consider the flutter portal’s components in the same way that you might use a stage in a theater: you have your main act (the button) and you can bring in various props (the overlay menu) as needed.


Portal( 
  child: MaterialApp( 
    home: MenuExample() 
  )
)

class MenuExample extends StatefulWidget {
  @override
  _MenuExampleState createState() => _MenuExampleState();
}

class _MenuExampleState extends State {
  bool isMenuOpen = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: RaisedButton(
          onPressed: () {
            setState(() {
              isMenuOpen = true; // Triggers the menu to show
            });
          },
          child: Text('Show Menu'),
        ),
      ),
    );
  }
}

Adjusting the Menu’s Position

To align the menu next to your button, you adjust its parameters in the PortalTarget:


PortalTarget(
  visible: isMenuOpen,
  anchor: const Aligned(
    follower: Alignment.topLeft,
    target: Alignment.topRight,
  ),
  portalFollower: Material(
    elevation: 8,
    child: Column(
      mainAxisSize: MainAxisSize.min,
      children: [
          ListTile(title: Text('Option 1')),
          ListTile(title: Text('Option 2')),
      ],
    ),
  ),
  child: RaisedButton(
    onPressed: () {
      setState(() {
        isMenuOpen = false; // Close the menu
      });
    },
    child: Text('Show Menu'),
  ),
)

Troubleshooting Common Issues

While using flutter_portal, you might encounter some common issues. Here are some troubleshooting tips:

  • Menu Not Displaying: Make sure that your PortalTarget is properly aligned and visible is set to true.
  • Incorrect Theming: Check if your overlay components are inheriting the right Theme context from their parent widgets.
  • Overlays Going Off-Screen: Utilize the customizable alignment logic to ensure your overlays are within screen bounds.

For more insights, updates, or to collaborate on AI development projects, stay connected with fxis.ai.

Conclusion

At fxis.ai, we believe that such advancements are crucial for the future of AI, as they enable more comprehensive and effective solutions. Our team is continually exploring new methodologies to push the envelope in artificial intelligence, ensuring that our clients benefit from the latest technological innovations.

Stay Informed with the Newest F(x) Insights and Blogs

Tech News and Blog Highlights, Straight to Your Inbox