我的导航抽屉无法正常工作。我已经创建了屏幕并浏览了很多示例
My Navigation Drawer just doesn't works. I have created the screens and gone through a lot of examples
我的抽屉没有导航到其他屏幕。不知道为什么,我翻了很多Whosebug的解决方案。
我也创建了路线,但仍然无法正常工作。
这是我的抽屉代码。
class SideDrawer extends StatelessWidget{
const SideDrawer({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: [
const DrawerHeader(
decoration: BoxDecoration(
color: Colors.greenAccent,
),
child: Text('Welcome!'),
),
ListTile(
title: const Text('Home'),
onTap: () => Navigator.pushReplacementNamed(context, Routes.home)
),
ListTile(
title: const Text('Settings'),
onTap: () => Navigator.pushReplacementNamed(context, Routes.settings)
),
ListTile(
title: const Text('LogOut'),
onTap: () => Navigator.pushReplacementNamed(context, Routes.logout)
),
],
),
);
}
}
这是路线 class。
import 'package:adaptive_layout/widgets/candidate_form.dart';
import 'package:adaptive_layout/widgets/logout.dart';
import 'package:adaptive_layout/widgets/settings.dart';
class Routes {
static const String home = CandidateForm.routeName;
static const String settings = Settings.routeName;
static const String logout = LogOut.routeName;
}
所有 classes 只是在中心有一个文本显示器。
但是抽屉在 onTap 之后既不会自行关闭,也不会转到该页面。
这是我的 MaterialAppWidget,即 main.dart。
import 'package:adaptive_layout/pages/desktop_page.dart';
import 'package:adaptive_layout/pages/mobile_page.dart';
import 'package:adaptive_layout/pages/tablet_page.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Views',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: SafeArea(
child: LayoutBuilder(
builder: (context, constraints) {
if(constraints.maxWidth < 600){
return const MobilePage();
}
else if(constraints.maxWidth < 768){
return const TabletPage();
}
else{
return const DesktopPage();
}
}
),
),
);
}
}
请帮忙。现在正在试用 2 天。
发生这种情况是因为您没有在 MaterialApp
小部件中定义路线。如果您使用的是匿名路由,则这不是必需的,但如果您使用的是 named 路由,则 必须。
您需要在 MaterialApp
上删除您的 home:
属性,并将您的 LayoutBuilder
移至其他位置。
像这样:
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Views',
theme: ThemeData(
primarySwatch: Colors.blue,
),
initialRoute: '/',
routes: {
// Here you define the names and the Widgets (Preferably ones with a Scaffold) that are your pages
'/': (context) => const HomePage(),
'/second': (context) => const SecondScreen(),
},
);
}
}
然后使用命名路由导航到它们:
() => Navigator.pushReplacementNamed(context, '/second')
如果您想了解更多信息,Flutter 网站上有一个 cookbock 向您展示如何使用它。
我的抽屉没有导航到其他屏幕。不知道为什么,我翻了很多Whosebug的解决方案。 我也创建了路线,但仍然无法正常工作。
这是我的抽屉代码。
class SideDrawer extends StatelessWidget{
const SideDrawer({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: [
const DrawerHeader(
decoration: BoxDecoration(
color: Colors.greenAccent,
),
child: Text('Welcome!'),
),
ListTile(
title: const Text('Home'),
onTap: () => Navigator.pushReplacementNamed(context, Routes.home)
),
ListTile(
title: const Text('Settings'),
onTap: () => Navigator.pushReplacementNamed(context, Routes.settings)
),
ListTile(
title: const Text('LogOut'),
onTap: () => Navigator.pushReplacementNamed(context, Routes.logout)
),
],
),
);
}
}
这是路线 class。
import 'package:adaptive_layout/widgets/candidate_form.dart';
import 'package:adaptive_layout/widgets/logout.dart';
import 'package:adaptive_layout/widgets/settings.dart';
class Routes {
static const String home = CandidateForm.routeName;
static const String settings = Settings.routeName;
static const String logout = LogOut.routeName;
}
所有 classes 只是在中心有一个文本显示器。 但是抽屉在 onTap 之后既不会自行关闭,也不会转到该页面。
这是我的 MaterialAppWidget,即 main.dart。
import 'package:adaptive_layout/pages/desktop_page.dart';
import 'package:adaptive_layout/pages/mobile_page.dart';
import 'package:adaptive_layout/pages/tablet_page.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Views',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: SafeArea(
child: LayoutBuilder(
builder: (context, constraints) {
if(constraints.maxWidth < 600){
return const MobilePage();
}
else if(constraints.maxWidth < 768){
return const TabletPage();
}
else{
return const DesktopPage();
}
}
),
),
);
}
}
请帮忙。现在正在试用 2 天。
发生这种情况是因为您没有在 MaterialApp
小部件中定义路线。如果您使用的是匿名路由,则这不是必需的,但如果您使用的是 named 路由,则 必须。
您需要在 MaterialApp
上删除您的 home:
属性,并将您的 LayoutBuilder
移至其他位置。
像这样:
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Views',
theme: ThemeData(
primarySwatch: Colors.blue,
),
initialRoute: '/',
routes: {
// Here you define the names and the Widgets (Preferably ones with a Scaffold) that are your pages
'/': (context) => const HomePage(),
'/second': (context) => const SecondScreen(),
},
);
}
}
然后使用命名路由导航到它们:
() => Navigator.pushReplacementNamed(context, '/second')
如果您想了解更多信息,Flutter 网站上有一个 cookbock 向您展示如何使用它。