Je suis coincé dans un problème où je dois accéder à l'un de mes widgets personnalisés définis dans une classe dans une autre classe.

J'ai essayé de créer un objet de cette classe (qui a le widget personnalisé) dans ma classe principale.

Voici l'erreur:

La méthode '_bottom' n'est pas définie pour la classe 'BottomBarApp'.\nEssayez de corriger le nom par le nom d'une méthode existante, ou de définir une méthode nommée '_bottom'.

Classe qui a le widget _bottom() qui doit être accessible dans la classe principale.

class BottomBarApp extends StatefulWidget {
  @override
  _BottomBarAppState createState() => _BottomBarAppState();
}

class _BottomBarAppState extends State<BottomBarApp> {

 //widget to be accessed
  Widget _bottom()=> BottomNavigationBar(
    //somecode  
);


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: _back,
      appBar: AppBar(
        backgroundColor: _back,
        title: Center(child:Text(_data)),
      ),
        body: Container(
          child: Center(
            child:  Text(_data,style: TextStyle(color: Colors.blue, fontSize: 40),),
          )

        ),


      bottomNavigationBar: object._bottom(),
    );


  }
}

Classe principale

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);


  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

 BottomBarApp object = new BottomBarApp(); //here's the object


  @override
  Widget build(BuildContext context) {
    return Scaffold(


     bottomNavigationBar: _bottom(),  //trying to access!!!!
    );
  }
}

Veuillez aider!

0
Aditya Patnaik 11 oct. 2019 à 12:00

1 réponse

Meilleure réponse

Vous ne pouvez pas utiliser de méthodes pour créer des widgets réutilisables.

Si vous devez plutôt extraire cette méthode dans une classe et utiliser cette classe directement.

Au lieu de:

class MyWidgetState extends State<MyWidget> {
  Widget someWidget() {
    return Container();
  }

  Widget build(BuildContext context) {
    return Container(child: someWidget());
  }
}

Faire:

class SomeWidget extends StatelessWidget {
  Widget build(BuildContext context) {
    return Container();
  }
}

class MyWidgetState extends State<MyWidget> {
  Widget build(BuildContext context) {
    return Container(child: SomeWidget());
  }
}
1
Rémi Rousselet 11 oct. 2019 à 09:09