Cod*_*ter 10 dart snackbar flutter flutter-layout
我试图在我的应用程序中显示小吃店以通知用户,但没有脚手架它会显示我的错误。我目前的代码是:
scaffoldKey.currentState?.showSnackBar(
new SnackBar(
backgroundColor: color ?? Colors.red,
duration: Duration(milliseconds: milliseconds),
content: Container(
height: 50.0,
child: Center(
child: new Text(
title,
style: AppTheme.textStyle.lightText.copyWith(color: Colors.white),
overflow: TextOverflow.ellipsis,
),
),
),
),
)
Run Code Online (Sandbox Code Playgroud)
Bug*_*lla 83
如果您可以从laszlo 的回答中访问上下文,只需调用
ScaffoldMessenger.of(context).showSnackBar(snackBar);
Run Code Online (Sandbox Code Playgroud)
如果您没有上下文(例如:显示网络请求错误),请根据Miguel Ruvio的回答使用此代码段
我们将使用脚手架MessengerKey 属性,它允许我们仅使用一个 GlobalKey 即可显示小吃栏,而无需上下文。此外,无需添加像 Get 这样的第 3 方包。
首先,创建一个globals.dart来存储一个GlobalKey
//globals.dart
import 'package:flutter/material.dart';
final GlobalKey<ScaffoldMessengerState> snackbarKey =
GlobalKey<ScaffoldMessengerState>();
Run Code Online (Sandbox Code Playgroud)
二、向MaterialApp添加scaffoldMessengerKey属性
//main.dart
import 'globals.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Test',
scaffoldMessengerKey: snackbarKey, // <= this
...
Run Code Online (Sandbox Code Playgroud)
最后,在任何地方引用此键即可显示 Snackbar
// anywhere
import 'globals.dart';
final SnackBar snackBar = SnackBar(content: Text("your snackbar message"));
snackbarKey.currentState?.showSnackBar(snackBar);
Run Code Online (Sandbox Code Playgroud)
Mik*_*chy 10
它可以获取当前上下文并像这样显示snackbar:
void _showToast(BuildContext context) {
final scaffold = Scaffold.of(context);
scaffold.showSnackBar(
SnackBar(
content: const Text('Updating..'),
),
);
}
this._showToast(context);
Run Code Online (Sandbox Code Playgroud)
不,这是不可能的。Snackbar 是 Scaffold 的一部分。它必须有一个 Scaffold 父级。小吃店
在 Scaffold 父级中,您可以执行以下操作
BuildContext con=context;
final snackBar = SnackBar(content: Text(message));
Scaffold.of(con).showSnackBar(snackBar);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16131 次 |
| 最近记录: |