dart 如何在Flutter中获取对象的属性名称列表?

gr8qqesn  于 2023-02-06  发布在  Flutter
关注(0)|答案(2)|浏览(394)

我是一个新手Flutter程序员,我试图做一个通用的网格小部件,让我传递一个对象,并动态创建列和行。
我已经使它工作于一个特定的对象,但我需要的是读取一个对象的属性名称,以动态创建网格列名称和值,这样我就可以使用相同的网格为客户或文章或一切。
例如,我有一个客户类

class Client {
  int id;
  String name;
  String mail;

  Client({required this.id, required this.name, required this.mail});
}

然后在我的代码中检索一个客户机列表,并将其作为List传递给网格小部件。
我只需要知道如何循环received对象到:
1.获取字段名称列表(id,name,mail)
1.然后得到它的值比如

var field_name = element; 
    obj.field_name.value;

希望你能理解我想做的事情。提前谢谢你。

brtdzjyr

brtdzjyr1#

你可以试试这个代码

FutureBuilder<List<Client>>(
            future: // your future method which return the List<Client>,
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                return ListView.builder(
                  itemCount: snapshot.data!.length,
                  itemBuilder: (context, index) {
                    final client= snapshot.data![index];
                    return ListTile(
                      title: Text(client.name),
                      leading: CircleAvatar(
                        child: Text(client.id),
                      ),
                      subtitle: Text(client.email),
                    );
                  },
                );
              } else if (snapshot.hasError) {
                return Center(
                  child: Text(snapshot.error.toString()),
                );
              }
              return Center(
                child: CircularProgressIndicator(),
              );
            },
          },),

如果你觉得这样行就告诉我。

hec6srdp

hec6srdp2#

假设您正在获取客户端对象和类的列表,如下所示

class Client {
  int id;
  String name;
  String mail;

  Client({required this.id, required this.name, required this.mail});
}

现在,如果您的问题是如何区分列表中的某些客户端,并为它们提供单独的网格小部件?
如果是,让我们以上面给定的类为例,我们有客户,类别为设计、开发等。
我们可以简单地在类中添加另一个变量,例如

class Client {
  int id;
  String name;
  String mail;
  //type variable to differentiate , could be String or enum if you know exactly 
  String type;
  Client({required this.id, required this.name, required this.mail});
}

以及

GridView.builder(  
              itemCount: images.length,  
              gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(  
                  crossAxisCount: 2,  
                  crossAxisSpacing: 4.0,  
                  mainAxisSpacing: 4.0  
              ),  
              itemBuilder: (BuildContext context, int index){  

                Client item = Clients[index]; 
                if(item.type == 'Design')
                {
                    // display designClient item
                    return DesignGrid();
                }
                  if(item.type == 'Development')
                {
                    // display developmentType item
                    return DevelopmentGrid();
                }
              }
            )

相关问题