Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 如何实现UserAccountsDrawerHeader小部件的AccountDetail,使其与使用Flatter的Gmail应用程序一样显示?_Dart_Flutter - Fatal编程技术网

Dart 如何实现UserAccountsDrawerHeader小部件的AccountDetail,使其与使用Flatter的Gmail应用程序一样显示?

Dart 如何实现UserAccountsDrawerHeader小部件的AccountDetail,使其与使用Flatter的Gmail应用程序一样显示?,dart,flutter,Dart,Flutter,我正在使用flatterUserAccountsDrawerHeader小部件来显示用户的数据,但我不知道如何实现onDetailsPressed()函数来调用用户详细信息。这是我的密码: import 'package:flutter/material.dart'; class HomeScreen extends StatefulWidget { @override _HomeScreenState createState() => _HomeScreenState(); }

我正在使用flatter
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())
      ]),
    );
  }
}