在一个非常简单的 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),
),
)
)
);
}
}
任何解决方案?