Flutter - 无法使用“高级导航器”包从抽屉正确导航到新屏幕

问题描述 投票:0回答:0

在一个非常简单的 flutter 应用程序中,当用户点击抽屉中的某个项目时,我试图导航到一个新屏幕。我期望的是,在抽屉中点击一个项目时,抽屉将关闭,用户将被带到一个新屏幕。所发生的只是导航发生在抽屉内,即:新屏幕在抽屉内启动。我正在使用 Advanced Navigator 包。

我在这里粘贴完整的源代码

main.dart:

import 'package:flutter/material.dart';
import 'constant_color.dart';
import 'drawer.dart';
import 'package:flutter/cupertino.dart';
import 'package:advanced_navigator/advanced_navigator.dart';

void main() {
  runApp(const MyApp());
}

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


  @override
  Widget build(BuildContext context) {


    return MaterialApp(
      builder: (context, _) => AdvancedNavigator(
        tag: 'root',
        paths: {
          '/': (_) => [
            CupertinoPage(key: ValueKey('home'), child: MyHomePage(title: 'My Title',)),
          ],



        },
      ),
    );


  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});


  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {


  final scaffoldKey = GlobalKey<ScaffoldState>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: scaffoldKey,

       appBar : AppBar(
          elevation: 0,
          iconTheme: const IconThemeData(
            color: ConstantColors.colorBlack,
          ),
          actions: [],
          centerTitle: true,
          backgroundColor: ConstantColors.highlightColor,
          title: Text(
            'My Title',

          ),
        ),
      drawer: SizedBox(
          width:230,
          child: AppDrawer(

          )),
      body: Center(
        child: Text('Home Screen')
      ),

    );
  }
}

drawer.dart:

import 'package:advance_navigator_testing/landing_screen_mobile.dart';
import 'package:advance_navigator_testing/landing_screen_mobile2.dart';

import 'constant_color.dart';
import 'drawer_tile.dart';
import 'package:flutter/material.dart';

import 'package:flutter/cupertino.dart';

class AppDrawer extends StatelessWidget {


  const AppDrawer({Key? key }) : super(key: key);

    @override
    Widget build(BuildContext context) {
      return MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: const AppDrawerScreen(),
      );
    }


}

class AppDrawerScreen extends StatelessWidget {

  const AppDrawerScreen({Key? key}) : super(key: key);


  @override
  Widget build(BuildContext context) {




    return Drawer(

      width:230.00,
      elevation: 0.0,
      backgroundColor: ConstantColors.colorWhite,
      shape: const RoundedRectangleBorder(
        borderRadius: BorderRadius.only(
          topRight: Radius.circular(20.0),
          bottomRight: Radius.circular(20.0),
        ),
      ),
      child: SizedBox(

        child: ListView(
          padding: const EdgeInsets.symmetric(
            vertical: 10.0,
            horizontal: 20.0,
          ),
          children:
          [
                  const SizedBox(
                    height: 40,
                  ),
                  DrawerTile(
                    isTitle: true,
                    icon: Icons.account_circle_rounded,
                    title: 'xyz',
                  ),
                  const SizedBox(
                    height: 40,
                  ),
                  const DrawerTile(
                    icon: Icons.folder_rounded,
                    title: 'Home',
                  ),
                  const SizedBox(
                    height: 5,
                  ),
                  const Divider(
                    color: ConstantColors.colorBlack,
                  ),


                  const SizedBox(
                    height: 25,
                  ),
                  const DrawerTile(
                    navigateTo: LandingMobileScreen(),
                    icon: Icons.star,
                    title: 'Add Resident',

                  ),
                  const SizedBox(
                    height: 15,
                  ),
                  const DrawerTile(
                    icon: Icons.star_border,
                    title: 'Manage Residents',
                    navigateTo: LandingMobileScreen2(),
                  ),
                  const SizedBox(
                    height: 10,
                  ),
                  const Divider(
                    color: ConstantColors.colorBlack,
                  ),

                  const SizedBox(
                    height: 10,
                  ),
                  const Divider(
                    color: ConstantColors.colorBlack,
                  ),

                ],
        ),
      ),
    );
  }
}

drawer_tile.dart:

import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';

import 'constant_text_styles.dart';
import 'landing_screen_mobile2.dart';

class DrawerTile extends StatelessWidget {
  final IconData? icon;
  final String title;
  final bool isTitle;
  final Widget? navigateTo;
  final VoidCallback? onTap;
  const DrawerTile(
      {Key? key,
      this.isTitle = false,
      this.icon,
      this.title = '',
      this.navigateTo, this.onTap})
      : super(key: key);





  @override
  Widget build(BuildContext context) {

    return GestureDetector(
      onTap: onTap ?? () async{

        if (navigateTo != null) {
          print(" Inside onTap123 ");
          Navigator.pop(context);
          // Navigator.pop(context);

          Navigator.push(
            context,
            
            MaterialPageRoute(builder: (_) => LandingMobileScreen2()!),
          );
        }



      },
      child: Row(
        children: [

          Icon(
            icon,
            size: isTitle ? 50.0 : Theme.of(context).iconTheme.size,
          ),
          const SizedBox(
            width: 5,
          ),
          Flexible(
            child: Text
              (
              title,
              style: ConstantTextStyle.bodyMedium.copyWith(
                fontWeight: FontWeight.bold,
                letterSpacing: 0.0,
              ),
            ),
          ),
        ],
      ),
    );
 

landing_screen_mobile.dart:

import 'dart:convert';
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';





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

  @override
  State<LandingMobileScreen> createState() => _LandingMobileScreenState();
}

class _LandingMobileScreenState extends State<LandingMobileScreen> with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();

  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }


  @override
  Widget build(BuildContext context) {

    return  Scaffold(

          body: Padding(

              padding: const EdgeInsets.only(left: 15, top: 10, right: 15),

              child: Text('abcdef')



          )
        );


  }
}


    
  }


  
}

landing_screen_mobile2.dart:

import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';

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

  @override
  State<LandingMobileScreen2> createState() => _LandingMobileScreenState2();
}

class _LandingMobileScreenState2 extends State<LandingMobileScreen2> with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();

  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }






  @override
  Widget build(BuildContext context) {



    return  Scaffold(


          body: Padding(

              padding: const EdgeInsets.only(left: 15, top: 10, right: 15),

              child: Padding(
                padding: EdgeInsets.fromLTRB(0, 200, 0, 0),
                child: Text('222222222222222',
                    style: TextStyle(color: Colors.deepPurpleAccent),
          ),
              )



          )
        );


  }
}

任何解决方案?

flutter navigation navigation-drawer drawer
© www.soinside.com 2019 - 2024. All rights reserved.