gpt4 book ai didi

dart - Flutter Drawer 作为单独的小部件不允许修改宽度

转载 作者:IT老高 更新时间:2023-10-28 12:40:58 25 4
gpt4 key购买 nike

尝试在新应用中实现侧边抽屉,我可以渲染它,但它覆盖了整个屏幕,这是我的设置方式:

首页:

class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home'),
),
drawer: SideDrawer(),
body: Center(
child: Text('Home page'),
),
);
}
}

抽屉小部件在一个单独的文件中:

class SideDrawer extends StatelessWidget {
const SideDrawer({Key key, this.user}) : super(key: key);
final FirebaseUser user;

@override
Widget build(BuildContext context) {
return new SizedBox(
width: MediaQuery.of(context).size.width * 0.85,
child: Drawer(
child: new ListView(
children: <Widget>[
new DrawerHeader(
child: new Text("DRAWER HEADER.."),
decoration: new BoxDecoration(color: Colors.orange),
),
new ListTile(
title: new Text("Item => 1"),
onTap: () {
Navigator.pop(context);
Navigator.push(context,
new MaterialPageRoute(builder: (context) => new HomePage()));
},
),
],
)),
);
}
}

更新:抽屉应该从登录页面获取用户详细信息,我猜这里的问题与抽屉是从单独的主脚手架调用的事实有关,这就是为什么在尽管代码中设置了 85% 的屏幕区域,但它开始覆盖整个区域。

enter image description here

我试过this solution too但没用,有什么建议吗?

最佳答案

您的大部分代码都可以。但是,您应该只制作 Widget side(BuildContext context) 而不是制作 SideDrawer 类 extends StatelessWidget

这是完整的 main.dart

import 'package:flutter/material.dart';
import 'side.dart';
import 'user.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HomePage(title: 'Flutter Demo Home Page'),
);
}
}

class HomePage extends StatefulWidget {
HomePage({Key key, this.title}) : super(key: key);

final String title;

@override
_HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
User user = new User("name","firstname","adress","username");

Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home'),
),
drawer: new SideDrawer(user:user),
body: Center(
child: Text('Home page'),
),
);
}
}

这是另一个包含 sideDrawer 的文件

import 'package:flutter/material.dart';
import 'main.dart';
import 'user.dart';

class SideDrawer extends StatelessWidget {

const SideDrawer({Key key, this.user}) : super(key: key);
final User user;

@override
Widget build(BuildContext context) {
return new SizedBox(
width: MediaQuery.of(context).size.width * 0.85,//20.0,
child: Drawer(
child: new ListView(
children: <Widget>[
new DrawerHeader(
child: new Text("DRAWER HEADER.."),
decoration: new BoxDecoration(color: Colors.orange),
),
new ListTile(
title: new Text(user.name),
onTap: () {
Navigator.pop(context);
Navigator.push(context,
new MaterialPageRoute(builder: (context) => new HomePage()));
},
),
new ListTile(
title: new Text(user.firstname),
onTap: () {
Navigator.pop(context);
Navigator.push(context,
new MaterialPageRoute(builder: (context) => new HomePage()));
},
),
new ListTile(
title: new Text(user.adress),
onTap: () {
Navigator.pop(context);
Navigator.push(context,
new MaterialPageRoute(builder: (context) => new HomePage()));
},
),
new ListTile(
title: new Text(user.username),
onTap: () {
Navigator.pop(context);
Navigator.push(context,
new MaterialPageRoute(builder: (context) => new HomePage()));
},
),
],
)),
);
}
}

这就是它最终的表现:

App Screen Capture

跳这个对你有帮助。

问候

编辑:

我已经更新了代码和图片以满足您的需求。另外我制作了一个假的 User class 仅用于演示目的。

关于dart - Flutter Drawer 作为单独的小部件不允许修改宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54227094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com