はじめまして。
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}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。