Flutter SnackBar 未显示

Ruc*_*iya 2 android flutter

我已经实现了一个提交表单的功能。我想在提交后有 SnackBar Alert。我试过了,但它不起作用。添加 SnackBar 路由后也不起作用。

addTicket() async {
if (_formKey.currentState.validate()) {
  _formKey.currentState.save();

  try{
    DocumentReference ref = await db.collection('CostalLineTicketDetails').
    document(ticketCato).collection("Tickets").add(
        {
          'startStation':startStation,
          'endStation':endStation,
          'price':price,
          'ticketType':ticketCato,
          'contactNo':contactNo,
          'dateTime':dateTime,
        });
    setState(() => id = ref.documentID);
    Navigator.push(context, new MaterialPageRoute(builder: (context) => CostalLine()));

    Scaffold.of(context).showSnackBar(SnackBar(content: Text('Ticket Added Sucessfully')));

  }catch(e){
    print(e);
  }
}
Run Code Online (Sandbox Code Playgroud)

} }

Rav*_*mar 12

  1. showSnackBar转到另一个屏幕后,您无法在同一页面上显示。
  2. 您可以_scaffoldKey 像这样声明并将其传递给 Scaffold
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();

Scaffold(
      key: _scaffoldKey,
Run Code Online (Sandbox Code Playgroud)

然后像这样打开小吃店

_scaffoldKey.currentState.showSnackBar(SnackBar(
        content: Text(
         'Welcome',
        ),
        duration: Duration(seconds: 2),
      ));
Run Code Online (Sandbox Code Playgroud)

输出:

在此处输入图片说明


编辑

您也可以在不需要每次都通过的地方使用闪光灯_scaffoldKey

例子:

   void _showBasicsFlash({
    Duration? duration,
    flashStyle = FlashBehavior.floating,
  }) {
    showFlash(
      context: context,
      duration: duration,
      builder: (context, controller) {
        return Flash(
          controller: controller,
          behavior: flashStyle,
          position: FlashPosition.bottom,
          boxShadows: kElevationToShadow[4],
          horizontalDismissDirection: HorizontalDismissDirection.horizontal,
          child: FlashBar(
            content: Text('This is a basic flash'),
          ),
        );
      },
    );
  }
Run Code Online (Sandbox Code Playgroud)

  • _scaffoldKey.currentState.showSnackBar 已弃用,使用 ScaffoldMessenger.of(context).showSnackBar (2认同)