Skip to content

Instantly share code, notes, and snippets.

@davidhicks980
Created March 14, 2025 07:48
Show Gist options
  • Save davidhicks980/c607d09391baa1ea303ffeeb3cb41f14 to your computer and use it in GitHub Desktop.
Save davidhicks980/c607d09391baa1ea303ffeeb3cb41f14 to your computer and use it in GitHub Desktop.
MenuController + didChangeDependencies
import 'package:flutter/material.dart';
void main() => runApp(const SampleApp());
class SampleApp extends StatefulWidget {
const SampleApp({super.key});
@override
State<SampleApp> createState() => _SampleAppState();
}
class _SampleAppState extends State<SampleApp> {
bool isShowing = false;
@override
Widget build(BuildContext context) {
return const MaterialApp(home: Scaffold(body: Sample(isShowing: true)));
}
}
class Sample extends StatefulWidget {
const Sample({super.key, required this.isShowing});
final bool isShowing;
@override
State<Sample> createState() => _SampleState();
}
class _SampleState extends State<Sample> {
final controller = MenuController();
Size? size;
@override
void didChangeDependencies() {
super.didChangeDependencies();
if (size != null) {
controller.open();
}
size ??= MediaQuery.sizeOf(context);
}
@override
Widget build(BuildContext context) {
return RawMenuAnchor(
controller: controller,
builder: (
BuildContext context,
MenuController controller,
Widget? child,
) {
return ElevatedButton(
onPressed: () {
if (controller.isOpen) {
controller.close();
} else {
controller.open();
}
},
child: const Text('Open'),
);
},
overlayBuilder: (BuildContext context, RawMenuOverlayInfo info) {
return Container(
color: Colors.red,
width: 200,
height: 200,
child: const Center(child: Text('Overlay')),
);
},
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment