フラッターダイアログ异常別の例外がスローされました:いいえMaterialLocalizationsが見つかりませんでした

フラッターダイアログ异常別の例外がスローされました:いいえMaterialLocalizationsが見つかりませんでした

インポート 'パッケージ:フラッター/ material.dart' ;
インポート 'パッケージ:scoped_model / scoped_model.dart' ; 

ボイドメイン(){ 
  runApp(新しいRootLayout())。
} 

クラス RootLayoutは延びStatefulWidget { 
  @Override 
  状態 <StatefulWidget> createState(){
     戻り 新しいRootLayoutMは(); 
  } 
} 

クラス RootLayoutMが延びている状態<RootLayout> { 
  _showMyMaterialDialog(BuildContextコンテキスト){ 
    プリント( "_showMyMaterialDialog" )。
    ShowDialog(
        コンテキスト:コンテキスト、
        ビルダー:(コンテキスト){ 
          返す 新しい新AlertDialog(
            タイトル:新新しいテキスト(「タイトル」)、
            内容:新新しいテキスト(「コンテンツの内容内容内容内容内容」)、
            アクション: <ウィジェット> [
               新しい新しいFlatButton(
                onPressed:(){ 
                  Navigator.of(コンテキスト).pop(); 
                }、
                子供:新規新しいテキスト( "確認" )、 
              )、
              新しい新しいFlatButton(
                onPressed:(){
                  Navigator.of(コンテキスト).pop();  
                }
                子供:新しいテキスト( "取消" )、 
              )、
            ]、
          ); 
        }); 
  } 

  @Override 
  ウィジェット{(BuildContextコンテキスト)を構築
    返す 新しいMaterialApp(
      家:新しい足場(
        ボディ:新しいセンター(
          子:新しいテキスト( "簡単なダイアログを表示する" 
              スタイル: TEXTSTYLE(色:カラー(0xFF00FF00を)))、 
        floatingActionButton:新しいFloatingActionButton(
            子:新しいテキスト( "にShowDialogは" )、
            onPressed:(){ 
              _showMyMaterialDialog(コンテキスト)。
            })、 
      )、
    )。 
    ; 
  } 
}

 それはダイアログを表示することができない理由ウィジェットはStatefulWidgetの所属するコンテキストのウィジェットトップここトップ

ここが見つかりました

@Override 
  ウィジェットのビルド(BuildContextコンテキスト){ 
    返す 新しいMaterialApp(
      家:新しい足場(
        ボディ:新しいセンター(
          子:新しいテキスト( "ショー簡単なダイアログ" 
              スタイル: TEXTSTYLE(色:カラー(0xFF00FF00を)))、 
        )、
        floatingActionButton:新しいFloatingActionButton(
            子:新しいテキスト( "にShowDialog" )、
            onPressed:(){ 
              _showMyMaterialDialog(コンテキスト); 
            })、 )  
    )。 
    ;
  }

このFloatingActionButtonその上にパンの外側の層

クラス MyFloat 拡張StatelessWidget { 
  _showMyMaterialDialog(BuildContextコンテキスト){ 
    印刷( "_showMyMaterialDialog" ); 
    にShowDialog(
        コンテキスト:コンテキスト、
        ビルダー:(コンテキスト){ 
          返す 新しい新AlertDialog(
            タイトル:新新しいテキスト( "タイトル" )、
            内容:新新しいテキスト( "コンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツのコンテンツ内容」)、
            アクション: <ウィジェット> [
               新しい新しいFlatButton(
                onPressed:(){ 
                  Navigator.of(コンテキスト).pop(); 
                }
                子:新しいテキスト( "确认" )、 
              )、
              新しいFlatButton(
                onPressed:(){ 
                  Navigator.of(コンテキスト).pop(); 
                }、
                子供:新しいテキスト( "取消" 
            ] 
          )。
        }); 
  } 
  @Overrideの
  ウィジェットのビルド(BuildContextコンテキスト){ 
    // TODO:ビルドが実装
    返す 新しいFloatingActionButton(
        子:新しいテキスト( "ShowDialogをする" )、
        onPressed:(){
          _showMyMaterialDialog(コンテキスト)。
        }); 
  }

 

次のように完全なコードです

インポート 'パッケージ:フラッター/ material.dart' ;
インポート 'パッケージ:scoped_model / scoped_model.dart' ; 

ボイドメイン(){ 
  runApp(新しいRootLayout())。
} 

クラス RootLayoutは延びStatefulWidget { 
  @Override 
  状態 <StatefulWidget> createState(){
     戻り 新しいRootLayoutMは(); 
  } 
} 

クラス RootLayoutM 拡張状態<RootLayout> { 

  @Overrideの
  ウィジェットのビルド(BuildContextコンテキスト){ 
    返す 新しいMaterialApp(
      家を:新しい足場(
        ボディ:新しいセンター(
          子:新しいテキスト( "ショー簡単なダイアログ" 
              スタイル: TEXTSTYLE(色:カラー(0xFF00FF00 )))、 
        )、
        floatingActionButton:新しいMyFloat()、 
    ); 
  } 
 
} 

クラス MyFloatは延びStatelessWidget { 
  _showMyMaterialDialog(BuildContextコンテキスト){ 
    プリント( "_showMyMaterialDialog" )。
    ShowDialog(
        コンテキスト:コンテキスト、
        ビルダー(コンテキスト){ 
          リターン 新しい新しいAlertDialog(
            タイトル:新新しいテキスト(「タイトル」)、
            内容:新新しいテキスト(「コンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツコンテンツ」)、
            アクション: <ウィジェット> [
               新しい新しいFlatButton(
                onPressed:(){ 
                  Navigator.of (コンテキスト).pop(); 
                }、
                子供:新規新しいテキスト( "確認" )、 
              )、
              新しい新しいFlatButton(
                onPressed:(){ 
                  Navigator.of(コンテキスト).pop(); 
                }、
                子供:新しい新テキスト( "取消" )、 
              )、
            ]、
          ); 
        }); 
  } 
  @Overrideの
  ウィジェットのビルド(BuildContextコンテキスト){ 
    // TODO:ビルドが実装
    返す 新しいFloatingActionButton(
        子:新しいテキスト( "ShowDialogをする" )、
        onPressed:(){ 
          _showMyMaterialDialog(コンテキスト); 
        }); 
  } 

}

 

おすすめ

転載: www.cnblogs.com/mingfeng002/p/11585760.html