5
votes

Afficher un SnackBar au-dessus de la feuille de fond modale

J'ai essayé d'afficher un SnackBar au-dessus de ma feuille de fond modale, mais cela ne fonctionne pas. Une idée comment y parvenir?

PS: le réglage du comportement de SnackBar sur Floating ne fonctionne pas. Il apparaît toujours sous la feuille de fond modale

Merci


1 commentaires

Comment quelqu'un peut-il vous aider avec une question comme celle-ci? Vous devez fournir un code ce que vous avez essayé ce qui ne fonctionne pas et ainsi de suite


5 Réponses :


0
votes

Avez-vous essayé de définir la propriété de comportement sur flottant?

SnackBar(
  behavior: SnackBarBehavior.floating

Cela devrait résoudre le problème


2 commentaires

Flottant ne signifie pas que le SnackBar commencera à flotter au-dessus d'autres widgets.


Ne fonctionne pas, il apparaît toujours sous la feuille inférieure modale



0
votes

Utilisez la propriété de comportement du snack.

SnackBar(
    behavior: SnackBarBehavior.floating,)


0 commentaires

3
votes

Si vous souhaitez utiliser un package tiers, vous pouvez facilement le faire avec GetX .

pubspec.yaml simplement le package dans votre fichier pubspec.yaml :

import 'package:flutter/material.dart';
import 'package:get/get.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: Home(),
    );
  }
}

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Snackbar above Bottom Modal Sheet'),
      ),
      body: SafeArea(
        child: Center(
          child: RaisedButton(
            child: Text('Open Modal Sheet'),
            onPressed: () {
              // Bottom Modal Sheet
              Get.bottomSheet(
                Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Text('My bottom modal sheet'),
                    RaisedButton(
                      child: Text('Show SnackBar'),
                      onPressed: () {
                        // Snackbar
                        Get.snackbar(
                          'Hey',
                          'I am a snackbar',
                          snackPosition: SnackPosition.BOTTOM,
                          backgroundColor: Colors.red,
                        );
                      },
                    ),
                  ],
                ),
                backgroundColor: Colors.green,
              );
            },
          ),
        ),
      ),
    );
  }
}

Changez votre MaterialApp en GetMaterialApp .

GetMaterialApp est nécessaire pour les itinéraires, les barres-collations, l'internationalisation, les bottomSheets, les dialogues et les API de haut niveau liés aux itinéraires et à l'absence de contexte.

Et utilisez Get.bottomSheet() et Get.snackbar() . Vous avez un tas de propriétés pour personnaliser les deux méthodes. Si un BottomModalSheet est ouvert et que vous créez un Snackbar, il s'affiche automatiquement au-dessus de la feuille.

Exemple simple:

dependencies:
  get: ^3.17.0

démo


0 commentaires

1
votes

Vous devrez utiliser GlobalKey<ScaffoldState> pour afficher le Snackbar dans l'échafaudage souhaité, pour cela, vous pouvez ajouter Scaffold dans votre showModalBottomSheet comme ci-dessous snip;

Définissez votre GlobalKey dans votre classe de widget Statefull ou Stateless

                showModalBottomSheet(
                  context: context,
                  builder: (_) => Scaffold(
                      extendBody: false,
                      key: _modelScaffoldKey,
                      resizeToAvoidBottomInset: true,
                      body: FlatButton(
                        child: Text("Snackbar"),
                        onPressed: () {
                          _modelScaffoldKey.currentState.showSnackBar(SnackBar(
                            content: Text("Snackbar"),
                          ));
                        },
                      )),
                );

Et sur le button , vous pouvez avoir;

final GlobalKey<ScaffoldState> _modelScaffoldKey = GlobalKey<ScaffoldState>();

DartPad


1 commentaires

Fonctionne comme un charme, aucun plugin tiers requis!



0
votes

Essayez de définir une marge pour le Snackbar fonction de la hauteur des BottomSheets :

SnackBar(behavior: SnackBarBehavior.floating, margin: EdgeInsets.fromLTRB(0, 0, 0, 500),)


2 commentaires

Cela fonctionne mais le snack est toujours en dessous de la barrière de couleur.


Vous pouvez utiliser une feuille inférieure normale au lieu d'une feuille inférieure modale en changeant showModalBottomSheet en showBottomSheet.