Flutter 如何在模态底部表单中找到 Scaffold?

问题描述 投票:0回答:0

我想了解 Flutter 如何从模态底页中找到脚手架。

这就是我所知道的:

  1. 当 Flutter 使用
    showModalBottomSheet
    打开模态底部表单时,它会将 BottomSheet 添加为 MaterialApp 的子项而不是 Scaffold。
  2. 但是当我们执行 ScaffoldMessenger.of(context) 时,其中 context 是由 BottomSheet 的构建器方法提供的,它仍然能够找到 Scaffold 并在请求时呈现 Sanckbar。
  3. 早些时候当我使用 Scaffold.of(context) 时,Flutter 会抛出一个错误,说它在遍历树时找不到 Scaffold。

这是相同的代码:

void _incrementCounter() async {
    await showModalBottomSheet(
      useRootNavigator: true,
      isScrollControlled: true,
      context: context,
      barrierColor: Colors.yellow.withAlpha(20),
      useSafeArea: true,
      builder: (_) => DraggableScrollableSheet(
        expand: false,
        builder: (__, controller) => ListView(
          controller: controller,
          children: List<Widget>.generate(
            20,
            (index) => ListTile(
              leading: Icon(chooseIcon(index)),
              title: Text(chooseText(index)),
              onTap: () async {
                ScaffoldMessenger.of(__).showSnackBar(
                  const SnackBar(
                    content: Text('Hey, try this'),
                  ),
                );
              },
            ),
          ),
        ),
      ),
    );

    if (mounted) {
      setState(() {
        _counter++;
      });
    }
  }

如您所见,我使用 __ 作为 DraggableScrollable Sheet 构建器的上下文。

我在这里错过了什么?

这是显示 Bottomsheet 是 Material App 的子项的检查器对话框

flutter bottom-sheet snackbar scaffold
© www.soinside.com 2019 - 2024. All rights reserved.