Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Semplificazione passaggio di funzioni #3

Open
2 tasks
ncvescera opened this issue May 31, 2022 · 0 comments
Open
2 tasks

Semplificazione passaggio di funzioni #3

ncvescera opened this issue May 31, 2022 · 0 comments
Labels
enhancement New feature or request

Comments

@ncvescera
Copy link
Owner

ncvescera commented May 31, 2022

Per come è scritto il codie per poter invocare una funzione di un Widget da un altro widget gli va passata come parametro.

void setStateNoFile() {
setState(() {
_filePath = "";
_body = NoFilePage(
appName: appName,
notifyParent: fileLoaded,
deleteFile: deleteFile,
updateCallback: _checkUpdateOnStart,
);
});
}

Questa riga mostra questo esempio: la funzione _checkUpdateOnStart viene passata al Widget che poi la usa al suo interno in qualche punto
updateCallback: _checkUpdateOnStart,

Questo, fin quando si tratta di passare una funzione ad un widget va bene, ma inizia a sorgere un problema di comprensione del codice quando quella funzione deve essere passata ad un Widget che la passa ad un Widget che la passa ad un Widget ecc.

Ho trovato un modo per semplificare il tutto che permette di invocare una funzione direttamente dal Widget che ne ha bisogno senza dover ricorrere a questo passaggio. Lo svantaggio è che va esposto lo stato del Widget che contiene la funzione in questione e serve quindi una gestione degli attributi e degli altri metodi migliroe (le variabili/metodi che devono essere privati vanno messi privati per bene).

Il metodo funziona così:

Espongo lo stato del widget dove è contenuta la funzione che voglio che venga utilizzata da altri widget.

class HomePage extends StatefulWidget {
  const HomePage({
    Key? key,
    required this.appName,
  }) : super(key: key);

  final String appName;
 
  // esposizione dello stato del widget
  static of(BuildContext context, {bool root = false}) => root
      ? context.findRootAncestorStateOfType<_HomePageState>()
      : context.findAncestorStateOfType<_HomePageState>();
  // ------------- //
  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  void myFunction() {
     print('FUNZIONO');
  }

  ...

Utilizzo quindi la funzione che voglio all'interno di un altro widget.

... 

class _MyAppBarState extends State<MyAppBar> {

  void aFunction() {
     HomePage.of(context).myFunction();
  }
 
  ...

TODO:

  • Testare questo metodo e vedere se migliora effettivamente la lettura del codice e non peggiora le performance
    • Implementarlo !
@ncvescera ncvescera added the enhancement New feature or request label May 31, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant