dart - 如何使用 Flutter 实现 UserAccountsDrawerHeader 小部件的 AccountDetail 以与 Gmail 应用程序一样显示?

标签 dart flutter

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

我想点击箭头并显示如下所示的帐户详细信息。即重叠drawer的内容。就像 Gmail 应用一样。

最佳答案

基本上,您应该将其余内容替换为用户详细信息,而不是当前列表。最简单的方法是将您的抽屉变成一个有状态的小部件,并使用一个 bool 值来跟踪是否应该显示用户详细信息或正常列表。

我已将其添加到您的代码中(并添加了一些内容以使其独立,以便您可以将其粘贴到新文件中进行测试):

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())
      ]),
    );
  }
}

关于dart - 如何使用 Flutter 实现 UserAccountsDrawerHeader 小部件的 AccountDetail 以与 Gmail 应用程序一样显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51848123/

相关文章:

flutter - 在屏幕上显示“简单持续时间”计时器

flutter - 如何设置 Flutter 自定义通知图标?,因为 fcm 的 flutter 中没有默认通知图标

dart - flutter - bloc - 如何在我的 Ui 中使用 FutureBuilder 来正确实现 Bloc Architecture

objective-c - Android Studio 中现有 Flutter 项目中 Swift 或 Objective-C 的原生语言设置在哪里?

flutter - 有什么办法在Flutter中打开onPressed()事件上的相机吗?

javascript - Google Dart 下拉可见性逻辑

dart - Flutter 中的丰富链接预览

text - Flutter:文本剪辑在连续时不起作用

cocoa - 构建 iOS 时 flutter cloud firestore 错误

flutter - 如何在 Dart 中将 RGB 像素图转换为 ui.Image?