【问题标题】:How to be navigated to the page of the profile details when the user's name is clicked单击用户名时如何导航到个人资料详细信息的页面
【发布时间】:2021-05-12 04:25:38
【问题描述】:

您好,所以我在 Mockaroo 中创建了一个假数据来显示用户及其个人资料详细信息。我的目标是显示名称,点击后将重定向到个人资料详细信息。

到目前为止,这是我的代码。非常感谢您的帮助,因为我对此很陌生。

Future<List<Users>> _getUsers() async {
    var data =
        await http.get("https://my.api.mockaroo.com/users.json?key=8f9261404");

    var jsonData = json.decode(data.body);

    List<Users> users = [];

    for (var u in jsonData) {
      Users user = Users(
          u["user_id"],
          u["name"],
          u["email"],
          u["mobile"],
          u["address"]);

      users.add(user);
    }
    return users;
  }

我上课了

class Users {
  Users(
      {this.id,
      this.name,
      this.email,
      this.mobile,
      this.address});

  final int id;
  final String name;
  final String email;
  final String mobile;
  final String address;
 
}

这是我的用户界面

body: SingleChildScrollView(
          child: Column(
        children: <Widget>[
          FutureBuilder(
            future: _getUsers(),
            builder: (BuildContext context, AsyncSnapshot snapshot) {
              if (snapshot.data == null) {
                return Container(child: Center(child: Text("Loading...")));
              } else {
                return ListView.builder(
                  itemCount: snapshot.data.length,
                  itemBuilder: (BuildContext context, int index) {
                    return ListTile(
                      key: Key("$index"),
                      title: Text(snapshot.data[index].name),);
                  },
                );
              }
            },
          ),
        ],
      )),

同样,我的目标是在点击用户名时导航到个人资料详细信息页面。

【问题讨论】:

  • 只需用 GestureDetector 包裹你的 ListTile 的标题就可以了
  • 您好,您能详细说明一下吗?而且我也不认为我会使用 GestureDetector。我正在寻找类似 navigator.of.push 的东西,但我很困惑如何去做,因为当点击某个名称时,数据需要显示每个用户的正确详细信息。
  • 您创建了个人资料详情页面吗?
  • 你好,是的,我做到了,但我的问题是当我尝试输入 Text("Mobile No.: ${userData.mobile}") 时出现错误,因为 $userData 在我粘贴上面代码的页面中初始化。如何在个人资料详情页面中使用 $userData?

标签: json flutter flutter-web


【解决方案1】:

您可以用GestureDetector 包裹您的ListTile,然后使用Navigator,如下所示:

GestureDetector(
    child: ListTile(
            key: Key("$index"),
            title: Text(snapshot.data[index].name),
    onPressed: (){
        Navigator.push(
            context,
            MaterialPageRoute(builder: (context) {
              return DetailScreen(data: snapshot.data.documents[index]);
            }),
    },
)

onPressed 中导航到详细信息屏幕,然后将数据传递到详细信息屏幕。这是通过将数据作为参数传递到您的详细信息屏幕来完成的:return DetailScreen(data: snapshot.data.documents[index]);。然后,您可以使用 data 参数在新的详细信息屏幕中访问您的数据。 您必须首先创建您的详细信息屏幕,如下所示:

class DetailScreen extends StatelessWidget {

final DocumentSnapshot data;
  
  DetailScreen({this.data})

  @override
  Widget build(BuildContext context) {
    return Container(
      //Do something with data
    );
  }
}

【讨论】:

  • 谢谢你!先生,我有一个问题。 return DetailScreen(data: snapshot.data[index]) 中的 data 在哪里声明?
  • 您必须在您的详细信息屏幕中声明它。这意味着您必须创建一个新类(一个新屏幕)。在那里您可以声明data 以及您不想在屏幕上看到的所有其他内容。我在上面给出了一个例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 2016-03-10
  • 2018-10-16
  • 2016-10-13
  • 2011-08-14
相关资源
最近更新 更多