6
votes

Comment utiliser onTap ou onPressed dans PopupMenuItem

Comment pouvons-nous implémenter l'utilisation de onTap ou onPressed dans PopupMenuItem

Voici mon code:

import 'package:bfdi_app/Profile/editProfile.dart';
import 'package:bfdi_app/models/user.dart';
import 'package:bfdi_app/services/collection.dart';
import 'package:bfdi_app/settings.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'dart:js';

Je veux accéder à SettingPage () en appuyant ou en cliquant sur Paramètres PopupMenuItem.
J'obtiens cette erreur même après avoir suivi une solution mentionnée ci-dessous et même après avoir importé dart: js

Error: Not found: 'dart:js'
import 'dart:js';

Voici mes dépendances:

actions: <Widget>[
  PopupMenuButton(
    icon: Icon(Icons.settings),
    itemBuilder: (context) => [
      PopupMenuItem(
        child: Text("Settings"),
      ),
      PopupMenuItem(
        child: Text("Flutter.io"),
      ),
      PopupMenuItem(
        child: Text("Google.com"),
      ),
    ],
  ),
]


2 commentaires

Vous pouvez envelopper un élément de menu avec le widget InkWell


Merci, mais je veux accéder à SettingPage () en appuyant ou en cliquant sur Paramètres PopupMenuItem.


4 Réponses :


4
votes

Il existe une propriété appelée onSelected , vous devez l'utiliser, elle gère l'événement onTap .

PopupMenuButton(
  icon: Icon(Icons.settings),
  onSelected: (newValue) { // add this property
    setState(() {
      _value = newValue; // it gives the value which is selected
    });
  },
  itemBuilder: (context) => [
    PopupMenuItem(
      child: Text("Settings"),
      value: 0,
    ),
    PopupMenuItem(
      child: Text("Flutter.io"),
      value: 1,
    ),
    PopupMenuItem(
      child: Text("Google.com"),
      value: 2,
    ),
  ],
)


1 commentaires

Bonjour, je souhaite accéder à SettingPage () en appuyant ou en cliquant sur Paramètres PopupMenuItem.



1
votes

-Édité en fonction des commentaires-

C'est ça :

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  var items = [{'name':'Settings','value':0}, {'name':'Flutter.io','value':1}, {'name':'Google.com',,'value':2}];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Center(
      child: PopupMenuButton(
              onSelected: (x) {
           if(x==0){
                Navigator.push(
                     context,
                     MaterialPageRoute(builder: (context) => SettingPage()), );}
              },
              icon: Icon(Icons.settings),
              itemBuilder: (context) => items
                  .map<PopupMenuItem>((element) => PopupMenuItem(
                        child: Text(element['name]),
                        value: element['value'],
                      ))
                  .toList()),


    ));
  }
}


2 commentaires

Bonjour, je souhaite accéder à SettingPage () en appuyant ou en cliquant sur Paramètres PopupMenuItem.


Je l'ai fait mais il montre: Erreur: Non trouvé: 'dart: js'. J'ai déjà importé dart: js



9
votes

Ajoutez simplement ceci à votre PopupMenuButton:

PopupMenuItem(
    child: Text("Settings"),
    value: 0,
),

Et changez votre bouton de réglage pour:

onSelected: (result) {
    if (result == 0) {
        Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => SettingPage()),
        );
    }
},


11 commentaires

Je l'ai fait mais il montre: Erreur: Non trouvé: 'dart: js'. J'ai déjà importé dart: js


alors mettez ceci: import 'dart:js'; en haut de votre dossier


Je l'ai déjà fait. J'ai mis à jour la question, veuillez l'examiner.


Ajoutez cette ligne au-dessus de vos autres importations. Sur la première ligne


Sur quelle plateforme construisez-vous le flutter?


Code Visual Studio


Je veux dire plate-forme web ou mobile?


C'est une plateforme mobile avec AVM


Pourriez-vous créer une autre question avec une description détaillée de votre nouveau problème?


Ok, laissez-moi le faire.


Voici le lien: stackoverflow.com/questions/59479813/...



0
votes

Valeur appelable.

PopupMenuButton(
  icon: Icon(Icons.settings),
  onSelected: (value) {
    value();
  },
  itemBuilder: (context) => [
    PopupMenuItem(
      child: Text('Settings'),
      value: () {
        debugPrint('open Settings');
      },
    ),
    PopupMenuItem(
      child: Text('Flutter.io'),
      value: () {
        debugPrint('goto Flutter.io');
      },
    ),
  ],
)


0 commentaires