web-dev-qa-db-fra.com

Flutter: spécifiez la hauteur de ListTile

Dans ce code, j'essaie de faire une liste de boutons ou de tuiles "car les boutons ne fonctionnent pas bien pour moi" en haut de la page. Ainsi, lorsque l'on clique dessus, il renvoie une valeur dans le reste de la page.

Le problème est le suivant: la vignette présente sur plus de la moitié de la page, ce qui la rend incohérente. Je veux limiter la hauteur de la tuile, j'ai essayé de les mettre dans une rangée et un conteneur et ça ne marche pas. Toute aide serait appréciée.

le résultat après l'exécution du code est:

c'est l'erreur après avoir exécuté le code: enter image description here

class HomePage extends StatefulWidget {
 // const HomePage({Key key}) : super(key: key);

  @override
  HomePageState createState() {
    return new HomePageState();
  }
}

class HomePageState extends State<HomePage> {
List<String> temp=new List();
List<String> temp1=['Nile University', 'Smart Village', 'Zewail'];
Map<String,String> map1={};
@override
void initState() {
    super.initState();
  getplaces(temp);
  getuser(map1,'1jKpg81YCO5PoFOa2wWR');

  }


Future<List> getuser(temp,String place) async{
  List<String> userids=[];
  QuerySnapshot usersubs= await  Firestore.instance.collection('tempSubs').getDocuments();
  QuerySnapshot userid= await  Firestore.instance.collection('users').where('place',isEqualTo: place).getDocuments();
  userid.documents.forEach((DocumentSnapshot doc,){
  usersubs.documents.forEach((DocumentSnapshot doc1){
    if(doc.documentID==doc1.documentID){
      doc1.data['products'].forEach((k,v){

       if( DateTime.fromMillisecondsSinceEpoch(v).day==DateTime.now().day){

        int x= DateTime.fromMillisecondsSinceEpoch(v).day;
                print('keey equal $k and v is $x');

        print('dy is $x');
      userids.add(
      doc.documentID);
       }
      });

    }
  } ); }  
    );
              print('doc.documentID');
  print (userids);
   setState(() {});
 return userids;
  }


Future<List> getplaces(temp) async{
    QuerySnapshot place= await  Firestore.instance.collection('places').getDocuments();
  place.documents.forEach((DocumentSnapshot doc){
    temp.add(
      doc.data['name']
    );
            //  print(doc.data['name']);

  });
  //  print(temp);

   setState(() {});
 return temp;
  }



  @override
  Widget build(BuildContext context) {
      return Scaffold(
      appBar: AppBar(
         title: Text("Home Page"),
        ),

  body: !temp.isNotEmpty? 
   CircularProgressIndicator():  
   Row(mainAxisSize:MainAxisSize.max,
   mainAxisAlignment: MainAxisAlignment.spaceAround,

     children:<Widget>[ 
        Container(
                      height: 100.0,
                      child:
           ListView.builder(
             scrollDirection: Axis.horizontal,
             itemExtent: 100.0,
             itemCount:temp.length,
             itemBuilder:(BuildContext context, int index) {
                return ListTile(title: Text(temp[index]),onTap:
                (){
                  print(temp[index]);
                }
                 );}
     ),),
     Container(child:Text('data'),)
    ],),

        );

        }
}
8
Aya Elsisy

Vous devez utiliser un conteneur ou un remplissage au lieu de ListTile si vous avez besoin de plus de personnalisation.

Vous ne pouvez pas définir la hauteur, mais vous pouvez la réduire en définissant la propriété dense sur true:

ListView.builder(
          scrollDirection: Axis.vertical,
          shrinkWrap: true,
          itemCount: list.length,
          itemBuilder: (context, index) {
            return ListTile(
              title: Text(list[index].name,style: TextStyle(fontSize: 20.0),),
              contentPadding: EdgeInsets.symmetric(vertical: 0.0, horizontal: 16.0),
              dense:true,                  
            );
          },
        );

ListTile:

Une seule ligne à hauteur fixe qui contient généralement du texte ainsi qu'une icône de début ou de fin.

Pour être accessibles, les widgets de début et de fin utilisables doivent avoir une taille d'au moins 48 x 48. Cependant, pour respecter les spécifications de matériau, les widgets de fin et de début dans les ListTiles à une ligne doivent visuellement avoir une hauteur d'au plus 32 (dense: vrai) ou 40 (dense: faux), ce qui peut entrer en conflit avec l'exigence d'accessibilité.

Pour cette raison, un ListTile sur une ligne permet de limiter la hauteur des widgets de début et de fin par la hauteur du ListTile. Cela permet de créer des widgets de début et de fin utilisables qui sont suffisamment grands, mais il appartient au développeur de s'assurer que leurs widgets respectent les spécifications du matériau.

https://api.flutter.dev/flutter/material/ListTile-class.html

0
live-love