简体   繁体   中英

Flutter : Popup for each Listtile

I am working on a flutter project and I want to popup to get generated on clicking a particular tile. This is my code

This is my ListTile generator

Future<Widget> getRecordView()  {
      print("405 name " + name.toString());
      print(nameArr);
      var items = List<Record>.generate(int.parse(widget.vcont), (index) => Record(
        name: nameArr[index],
        type: typeArr[index],
        address: addressArr[index],
        state: stateArr[index],
        phone:phoneArr[index],
        city: cityArr[index],
        id: idArr[index],
      ));
      print("Started");
      var listItems =  items;
      var listview = ListView.builder(
          itemCount: int.parse(widget.vcont),
          itemBuilder: (context,index){
            return listItems[index] ;
          }
      );
      return Future.value(listview);
  }

The Popup I need on tap :

Future <bool> details(BuildContext context,String type) {
    return  Alert(
      context: context,
      type: AlertType.success,
      title: "Submission",
      desc: type,  //The parameter
      buttons: [
        DialogButton(
          child: Text(
            "OKAY",
            style: TextStyle(color: Colors.white, fontSize: 20),
          ),
          onPressed: () => Navigator.pop(context),
          color: Color.fromRGBO(0, 179, 134, 1.0),
          radius: BorderRadius.circular(0.0),
        ),
      ],
    ).show();
  }

I tried to wrap Record with GestureDetector and Inkwell, but I only got errors and Android Studio tells me that Record is not expected in that context. I looked up in the internet and couldnt find anything on this matter. Please help.

Record, as far I can see is just a model, and not a widget. Item Builder requires a widget. You should wrap what you are passing to the item builder with an actual widget like a Container(), ListTile(), .. etc. These widgets can be wrapped with Gesture Detector to perform the pop ups you want.

It would look like this

var listview = ListView.builder(
   itemCount: items.length,
   itemBuilder: (context, index) {
      return GestureDetector(
        onTap: () {
          // Tap on an item in the list and this will get executed.
        },
        // Return an actual widget, I'm using a ListTile here, but you can
        // use any other type of widget here or a create custom widget.
        child: ListTile(
          // this will display the record names as list tiles.
          title: Text(items[index].name),
      ),
    );
  },
);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM