flutter 如何在无状态小部件中使用Scaffold中的SnackBar?

svmlkihl  于 2023-02-09  发布在  Flutter
关注(0)|答案(2)|浏览(114)

我有一个类扩展了StatelessWidget。当尝试调用脚手架中的SnackBars时,如下所示:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
          actions: <Widget>[
          IconButton(
            splashRadius: 18,
            icon: const Icon(Icons.thumb_up),
            tooltip: 'Like the app',
            onPressed: () {
              final SnackBar snackBar = SnackBar(
                duration: const Duration(seconds: 1),
                content: const Text('Registered as you like the application.'),
                action: SnackBarAction(
                  label: 'Undo',
                  onPressed: () {},
                ),
              );
              ScaffoldMessenger.of(context).showSnackBar(snackBar);
            },
          ),
        ],
        title: const Text('My Application'),),
        body: const Center(
        child: Text("Hello World!"),)
        );
     }
 }

运行应用程序时显示错误,如:

**出现异常。**FlutterError(未找到ScaffoldMessenger小部件。MyApp小部件需要ScaffoldMessenger小部件祖先。找不到ScaffoldMessenger祖先的特定小部件为:MyApp这个小部件的祖先是:[root]通常,ScaffoldMessenger小部件由应用程序小部件树顶部的MaterialApp引入。)

gk7wooem

gk7wooem1#

将您的应用打包到MaterialApp中,例如

void main() => runApp(MaterialApp(home: MyApp()));
lx0bsm1f

lx0bsm1f2#

使用此代码

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  GlobalKey<ScaffoldMessengerState> key = GlobalKey<ScaffoldMessengerState>();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ScaffoldMessenger(
        key: key,
        child: Scaffold(
            appBar: AppBar(
              actions: <Widget>[
                IconButton(
                  splashRadius: 18,
                  icon: const Icon(Icons.thumb_up),
                  tooltip: 'Like the app',
                  onPressed: () {
                    final snackBar = SnackBar(
                      content: Text(
                        "message",
                        // style: Theme.of(context).textTheme.regularWhite14,
                      ),
                      duration: const Duration(seconds: 5),
                      action: SnackBarAction(
                        label: 'OK',
                        textColor: CustomColorScheme.whiteColor,
                        onPressed: () {},
                      ),
                    );
                    key.currentState!.showSnackBar(snackBar);
                  },
                ),
              ],
              title: const Text('My Application'),
            ),
            body: const Center(
              child: Text("Hello World!"),
            )),
      ),
    );
  }
}

相关问题