質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

解決済

2回答

482閲覧

ヘッダーを見えなくしたいが影が表示されているため、影を無くしたい

rick

総合スコア18

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2020/08/17 22:16

はじめまして。

AppBarで影を無くす設定をしているにも関わらず、影が表示されているため
この影を無くしたいです。
AppBarでは、"elevation: 0.0"を設定しています。

イメージ説明

ちなみに、bodyを以下に差し替えると影は見えなくなります。

body: Text( 'Hello World' ),

この画面は、URLをPOST送信した際のレスポンス結果を表示する画面のコードです。
どうぞよろしくお願いいたします。

responseView.dart

1import 'package:flutter/material.dart'; 2import 'package:flutter/services.dart'; 3import 'package:flutter_gowjp/dataClass.dart'; 4import 'package:webview_flutter/webview_flutter.dart'; 5 6import 'dart:io'; 7import 'package:http/http.dart' as http; 8import 'dart:convert'; 9import 'package:fluttertoast/fluttertoast.dart'; 10 11class ResponseView extends StatelessWidget { 12 13 // POST送信する画像のパス or 送信する電話番号 14 String _mPostImagePath = ""; 15 // POST送信でアクセスするURL 16 String _mAccessUrl = ""; 17 // POST送信で送信するbody 18 Map<String, dynamic> _mBody = null; 19 // POST送信で送信するheaders 20 Map<String, dynamic> _headers = null; 21 // 画面名 22 String _mDispName = ""; 23 24 WebViewController _mWebViewController = null; // WebVewコントローラー 25 final int _STATUS_CODE_OK = 200; 26 final int _STATUS_CODE_REDIRECT = 302; 27 28 // メディアスキャン用定義値 29 static const String METHOD_CHANNEL_NAME = "com.gow.jp.flutter_gowjp/mediaScanner"; 30 static const MethodChannel _mMethodChannel = const MethodChannel(METHOD_CHANNEL_NAME); 31 32 ResponseView(String imagePath, String dName) { 33 _mPostImagePath = imagePath; 34 // 画面名からURLを選択する 35 _mAccessUrl = _selectUrl(dName); 36 // 画面名から送信するbodyを選択する 37 _mBody = _selectBody(dName); 38 // 画面名から送信するheadersを選択する 39 _headers = _selectHeaders(dName); 40 // 画面名の保存 41 _mDispName = dName; 42 } 43 44 // 画面名からURLを選択する 45 String _selectUrl(String dName) { 46 switch(dName) { 47 case 'phoneNumber': 48 case 'cameraPicture': 49 case 'photoPicture': 50 case 'qrPicture': 51 // 画像名からアクセスパスを取得する 52 String accessUrl = dataClass().accessUrl[dName]; 53 return accessUrl; 54 default: 55 break; 56 } 57 } 58 59 // 画面名から送信するbodyを選択する 60 Map<String, dynamic> _selectBody(String dName) { 61 Map<String, dynamic> map = new Map<String, dynamic>(); 62 63 switch(dName) { 64 case 'phoneNumber': 65 String bodyKey = dataClass().bodyKey[dName]; 66 map[bodyKey] = _mPostImagePath; 67 return map; 68 case 'cameraPicture': 69 case 'photoPicture': 70 case 'qrPicture': 71 final bytes = File(_mPostImagePath).readAsBytesSync(); 72 String img64 = base64Encode(bytes); 73 String bodyKey = dataClass().bodyKey[dName]; 74 map[bodyKey] = img64; 75 return map; 76 default: 77 break; 78 } 79 } 80 81 // 画面名から送信するheadersを選択する 82 Map<String, dynamic> _selectHeaders(String dName) { 83 84 switch(dName) { 85 case 'phoneNumber': 86 case 'cameraPicture': 87 case 'photoPicture': 88 case 'qrPicture': 89 return dataClass().headers; 90 default: 91 break; 92 } 93 } 94 95 Future<String> _showBodyArea() async { 96 if (_mDispName == 'cameraPicture') { 97 // android(Native)へメディアスキャンリクエスト 98 _requestMediaScanNative(); 99 } 100 101 // POST送信用メソッド 102 Future<String> result = _postRequest(); 103 return result; 104 } 105 106 // android(Native)へメディアスキャンリクエスト 107 Future<void> _requestMediaScanNative() async { 108 final String result = await _mMethodChannel.invokeMethod('mediaScanner', _mPostImagePath); 109 Fluttertoast.showToast(msg: result); 110 } 111 112 // POST送信用メソッド 113 Future<String> _postRequest() async { 114 final http.Response response = await http.post( 115 _mAccessUrl, 116 headers: _headers, 117 body : _mBody 118 ); 119 120 int statusCode = response.statusCode; 121 122 try { 123 if (statusCode == _STATUS_CODE_OK || 124 statusCode == _STATUS_CODE_REDIRECT) { // 302(=リダイレクト)の場合 125 debugPrint('========================= ${response.body}'); 126 // レスポンス値を返却する 127 return response.body; 128 } else { 129 throw Exception('Failed to load post. Response status code = ' + statusCode.toString()); 130 } 131 } catch (error) { 132 return Future.error(error); 133 } 134 135 } 136 137 void loadUrl(String responseBody) async { 138 // <WebViewControllerのloadUrlメソッドにローカルファイルのURI情報を渡す> 139 // WebViewControllerはWebViewウィジェットに情報を与えることができます。 140 // <Uri.dataFromStringについて> 141 // パラメータで指定されたエンコーディングまたは文字セット(指定されていないか認識されない場合はデフォルトでUS-ASCII) 142 // を使用してコンテンツをバイトに変換し、結果のデータURIにバイトをエンコードします。 143 _mWebViewController.loadUrl( Uri.dataFromString( 144 responseBody, 145 mimeType: 'text/html', 146 encoding: Encoding.getByName('utf-8') 147 ).toString()); 148 } 149 150 @override 151 Widget build(BuildContext context) { 152 return MaterialApp( 153 home: Scaffold( 154 appBar: AppBar( 155 backgroundColor: Colors.white.withOpacity(0.0), // ヘッダーの背景色を透過にする 156 elevation: 0.0, // ヘッダーの影を無くす(default: 4.0) 157 ), 158 body: FutureBuilder ( 159 future: _showBodyArea(), 160 builder: (BuildContext context, AsyncSnapshot<String> snapshot) { 161 switch(snapshot.connectionState) { 162 case ConnectionState.none: 163 // 通信中 164 case ConnectionState.waiting: 165 case ConnectionState.active: 166 return Center( 167 child: CircularProgressIndicator(), 168 ); 169// break; 170 // 通信が完了 171 case ConnectionState.done: 172 return WebView( 173 javascriptMode: JavascriptMode.unrestricted, 174 // WebViewの生成時 175 onWebViewCreated: (WebViewController webViewController) async { 176 _mWebViewController = webViewController; // 生成されたWebViewController情報を取得する 177 await loadUrl(snapshot.data.toString()); // HTMLファイルのURL(ローカルファイルの情報)をControllerに追加する処理 178 }, 179 ); 180// break; 181 } 182 } 183 ), 184 ), 185 ); 186 } 187 188}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

ヘッダーは作成しないようにして、
SafeAreaにてアプリのメイン部分のコンテンツWidgetを包んであげることで
android osで出しているヘッダーに重ならない様な、コンテンツ表示を実現できました。

投稿2020/08/22 02:37

rick

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

AppBarを消したいだけなのであれば、そもそも設置しなければ良いと思うのですが、それではだめでしょうか?

投稿2020/08/17 23:33

tepci

総合スコア419

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rick

2020/08/18 13:00 編集

ご回答ありがとうございます。 設置をしない場合、アプリのメイン表示部分(上記カード内ではbody部分です)が、android osで出しているヘッダー(時計やバッテリー残量を表示する部分)に重なって表示されます。 android osのヘッダーに重ならない様な、アプリのメイン部分の表示方法があれば良いのですが。 android osのヘッダー分の隙間を固定値でアプリのメイン部分で空ければ良いのですが、デバイス毎にヘッダーの高さは違うかもしれないので出来ればやりたくありません。 --- (追記) 上記現象を見るにbodyに設定するものによって、ヘッダーに折角設定した影無し設定が反映されない事がある様に私は考えています。 上記bodyに設定したものの何が悪さをして、ヘッダーの影無し設定を無視しているのか知りたく思っています。
tepci

2020/08/19 00:36

SafeAreaというウィジェットを使うといいです。 自動的に重ならないように表示してくれます。
rick

2020/08/22 02:35

↑SafeArea最高です! 外側から包んであげたら、表示したいコンテンツのWidgetが OSで出しているヘッダーに重ならない配置で表示されました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問