Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Flutter : Drawer without seeing the white page

When I click on the Three Line icon in the AppBar, I first go to a blank white page. Then when I pull the mouse from the left on this page, I see "Drawer". The white page confuses me. What I want is; That the Drawer comes from the left as I click on the three lines in the AppBar.

main.dart

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Welcome to Flutter',
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Welcome to Flutter'),
        ),
        // body: const NavigationDrawer(),
        drawer: const NavigationDrawer(),
      ),
    );
  }
}

api.dart

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Future<List<Menu>> fetchMenus() async {
  final response =
  await http.get(Uri.parse('http://myUrl:3355/'));
  if (response.statusCode == 200) {
    var getMenusData = json.decode(response.body) as List;
    var listMenus = getMenusData.map((i) => Menu.fromJson(i)).toList();
    return listMenus;
  } else {
    throw Exception('Failed to load Menus');
  }
}

navigation.dart

class NavigationDrawer extends StatefulWidget {
  const NavigationDrawer({Key? key}) : super(key: key);

  @override
  State<StatefulWidget> createState() {
    return NavigationDrawerState();
  }
}

class NavigationDrawerState extends State<NavigationDrawer> {
  late Future<List<Menu>> listMenus;

  @override
  void initState() {
    super.initState();
    listMenus = fetchMenus();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      drawer: Drawer(
        child: Column(
          children: [
            buildHeader(),
            buildMenu(),
          ],
        ),
      ),
    );
  }

  Widget buildHeader() {
    return const Center(
      child: Card(
        child: SizedBox(
          width: 300,
          height: 100,
          child: Center(child: Text('Elevated Card')),
        ),
      ),
    );
  }

Widget buildMenu() {
  late Future<List<Menu>> listMenus;
  listMenus = fetchMenus();
  return Expanded(
      child: FutureBuilder<List<Menu>>(
          future: listMenus,
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              return ListView.separated(
                  itemBuilder: (context, index) {
                    var menu = (snapshot.data as List<Menu>)[index];
                    return Container(
                      padding: const EdgeInsets.all(10),
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: <Widget>[
                          // Text(menu.name),
                          const SizedBox(height: 5),
                          Text(menu.folder),
                        ],
                      ),
                    );
                  },
                  separatorBuilder: (context, index) {
                    return const Divider();
                  },
                  itemCount: (snapshot.data as List<Menu>).length);
            } else if (snapshot.hasError) {
              return Center(
                child: Text("${snapshot.error}"),
              );
            }
            return const Center(
              child: CircularProgressIndicator(
                backgroundColor: Colors.cyanAccent,
              ),
            );
          },
        ));
}
}

>Solution :

I don’t think that you need to return a scaffold.

try remove return scaffold and only return Drawer

This:

return Scaffold(
  drawer: Drawer(
    child: Column(
      children: [
        buildHeader(),
        buildMenu(),
      ],
    ),
  ),
);

To this:

return Drawer(
    child: Column(
      children: [
        buildHeader(),
        buildMenu(),
      ],
    ),
  );
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading