Dart 如何实现UserAccountsDrawerHeader小部件的AccountDetail,使其与使用Flatter的Gmail应用程序一样显示?
我正在使用flatterDart 如何实现UserAccountsDrawerHeader小部件的AccountDetail,使其与使用Flatter的Gmail应用程序一样显示?,dart,flutter,Dart,Flutter,我正在使用flatterUserAccountsDrawerHeader小部件来显示用户的数据,但我不知道如何实现onDetailsPressed()函数来调用用户详细信息。这是我的密码: import 'package:flutter/material.dart'; class HomeScreen extends StatefulWidget { @override _HomeScreenState createState() => _HomeScreenState(); }
UserAccountsDrawerHeader
小部件来显示用户的数据,但我不知道如何实现onDetailsPressed()
函数来调用用户详细信息。这是我的密码:
import 'package:flutter/material.dart';
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
@override
Widget build(BuildContext context) {
return new Scaffold(
drawer: _buildDrawer(context),
appBar: _buildAppBar(),
);
}
}
Widget _buildAppBar() {
return new AppBar();
}
Widget _buildDrawer(BuildContext context) {
return new Drawer(
child: new ListView(
children: <Widget>[
new UserAccountsDrawerHeader(
accountName: new Text("Cleudice Santos"),
accountEmail: new Text("cleudice.ms@gmail.com"),
onDetailsPressed: () {},
),
new ListTile(
title: new Text("Visão geral"),
leading: new Icon(Icons.dashboard),
onTap: () {
print("Visão geral");
},
),
],
),
);
}
导入“包装:颤振/材料.省道”;
类主屏幕扩展StatefulWidget{
@凌驾
_HomeScreenState createState()=>\u HomeScreenState();
}
类_homescrenstate扩展状态{
@凌驾
小部件构建(构建上下文){
归还新脚手架(
出票人:_buildDrawer(上下文),
appBar:_buildAppBar(),
);
}
}
小部件_buildAppBar(){
返回新的AppBar();
}
Widget\u buildDrawer(BuildContext上下文){
归还新抽屉(
子:新列表视图(
儿童:[
新用户帐户DrawerHeader(
账户名称:新文本(“Cleudice Santos”),
accountEmail:新文本(“cleudice。ms@gmail.com"),
onDetailsPressed:(){},
),
新ListTile(
标题:新文本(“Visão geral”),
领先:新图标(图标。仪表板),
onTap:(){
印刷品(“Visão geral”);
},
),
],
),
);
}
我想单击箭头并显示帐户详细信息,如下所示。也就是说,重叠抽屉的内容。就像Gmail应用程序一样
基本上,您应该做的是用用户详细信息而不是当前列表替换其余内容。最简单的方法是将抽屉变成一个有状态的小部件,并使用一个布尔值来跟踪是否应该显示用户详细信息或正常列表
我已将其添加到您的代码中(并添加了一点以使其自包含,以便您可以将其粘贴到新文件中进行测试):
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了StatefulWidget{
@凌驾
MyAppState createState()=>MyAppState();
}
类MyAppState扩展了状态{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主页:主屏幕(),
);
}
}
类主屏幕扩展StatefulWidget{
@凌驾
_HomeScreenState createState()=>\u HomeScreenState();
}
类_homescrenstate扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
抽屉:UserDetailDrawer(),
appBar:_buildAppBar(),
);
}
}
小部件_buildAppBar(){
返回AppBar();
}
类UserDetailDrawer扩展StatefulWidget{
@凌驾
_UserDetailDrawersState createState()=>\u UserDetailDrawerState();
}
类_UserDetailDrawerState扩展状态{
bool showUserDetails=false;
小部件_buildDrawerList(){
返回列表视图(
儿童:[
列表砖(
标题:文本(“Visão geral”),
前导:图标(图标.仪表板),
onTap:(){
印刷品(“Visão geral”);
},
),
列表砖(
标题:文本(“另一块瓷砖”),
引导:图标(图标。问题和答案),
),
],
);
}
小部件_buildUserDetail(){
返回容器(
颜色:颜色。浅蓝色,
子:ListView(
儿童:[
列表砖(
标题:文本(“用户详细信息”),
前导:图标(Icons.info_outline),
)
],
),
);
}
@凌驾
小部件构建(构建上下文){
回程抽屉(
子项:列(子项:[
UserAccountsDrawerHeader(
账户名称:文本(“Cleudice Santos”),
accountEmail:Text(“cleudice。ms@gmail.com"),
onDetailsPressed:(){
设置状态(){
showUserDetails=!showUserDetails;
});
},
),
已展开(子项:showUserDetails?\u buildUserDetail():\u buildDrawerList())
]),
);
}
}
您面临的问题是什么?你也可以分享代码片段以及你想要实现的目标。我编辑了我的问题来添加代码。我无法直接插入,所以我将其添加到要点中。我将您的代码添加到问题中,并删除了要点。您只需将其粘贴进去,确保首先有一个空行,并将其全部缩进4个空格。或者粘贴它,选择它,然后按“代码”按钮,插入一行并缩进。希望对你有所帮助。@rmtmckenzie谢谢你。为了更好地理解,我减少了代码。我尝试了推送,但无法继续。你对如何进行有什么建议吗?啊,既然你已经更新了你的问题,我知道你想要什么了。我会编辑我的答案,你想要的和我想要的不同。这正是我需要的。我以前不是很清楚,我在问一个问题。非常感谢你。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
MyAppState createState() => MyAppState();
}
class MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
drawer: UserDetailDrawer(),
appBar: _buildAppBar(),
);
}
}
Widget _buildAppBar() {
return AppBar();
}
class UserDetailDrawer extends StatefulWidget {
@override
_UserDetailDrawerState createState() => _UserDetailDrawerState();
}
class _UserDetailDrawerState extends State<UserDetailDrawer> {
bool showUserDetails = false;
Widget _buildDrawerList() {
return ListView(
children: <Widget>[
ListTile(
title: Text("Visão geral"),
leading: Icon(Icons.dashboard),
onTap: () {
print("Visão geral");
},
),
ListTile(
title: Text("Another tile??"),
leading: Icon(Icons.question_answer),
),
],
);
}
Widget _buildUserDetail() {
return Container(
color: Colors.lightBlue,
child: ListView(
children: [
ListTile(
title: Text("User details"),
leading: Icon(Icons.info_outline),
)
],
),
);
}
@override
Widget build(BuildContext context) {
return Drawer(
child: Column(children: [
UserAccountsDrawerHeader(
accountName: Text("Cleudice Santos"),
accountEmail: Text("cleudice.ms@gmail.com"),
onDetailsPressed: () {
setState(() {
showUserDetails = !showUserDetails;
});
},
),
Expanded(child: showUserDetails ? _buildUserDetail() : _buildDrawerList())
]),
);
}
}