如何在Flutter中显示SnackBar?

jds*_*flk 5 widget snackbar flutter

我想在我的 Flutter 应用程序中显示 SnackBar。我已阅读文档并复制它:\n
我的脚手架主体:

\n\n
Widget build(BuildContext context) {\n    return WillPopScope(\n      onWillPop: () async => false,\n      child: Scaffold(\n        appBar: AppBar(\n          centerTitle: true,\n          title: Text("Oszt\xc3\xa1lyok"),\n          leading: Padding(\n              padding: const EdgeInsets.only(left: 5.0),\n              child: IconButton(\n                  icon: Icon(Icons.exit_to_app, color: Colors.white70),\n                  onPressed: () {\n                    authService.signOut();\n                    authService.loggedIn = false;\n                    Navigator.push(\n                        context,\n                        MaterialPageRoute(\n                            builder: (context) => GoogleSignUp()));\n                  })),\n          actions: <Widget>[\n            Padding(\n                padding: const EdgeInsets.only(right: 5.0),\n                child: Row(\n                  children: <Widget>[\n                    IconButton(\n                        icon: Icon(Icons.add_circle_outline,\n                            color: Colors.white70),\n                        onPressed: () {\n                          createPopup(context);\n                        }),\n//                    IconButton(\n//                        icon: Icon(Icons.search, color: Colors.black38),\n//                        onPressed: null),\n                  ],\n                )),\n          ],\n        ),\n
Run Code Online (Sandbox Code Playgroud)\n\n

SnackBarPage 类:

\n\n
class SnackBarPage extends StatelessWidget {\n\n  void jelszopress(TextEditingController jelszoController, BuildContext context) async{\n    var jelszo;\n    DocumentReference docRef =   \n    Firestore.instance.collection(\'classrooms\').document(globals.getid());\n    await docRef.get().then((value) => jelszo= (value.data[\'Jelszo\']) );\n    if (jelszo == jelszoController.text.toString()){\n      Navigator.push(context,\n          MaterialPageRoute(builder: (context) => InClassRoom()));\n    }\n    else{\n      Navigator.pop(context);\n\n\n      final snackBar = SnackBar(content: Text(\'Yay! A SnackBar!\'));\n\n      Scaffold.of(context).showSnackBar(snackBar);\n    }\n  }\nFuture<String> jelszoba(BuildContext context) {\n    TextEditingController jelszoController = TextEditingController();\n    return showDialog(\n        context: context,\n        builder: (context) {\n          return AlertDialog(\n              title: Text(\'Add meg a jelsz\xc3\xb3t\'),\n              content: Container(\n                  decoration: BoxDecoration(\n                    borderRadius: BorderRadius.all(Radius.circular(20)),\n                  ),\n                  child: TextField(\n                      controller: jelszoController,\n                      decoration: InputDecoration(hintText: "Jelsz\xc3\xb3")\n                  )\n              ),\n              actions: <Widget>[\n                MaterialButton(\n                  elevation: 5.0,\n                  child: Text(\'Mehet\'),\n                  onPressed: () {\n                    jelszopress(jelszoController, context);\n                  },\n                )]);\n        }\n    );\n  }\n\n  var nevek;\n  var IDS;\n  SnackBarPage(this.nevek, this.IDS);\n  @override\n  Widget build(BuildContext context){\n    return ListView.builder(\n      itemCount: nevek.length,\n      itemBuilder: (context, index) {\n        return Card(\n          child: ListTile(\n            onTap: () {\n              globals.setid(IDS[index]);\n              jelszoba(context);\n\n            },\n            title: Text(nevek[index]),\n          ),\n        );\n      },\n    ) ;\n\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我的 cody 不显示 SnackBar。我尝试了这个问题的解决方案:如何在 Flutter 中正确显示 Snackbar?但添加 Builder 小部件并没有帮助。

\n

H. *_*yal 4

“Scaffold.of(context)”已被弃用,将返回 null。现在使用“ScaffoldMessenger.of(context)”根据 Flutter 文档。

  @override
  Widget build(BuildContext context) {
// here, Scaffold.of(context) returns null
    return Scaffold(
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            ScaffoldMessenger.of(context).showSnackBar(SnackBar(
              content: const Text('snack'),
              duration: const Duration(seconds: 1),
              action: SnackBarAction(
                label: 'ACTION',
                onPressed: () { },
              ),
            ));
          },
          child: const Text('SHOW SNACK'),
        ),
      ),
    );
  }
Run Code Online (Sandbox Code Playgroud)

注意:确保您的 main.dart 重写的 build() 函数应返回“MaterialApp”作为小部件,例如:

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
   // Must be MaterialApp widget for ScaffoldMessenger support.
  return MaterialApp(  
      title: 'My App',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyDashboard(),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)