5
votes

Accédez à un nouvel écran dans Flutter


4 commentaires

Je ne sais pas ce que je ressens à ce sujet. Je pense qu'il y a une limite au niveau bas d' une question. Je veux dire si cette question / réponse est bonne, alors nous pourrions en faire une pour littéralement tous les widgets du framework


Bien sûr, mais votre question relève de l'OMI «trop large».


Je pense qu'il doit y avoir une limite au niveau de la question. Comme @ RémiRousselet le dit, nous pouvons le faire pour n'importe quel widget du framework, plus la documentation pour cette question est assez évidente.


Le flutter doc est assez simple sur ce sujet. flutter.dev/docs/cookbook/navigation/navigation-basics


7 Réponses :


9
votes

Accédez à un nouvel écran:
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Home Screen')),
      body: Center(
        child: RaisedButton(
          child: Text(
            'Navigate to a new screen >>',
            style: TextStyle(fontSize: 24.0),
          ),
          onPressed: () {
            _navigateToNextScreen(context);
          },
        ),
      ),
    );
  }

  void _navigateToNextScreen(BuildContext context) {
    Navigator.of(context).push(MaterialPageRoute(builder: (context) => NewScreen()));
  }
}

class NewScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('New Screen')),
      body: Center(
        child: Text(
          'This is a new screen',
          style: TextStyle(fontSize: 24.0),
        ),
      ),
    );
  }
}

context est le BuildContext d'un widget et NewScreen est le nom de la deuxième disposition de widget.

entrez la description de l'image ici

Code

main.dart

Navigator.of(context).push(MaterialPageRoute(builder: (context) => NewScreen()));

Voir également


7 commentaires

et quelle en est la raison? tu fais ça tous les deux jours ... pourquoi? peut-être devriez-vous écrire un blog ou quelque chose?


@westdabestdb il le fait 3 à 4 fois par semaine, je n'ai aucune idée de ce à quoi ça sert ...


@westdabestdb "and we all know Flutter has well-written documentation." - eh bien, je dirais que ... ;-(


@pskink J'aime honnêtement leur documentation. C'était pire que l'actuel, mais leur dernier polissage et amélioration de flutter.io ont beaucoup amélioré les choses.


@westdabestdb est sûr que vous avez raison, mais quand même, je me retrouve assez souvent après avoir lu de nouveaux documents pendant environ 10 minutes, je vais aux fichiers source de la classe et ils me disent ce qui se passe mieux et plus vite que les documents correspondants ...


@pskink Certes, la lecture du code source est 10 fois meilleure que de passer du temps avec des documents, donc faire les deux est le chemin vers la solution.


Je réponds aux questions sur le SO car cela m'aide à mieux apprendre. Presque chaque question à laquelle je réponds est une question que je me pose moi-même. Quand j'ai une question, je la recherche sur Google. Si je ne trouve pas de réponse rapide ou de duplicata sur SO, j'écris une paire de questions / réponses.



1
votes

Vous pouvez essayer avec le code suivant

Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => YourNextScreen())),


0 commentaires

2
votes
onTap: () {
  Navigator.push(context,
      MaterialPageRoute(builder: (context) => NextScreenName()));
}

2 commentaires

Bien que votre réponse puisse être correcte (je ne sais pas si elle l'est), il serait beaucoup plus utile aux futurs chercheurs d'expliquer ce que cela fait et pourquoi cela fonctionne


Bonjour @MindSwipe, veuillez vous référer à la question. Donc, fondamentalement, il est utilisé pour naviguer d'un écran à un autre écran



5
votes

Accédez à l'écran suivant avec le dos en utilisant Navigator.push()

Navigator.pushReplacement(
context,MaterialPageRoute(builder: (context) => SecondRoute()),);

Accédez à l'écran suivant sans retour en utilisant Navigator.pushReplacement()

Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondRoute()),);


0 commentaires

0
votes

J'ai trouvé un bon tutoriel que j'ai suivi, il est très complet avec des captures d'écran et étape par étape, vous pouvez également télécharger le code et simplement l'exécuter. Très utile pour moi d'apprendre Flutter, en particulier je suis totalement un débutant.

https://medium.com/@misterflutter/lesson-5-creating-new-screens-f740994190c7

https://medium.com/@misterflutter/lesson-6-creating-new-screens-part-2-4997085a43af?sk=d2a0fb723af42b78800f7cf19b312b62


0 commentaires

1
votes

Si vous êtes familier avec le développement Web, cette approche est similaire au routage.

main.dart

onPressed: (){
    Navigator.pushReplacementNamed(context, '/register');
 },

Vous pouvez ajouter un bouton onPressed événement à partir de la homepage.dart d' onPressed pour naviguer dans register.dart comme suit.

void main() {
  setupLocator();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      routes: {
        '/' : (BuildContext context)=>HomePage(),
        '/register' : (BuildContext context)=>RegisterPage(),
      },
    );
  }
}


0 commentaires

0
votes

Vous pouvez également éviter complètement Navigator / MaterialPageRoute. La raison principale est les animations.

Le problème avec le routage des matériaux est que, à l'exception de l'animation Hero, il n'a qu'une animation de diapositives pour la plupart des transitions de page.

Considérez maintenant le package d' animation en conserve Flutter.

entrez la description de l'image ici

Pour avoir quelque chose comme ça, vous devez coder votre page sans utiliser Material Route. Toutes les transitions de page ici fonctionnent à l'aide de la transformation de conteneur ou du commutateur de widget de tri.

Donc, personnellement, je structurerais mon application en fonction de la transition des pages. Si la page vers laquelle je navigue a des éléments partagés avec la page précédente, j'irais avec Material Route. Un exemple serait la galerie d'images (qui partage l'image avec l'icône cliquée). Pour les transitions de page normales, je m'en passerais réellement.


0 commentaires