在listview.builder子项中更新视图

时间:2019-11-14 16:38:31

标签: flutter

到目前为止,我才刚开始工作。但目前我有一个问题: 我希望在Listview.builder小部件中的子视图上点击时显示一个选中图标

     child:  ListView.builder(
                  shrinkWrap: true,
                  itemCount: users.length,
                  itemBuilder: (BuildContext context, int index){
                    // final item = feeds[index];
                    return FlatButton(
                        onPressed:(){
                          setState(() {
                            _selected = !_selected;
                            choosenUser = users[index];
                            print("the user:${users[index].fullName},$_selected");

                          });


                        },
                        child:(_selected) ? UserCard(users[index], _selected):UserCard(users[index], _selected)
                    );
                  }
              )

在UserCard内,当单击ListView.builder中的FlatButton时,我希望显示或隐藏一个选中图标。 我向用户卡传递了一个布尔值,但是它不起作用

class UserCard extends StatefulWidget{
  UserItem userItem;
  bool selected;

  UserCard(this.userItem, this.selected);
  @override
  _UserCard createState() => _UserCard(userItem,selected);
}

class _UserCard extends State<UserCard>{
  UserItem _userItem;
  bool selected;
  _UserCard(this._userItem, this.selected);

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return /* GestureDetector(
        onTap: () {
      setState(() {
        selected = !selected;
        print("user:${_userItem.fullName}");


      });
    },
child:*/Container(
    height:80 ,
    child:
          Column(
            children: <Widget>[
              Row(
                children: <Widget>[
                  _userItem.profileUrl != null? CircleAvatar(child: Image.asset(_userItem.profileUrl),): Container(

                    width: 50,
                    height: 50,
                    decoration: BoxDecoration(
                        color: Colors.white70,
                        shape: BoxShape.circle,
                        image: DecorationImage(
                            image:AssetImage('assets/plus.png') //NetworkImage(renderUrl ??'assets/img.png')
                        )
                    ),

                  ),

                  SizedBox(width: 30,),
                  Expanded(
                    flex: 1,
                    child:
                    Container(

                        child:
                        Row(
                          children: <Widget>[

                            Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: <Widget>[
                                SizedBox(height: 12,),
                                _userItem.fullName != null? Text(_userItem.fullName, style: TextStyle(fontSize: 18)): Text('Anjelika Thompson', style: TextStyle(fontSize: 18),),
                                SizedBox(height: 12,),

                                Row(
                                  //crossAxisAlignment: CrossAxisAlignment.start,
                                  // mainAxisAlignment: MainAxisAlignment.spaceBetween,
                                    children: <Widget>[
                                      Container(child: Icon(Icons.location_on),alignment: Alignment.topLeft,),
                                      SizedBox(width: 10,),
                                      _userItem.distance_KM.toString() != null ? Text(_userItem.distance_KM.toString()):Text('48.7 km')

                                    ]),

                              ],
                            ),

                          ],
                        )
                    ),
                 ),
                  SizedBox(width: 0,),

                  selected ? Icon(Icons.check,color: Colors.red,size: 40,):SizedBox(child: Text('$selected'),)


                ],
              ),
              Container(
                height: 0.5,
                color: Colors.grey,
              )
            ],
          ) ,
     //   )

    );
  }

}

请我在这里做错什么

2 个答案:

答案 0 :(得分:0)

将选择保存在布尔值列表中。

import matplotlib.pyplot as plt
import math as m

c=3.183e-6
for x in (1,100000):
    hz=x
    w=x*2*m.pi
    mag=1/m.sqrt(1+(50*c*w)**2)

plt.xscale('log')
plt.plot(hz,mag)

答案 1 :(得分:0)

所以我不得不走另一条路来解决我代码中的问题。这是我的代码: 在我的模型类UserItem中,我引入了另一个参数selectedd

class UserItem{
  String fullName, profileUrl;
  double distance_KM;
  bool selected;
  UserItem(this.fullName, this.profileUrl, this.distance_KM, this.selected);

} 由于我现在使用静态值,因此我传入了“ false”

List<UserItem> users = []
..add(UserItem("Edward Norton","assets/profile_img.png", 12.0, false))
..add(UserItem("Gary Owen","assets/img.png", 21, false))
..add(UserItem("Eddie L.","assets/img_details.png", 12.7, false))
..add(UserItem("Carlos Snow","assets/header_user.png", 1.3, false))
..add(UserItem("Idibbia Olaiya","assets/profile_img.png", 0, false));

然后,当用户单击任何子项时,将更新已设置为false的所选值。这是我的Listview.builder小部件:

           Expanded(
              child:  ListView.builder(
                  shrinkWrap: true,
                  itemCount: users.length,
                  itemBuilder: (BuildContext context, int index){
                    // final item = feeds[index];
                    return
                      Stack(
                      children: <Widget>[


                        Container(
                          child:   FlatButton(
                            onPressed:(){
                              setState(() {

                                selected = !selected;
                                users[index].selected =selected;
                                //  _theIcon = selected ? _theIcon : Icon(Icons.check,color: Colors.grey,size: 40,);

                                choosenUser.add(users[index]) ;
                               // print("the user:${users[index].fullName},$selected");
                                // child_card(users[index], selected,index);

                              });


                            }, child:child_card(users[index]),
                          ),
                        )

                      ],
                    );
                  }
              )
          )

   Widget child_card(UserItem user){
 // print("the user:${user.fullName},$selected");
    return UserCard(user);
  }

希望这对某人有帮助。