【问题标题】:Flutter - Is it possible to show a snackbar inside another Container than the one used to trigger .show?Flutter - 是否可以在另一个 Container 中显示一个快餐栏,而不是用于触发 .show 的那个?
【发布时间】:2021-05-03 18:46:13
【问题描述】:

是否可以让快餐栏只出现在另一个小部件中? 我正在尝试这样的事情,这样当我们单击按钮时,小吃栏只会嵌入到容器中,不会出现在容器之外,但它不起作用:

@override
Widget build(BuildContext context) {
  BuildContext snackContext;
  return Stack(
    children: [
      Builder(builder: (BuildContext context) {
        snackContext = context;
        return Container(height: 300, width: 300, child: Text('Test'));
      }),
      TextButton(
        onPressed: () {
          ScaffoldMessenger.of(snackContext).showSnackBar(
            SnackBar(
              backgroundColor: Color(0x44000000),
              content: Text(
                'Test of snackbar',
              ),
            ),
          );
        },
      )
    ],
  );
}

请指教~

【问题讨论】:

    标签: flutter dart snackbar


    【解决方案1】:

    State 中保存正确的上下文。这段代码对我有用:

    class _TestPageState extends State<TestPage> with TickerProviderStateMixin {
      BuildContext snackContext;
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Container(
                height: 300,
                width: 200,
                child: Scaffold(
                  backgroundColor: Colors.deepPurple,
                  body: Builder(builder: (BuildContext context) {
                    snackContext = context;
                    return Container(height: 300, width: 300, child: Text('Test'));
                  }),
                ),
              ),
              Center(
                child: TextButton(
                  onPressed: () {
                    Scaffold.of(snackContext).showSnackBar(
                      SnackBar(
                        backgroundColor: Color(0x44000000),
                        content: Text(
                          'Test of snackbar',
                        ),
                      ),
                    );
                  },
                  child: Text('data'),
                ),
              )
            ],
          ),
        );
      }
    }
    
    class TestPage extends StatefulWidget {
      @override
      _TestPageState createState() => _TestPageState();
    }
    
    

    【讨论】:

      猜你喜欢
      • 2015-01-28
      • 2013-12-03
      • 1970-01-01
      • 2023-02-08
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      相关资源
      最近更新 更多