[解決済み】Scaffold.of()がScaffoldを含まないコンテキストで呼び出された場合
2022-03-27 08:23:20
質問
ご覧の通り、私のボタンは
Scaffold
の本文です。しかし、この例外が発生します。
Scaffold.of()は、Scaffoldを含まないコンテキストで呼び出されました。
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);
}
EDIT
この問題に対する別の解決策を見つけました。もし
Scaffold
をキーとする
GlobalKey<ScaffoldState>
で囲むことなく、以下のようにSnackBarを表示することができます。
Builder
ウィジェットです。を返すウィジェットは
Scaffold
はステートフルウィジェットでなければなりませんが。
_scaffoldKey.currentState.showSnackBar(snackbar);
解決方法は?
この例外が発生するのは
context
をインスタンス化したウィジェットの
Scaffold
. ではなく
context
の子の
Scaffold
.
この問題は、別のコンテキストを使用することで解決できます。
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
リファクタリング)
関連
-
[解決済み] AppBarの先頭のアイコンの大きさを大きくする方法
-
[解決済み] FlutterでButtonを無効にするには?
-
[解決済み] Flutterのデバッグバナーを削除するにはどうしたらいいですか?
-
[解決済み] Flutterでウィジェットにボーダーを追加するには?
-
[解決済み】Flutterで背景画像を設定する方法は?
-
[解決済み】Flutterで少し遅れてからコードを実行する方法は?
-
[解決済み] サブツリー内に同じタグを共有するヒーローが複数存在する
-
[解決済み] ポップアップ時にFlutterナビゲータの状態を再読み込みするように強制する
-
[解決済み] Flutter プログラムでアプリを終了させる方法
-
[解決済み] Flutterで「戻る」ボタンを上書きするには?[重複している]。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] FlutterでborderRadiusを使用してコンテナにボーダーを追加する
-
[解決済み】メッセージ「flutter run: 接続されたデバイスがありません"
-
[解決済み】起動ロックを解除するために別のflutterコマンドを待機する
-
[解決済み】不要なウィジェットビルドの対処方法は?
-
[解決済み】FlutterでStatefulWidgetにデータを渡して、その状態のままアクセスする方法
-
[解決済み】Flutter: 未処理の例外です。バインディングが初期化される前にServicesBinding.defaultBinaryMessengerにアクセスされました。
-
[解決済み】Flutterで少し遅れてからコードを実行する方法は?
-
[解決済み】FlutterでStateful Widgetにデータを渡す
-
[解決済み] フラッターは2つのアイテムを左と右の両極端に配置します。
-
[解決済み] dispose() の後に setState() が呼ばれる。