前提
MediaQueryを用いて画面サイズを取得したくて以下のサイトを参考にしたいのですが、
final double deviceHeight = MediaQuery.of(context).size.height;
の部分でエラーが起きます。
ネットで調べたのですが、解決しなかったのでここで質問させていただきます。
皆様お忙しとは思いますが、どなたかアドバイスをいただけないでしょうか。
<参考にさせていただいたサイト>
https://qiita.com/najeira/items/c98c5fec9c71104f8263
https://note.com/hatchoutschool/n/n223ba8f1f3d7
発生している問題・エラーメッセージ
No MediaQuery widget ancestor found.
該当のソースコード
Dart
1import 'package:ex_diary/new_account.dart'; 2import 'package:ex_diary/privacy_policy.dart'; 3import 'package:ex_diary/terms_of_use.dart'; 4import 'package:flutter/material.dart'; 5import 'login.dart'; 6 7void main() async { 8 runApp( 9 MyApp(), 10 ); 11} 12 13class MyApp extends StatefulWidget { 14 const MyApp({Key? key}); 15 16 State<MyApp> createState() => LoginTransit(); 17} 18 19class LoginTransit extends State<MyApp> { 20 21 Widget build(BuildContext context) { 22 final double deviceHeight = MediaQuery.of(context).size.height; 23 return MaterialApp( 24 home: Scaffold( 25 body: Center( 26 child: Column( 27 children: <Widget>[ 28 SizedBox( 29 height: deviceHeight * 0.2, 30 ), 31 Container( 32 alignment: Alignment.center, 33 child: Text('タイトル'), 34 ), 35 SizedBox( 36 height: 120, 37 ), 38 Container( 39 child: TextButton( 40 child: Text("メールアドレスではじめる"), 41 onPressed: () { 42 // ログイン画面へ 43 Navigator.push(context, 44 MaterialPageRoute(builder: (context) => NewAccount())); 45 }, 46 ), 47 ), 48 SizedBox( 49 height: 20, 50 ), 51 Container( 52 child: TextButton( 53 child: Text("すでにアカウントをお持ちの方"), 54 onPressed: () { 55 // ログイン画面へ 56 Navigator.push(context, 57 MaterialPageRoute(builder: (context) => login())); 58 }, 59 ), 60 ), 61 SizedBox( 62 height: 150, 63 ), 64 Container( 65 child: TextButton( 66 child: Text("利用規約"), 67 onPressed: () { 68 // 利用規約画面へ 69 Navigator.push(context, 70 MaterialPageRoute(builder: (context) => TermsOfUse())); 71 }, 72 ), 73 ), 74 Container( 75 child: TextButton( 76 child: Text("プライバシーポリシー"), 77 onPressed: () { 78 // プライバシーポリシー画面へ 79 Navigator.push( 80 context, 81 MaterialPageRoute( 82 builder: (context) => PrivacyPolicy())); 83 }, 84 ), 85 ), 86 ], 87 ), 88 ), 89 ), 90 ); 91 } 92} 93
試したこと
・MaterialAppが足りない(?)ということなので、runAppのところを以下のように変更しましたが変わらなかったです。
Dart
1 runApp( 2 new MaterialApp( 3 MyApp(), 4 ));
・以下のサイトではBuilderウィジェットで包めばいいということでしたが、包み方がわかりませんでした。。。
https://zenn.dev/masamasasa/articles/cf7b4265cf4a9c
補足情報(FW/ツールのバージョンなど)
[✓] Flutter (Channel stable, 3.3.8, on macOS 13.0.1 22A400 darwin-arm, locale ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 14.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2021.3)
[✓] VS Code (version 1.73.0)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/11/13 12:44