如果我想在我的自定义小部件内使用小吃店,我能做到吗?CustomWidget是否可以进入脚手架?既然小吃店应该在脚手架里?
return Scaffold(
backgroundColor: HexColor("f4f4f4"),
body: SafeArea(
child: Column(
children: [
CustomAppBar(
width: width,
topBarHeight: topBarHeight,
height: height,
),
CustomWidget(),
]))发布于 2022-03-09 10:40:36
是的,您可以在小部件中使用它,如下所示:
CustomWidget(BuildContext ctx) {
if(condition) // it can also be a button action or something like that
ScaffoldMessenger.of(ctx)
.showSnackBar(
SnackBar(content: Text(''))); //Replace Text('') with your widget
}并将context传递给您的CustomWidget(context)。
发布于 2022-03-09 10:42:28
您可以将ScaffoldState键传递给构造函数。
例如:
创建全局ScaffoldState密钥
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();以下是完整的代码:
class Test extends StatefulWidget {
const Test({Key? key}) : super(key: key);
@override
TestState createState() => TestState();
}
class _TestState extends State<Test> {
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
body: GetData(
scaffoldKey: _scaffoldKey,
),
);
}
}子部件:
class GetData extends StatefulWidget {
const GetData({
Key? key,
required this.scaffoldKey,
}) : super(key: key);
final GlobalKey<ScaffoldState> scaffoldKey;
@override
GetDataState createState() => GetDataState();
}
class _GetDataState extends State<GetData> {
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () {
widget.scaffoldKey.currentState
?.showSnackBar(const SnackBar(content: Text('content')));
},
child: Text('Show SnackBar'));
}
}https://stackoverflow.com/questions/71407715
复制相似问题