gpt4 book ai didi

flutter - 使用不包含 Scaffold 的上下文调用 Scaffold.of()

转载 作者:IT老高 更新时间:2023-10-28 13:48:12 26 4
gpt4 key购买 nike

如您所见,我的按钮位于 Scaffold 内的 body 。但我得到了这个异常(exception):

使用不包含 Scaffold 的上下文调用 Scaffold.of()。

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HomePage(),
);
}
}

class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SnackBar Playground'),
),
body: Center(
child: RaisedButton(
color: Colors.pink,
textColor: Colors.white,
onPressed: _displaySnackBar(context),
child: Text('Display SnackBar'),
),
),
);
}
}

_displaySnackBar(BuildContext context) {
final snackBar = SnackBar(content: Text('Are you talkin\' to me?'));
Scaffold.of(context).showSnackBar(snackBar);
}

编辑:

我找到了解决此问题的另一种方法。如果我们给 Scaffold一个键是 GlobalKey<ScaffoldState> ,我们可以将 SnackBar 显示如下,而无需将正文包裹在 Builder 中小部件。返回 Scaffold 的小部件不过应该是一个有状态的小部件。

 _scaffoldKey.currentState.showSnackBar(snackbar); 

最佳答案

发生此异常是因为您正在使用实例化 Scaffold 的小部件的 context。不是 Scaffold 的子项的 context

你可以通过使用不同的上下文来解决这个问题:

Scaffold(
appBar: AppBar(
title: Text('SnackBar Playground'),
),
body: Builder(
builder: (context) =>
Center(
child: RaisedButton(
color: Colors.pink,
textColor: Colors.white,
onPressed: () => _displaySnackBar(context),
child: Text('Display SnackBar'),
),
),
),
);

请注意,虽然我们在这里使用 Builder,但这并不是获得不同 BuildContext 的唯一方法。

也可以将子树提取到不同的Widget中(通常使用extract widget重构)

关于flutter - 使用不包含 Scaffold 的上下文调用 Scaffold.of(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51304568/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com