フロント側をFlutter(スマホ)Thymeleaf(PC)、バックエンド側SpringBootの自動作成@自動生成ツール作成中
19:29
①現在、動いてるスマホ実機の画面。なかなかいい感じ(デザイン性は無いけど)だと思う。なぜか、詳細画面で例外発生となった。・・・あした調べよう。
■ログイン画面
■メニュー画面
■商品情報登録画面・初期表示
■商品情報登録画面・すべての値を入れた
■商品情報登録画面・登録ボタン押下後、SpringBoot側登録OK
■商品情報一覧画面・検索条件入れた後
■商品情報一覧画面・検索ボタン押下後
■詳細ボタン押下ー>例外発生
■変更ボタン押下で、商品情報更新画面・修正して登録ボタン押下
■商品情報更新画面・登録ボタン押下後・商品情報一覧画面・条件に当てはまらないので”データなし”表示
■商品情報一覧画面・検索タブ押下
■商品情報一覧画面・検索し、リストタブ押下・ソート指定をやってみた
■商品情報一覧画面・検索し、リストタブ押下・「登録日時」でソート指定後
■商品情報一覧画面・削除ボタン押下
■商品情報一覧画面・削除ボタン押下後、OK押下
②flutter・スマホ側、上記画面のように、少しづつ動いてきた。チェックして直した内容は以下
★Flutter側PGMのエラー ■メニューで「商品情報一覧(更新削除)」押下時にエラー発生 ①エラーログ: ======== Exception caught by widgets library ======================================================= The following NoSuchMethodError was thrown building Builder: The method '[]' was called on null. Receiver: null Tried calling: []("dbELEMENTS") The relevant error-causing widget was: MaterialApp MaterialApp:file:///C:/Users/ueki_/AndroidStudioProjects/flutter_app/lib/main.dart:20:12 When the exception was thrown, this was the stack: #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:38:5) #1 ShohinSrchForm.fromJson (package:flutter_app/form/shohin_srch_form.dart:89:45) #2 _ShohinListState.initState (package:flutter_app/affairs/shohin/shohin_list.dart:1250:21) 理由:shohinSrchFormなのに間違ってshohinFormとしていた。 修正する箇所:ShohinSrchFormのfromJsonメソッド <<修正前 start>> dbELEMENTS = _resDataMap["shohinForm"]["dbELEMENTS"]; <<修正前 end>> <<修正後 start>> dbELEMENTS = _resDataMap["shohinSrchForm"]["dbELEMENTS"]; <<修正後 end>> ・実際の修正対象:VB.netのFlutterForm作成クラス・FlutterTblForm作成関数 修正 <<修正前 start>> A03_03_03_publicDbELEMENTSWK = hinagataグループ名指定のhinagata変換(hinagataFormFlutter, "01_03_03_publicDbELEMENTS部品.txt", 変更内容Array1) <<修正前 end>> <<修正後 start>> A03_03_03_publicDbELEMENTSWK = hinagataグループ名指定のhinagata変換(hinagataFormFlutter, "03_03_03_publicDbELEMENTS部品.txt", 変更内容Array1) <<修正後 end>> ■メニューで「商品情報一覧(更新削除)」押下時にエラー発生 ②エラーログ: ======== Exception caught by widgets library ======================================================= The following _TypeError was thrown building Builder: type 'List<dynamic>' is not a subtype of type 'List<String>' The relevant error-causing widget was: MaterialApp MaterialApp:file:///C:/Users/ueki_/AndroidStudioProjects/flutter_app/lib/main.dart:20:12 When the exception was thrown, this was the stack: #0 ShohinSrchForm.fromJson (package:flutter_app/form/shohin_srch_form.dart:96:7) #1 _ShohinListState.initState (package:flutter_app/affairs/shohin/shohin_list.dart:1250:21) 理由:List<dynamic>で受け取っているので、List<String>には入れれないと言っている。 修正する箇所:ShohinSrchFormのfromJsonメソッド <<修正前 start>> openkbn1Array = _resDataMap["shohinSrchForm"]["openkbn1Array"] ?? []; // 公開区分 <<修正前 end>> <<修正後 start>> openkbn1Array = _resDataMap["shohinSrchForm"]["openkbn1Array"].cast<String>() ?? []; // 公開区分 <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。hinagata\flutter\lib\form\03_07_01_03_検索チェックボックス部品.txt 修正 <<修正前 start>> ■{item_name}■Array = _resDataMap["■{prg_name}■SrchForm"]["■{item_name}■Array"] ?? []; // ■{ItmJpnName}■ <<修正前 end>> <<修正後 start>> ■{item_name}■Array = _resDataMap["■{prg_name}■SrchForm"]["■{item_name}■Array"].cast<String>() ?? []; // ■{ItmJpnName}■ <<修正後 end>> ■メニューで「商品情報一覧(更新削除)」押下時にエラー発生 ③エラーログ ======== Exception caught by widgets library ======================================================= The following assertion was thrown building ShohinList(dirty, state: _ShohinListState#db59a): There should be exactly one item with [DropdownButton]'s value: 0. Either zero or 2 or more [DropdownMenuItem]s were detected with the same value 'package:flutter/src/material/dropdown.dart': Failed assertion: line 894 pos 15: 'items == null || items.isEmpty || value == null || items.where((DropdownMenuItem<T> item) { return item.value == value; }).length == 1' The relevant error-causing widget was: ShohinList ShohinList:file:///C:/Users/ueki_/AndroidStudioProjects/flutter_app/lib/home.dart:375:25 When the exception was thrown, this was the stack: #2 new DropdownButton (package:flutter/src/material/dropdown.dart:894:15) #3 _ShohinListState._makeCndsWidgets (package:flutter_app/affairs/shohin/shohin_list.dart:193:13) #4 _ShohinListState._makeWidgets (package:flutter_app/affairs/shohin/shohin_list.dart:105:16) #5 _ShohinListState.build (package:flutter_app/affairs/shohin/shohin_list.dart:77:21) 理由:biztypeCd=0だけど、ドロップダウンリストに0はないよって言っているようなので、 修正する箇所:ShohinListクラス、及び、ShohinRegisterAmendクラス <<修正前 start>> biztypeCdはintとして定義している。 例: late int biztypeCd; // 業種ID _shohinSrchForm.biztypeCd = value as int; など <<修正前 end>> <<修正後 start>> biztypeCdはStringとして定義する。 _shohinSrchForm.biztypeCd = value as String; そのほかの項目でintとしているものすべてStringに変更する。 Form全体で行う。 <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。hinagata\flutter\lib\form\01_04_02_00_ItmLong部品.txt 修正 <<修正前 start>> late int ■{item_name}■; // ■{ItmJpnName}■ <<修正前 end>> <<修正後 start>> late String ■{item_name}■; // ■{ItmJpnName}■ <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。flutter\lib\form\01_06_02_ItemSetInt部品.txt 修正 <<修正前 start>> ■{item_name}■ = ■{item_name}■Controller.text as int; <<修正前 end>> <<修正後 start>> ■{item_name}■ = ■{item_name}■Controller.text; <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。flutter\lib\form\03_04_02_00_ItmLongFormTo部品 修正 <<修正前 start>> late int ■{item_name}■From; // ■{ItmJpnName}■From late int ■{item_name}■To; // ■{ItmJpnName}■To <<修正前 end>> late String ■{item_name}■From; // ■{ItmJpnName}■From late String ■{item_name}■To; // ■{ItmJpnName}■To <<修正後 start>> <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。flutter\lib\form\03_06_02_ItemSetIntFormTo部品.txt 修正 <<修正前 start>> ■{item_name}■From = ■{item_name}■Controller.text As int; ■{item_name}■To = ■{item_name}■Controller.text As int; <<修正前 end>> <<修正後 start>> ■{item_name}■From = ■{item_name}■FromController.text; ■{item_name}■To = ■{item_name}■ToController.text; <<修正後 end>> ・実際の修正対象:Vb.netのFlutterWidgets項目作成.vb Public Function FlutterWidgets項目作成(ByRef j, ByRef SRCH区分, ByRef KBN, ByRef DBコード項目Array) ・・・ If (UCase(Cells(j, cont属性列)) = "BIGINT") Then <<修正前 start>> StringOrLong = "int" <<修正前 end>> <<修正後 start>> StringOrLong = "String" <<修正後 end>> Else StringOrLong = "String" End If ・実際の修正対象:FlutterListView作成.vb Public Sub FlutterListView作成() ・・・ Do While Cells(j, cont項目名ID列) <> "" ・・・ For i = 1 To UBound(idxPk列順配列) ・・・ <<修正前 start>> A3_01_ParamPkeys = A3_01_ParamPkeys & hinagataグループ名指定のhinagata変換(hinagataAffairsFlutter, "3_01_ParamPkey部品.txt", 変更内容Array) A3_02_PKEY_PARAMS = A3_02_PKEY_PARAMS & hinagataグループ名指定のhinagata変換(hinagataAffairsFlutter, "3_02_PKEY_PARAM部品.txt", 変更内容Array) A3_03_FormPkeySets = A3_03_FormPkeySets & hinagataグループ名指定のhinagata変換(hinagataAffairsFlutter, "3_03_FormPkeySet部品.txt", 変更内容Array) & vbCrLf A3_07_List_PKEY_PARAMs = A3_07_List_PKEY_PARAMs & hinagataグループ名指定のhinagata変換(hinagataAffairsFlutter, "3_07_List_PKEY_PARAM部品.txt", 変更内容Array) <<修正前 end>> <<修正後 start>> if 変更内容Array(2, 2) = "int" then A3_07_List_PKEY_PARAMs = A3_07_List_PKEY_PARAMs & hinagataグループ名指定のhinagata変換(hinagataAffairsFlutter, "3_07_List_PKEY_Long_PARAM部品.txt", 変更内容Array) else A3_07_List_PKEY_PARAMs = A3_07_List_PKEY_PARAMs & hinagataグループ名指定のhinagata変換(hinagataAffairsFlutter, "3_07_List_PKEY_PARAM部品.txt", 変更内容Array) end if 変更内容Array(2, 2) = "String" A3_01_ParamPkeys = A3_01_ParamPkeys & hinagataグループ名指定のhinagata変換(hinagataAffairsFlutter, "3_01_ParamPkey部品.txt", 変更内容Array) A3_02_PKEY_PARAMS = A3_02_PKEY_PARAMS & hinagataグループ名指定のhinagata変換(hinagataAffairsFlutter, "3_02_PKEY_PARAM部品.txt", 変更内容Array) A3_03_FormPkeySets = A3_03_FormPkeySets & hinagataグループ名指定のhinagata変換(hinagataAffairsFlutter, "3_03_FormPkeySet部品.txt", 変更内容Array) & vbCrLf <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。01_04_02_01_ItmLong部品.txt <<修正前 start>> ■{item_name}■ = ■{initValue}■; // ■{ItmJpnName}■ <<修正前 end>> <<修正後 start>> ■{item_name}■ = "■{initValue}■"; // ■{ItmJpnName}■ <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。01_04_02_02_ItmLong部品.txt <<修正前 start>> ■{item_name}■ = ■{initValue}■; // ■{ItmJpnName}■ <<修正前 end>> <<修正後 start>> ■{item_name}■ = "■{initValue}■"; // ■{ItmJpnName}■ <<修正後 end>> ・実際の追加対象:Flutter 側ひな形。 03_04_01_01_ItmString部品.txt <<追加 start>> ■{item_name}■ = ""; // ■{ItmJpnName}■ <<追加 end>> ・実際の追加対象:Flutter 側ひな形。 03_04_01_02_ItmString部品.txt <<追加 start>> ■{item_name}■ = ""; // ■{ItmJpnName}■ <<追加 end>> ・実際の修正対象:VB.netのFlutterForm作成.vb <<修正前 start>> A03_04_01_ItmsWK = 先頭以外に改行付加(A03_04_01_ItmsWK) & hinagataグループ名指定のhinagata変換(hinagataFormFlutter, "01_04_01_01_ItmString部品.txt", 変更内容Array) A03_04_02_ItmsWK = 先頭以外に改行付加(A03_04_02_ItmsWK) & hinagataグループ名指定のhinagata変換(hinagataFormFlutter, "01_04_01_02_ItmString部品.txt", 変更内容Array) <<修正前 end>> <<修正後 start>> A03_04_01_ItmsWK = 先頭以外に改行付加(A03_04_01_ItmsWK) & hinagataグループ名指定のhinagata変換(hinagataFormFlutter, "03_04_01_01_ItmString部品.txt", 変更内容Array) A03_04_02_ItmsWK = 先頭以外に改行付加(A03_04_02_ItmsWK) & hinagataグループ名指定のhinagata変換(hinagataFormFlutter, "03_04_01_02_ItmString部品.txt", 変更内容Array) <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。 3_07__List_PKEY_Long_PARAM部品.txt 追加 <<追加 start>> element["■{item_name}■"].toString(), <<追加 end>> ■メニューで「商品情報一覧(更新削除)」押下時にエラー発生 ④エラーログ ======== Exception caught by widgets library ======================================================= The following _TypeError was thrown building ShohinList(dirty, state: _ShohinListState#f77a9): type 'List<List<String>>' is not a subtype of type 'Map<dynamic, dynamic>' The relevant error-causing widget was: ShohinList ShohinList:file:///C:/Users/ueki_/AndroidStudioProjects/flutter_app/lib/home.dart:375:25 When the exception was thrown, this was the stack: #0 CommUtils.publicELEMENTS (package:flutter_app/utils/comm_utils.dart:394:73) #1 CommUtils.publicELEMENTSList (package:flutter_app/utils/comm_utils.dart:403:32) #2 _ShohinListState._makeCndsWidgets (package:flutter_app/affairs/shohin/shohin_list.dart:389:35) 修正する箇所: ・ShohinListクラス <<修正前 start>> children: CommUtils.publicELEMENTSList('OPN_KBN', '全て', Elements.elements).map((e) => <<修正前 end>> <<修正後 start>> children: Elements.elementsList("OPN_KBN", "全て").map((e) => すべてのDBエレメント以外のエレメントはこれに変更する。 CommUtils.publicELEMENTSListは削除する。 <<修正後 end>> ・ElementsクラスelementsListメソッド static List<List<String>> elementsList(String key, String defaultStr) { <<修正前 start>> List<List<String>> list = [["", defaultStr]]; <<修正前 end>> <<修正後 start>> List<List<String>> list = [[]]; if (defaultStr.isNotEmpty) { list = [["", defaultStr]]; } <<修正後 end>> for (var element in elements[key]!) { ・実際の修正対象:Flutter 側ひな形。hinagata\flutter\lib\affairsParts\hinagata_AmendView_ラジオボタン.txt 修正 <<修正前 start>> children: CommUtils.publicELEMENTSList('■{CODE_ID}■', '■{CHECK_OPT}■', Elements.elements).map((e) => <<修正前 end>> <<修正後 start>> children: Elements.elementsList('■{CODE_ID}■', '■{CHECK_OPT}■').map((e) => <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。hinagata\flutter\lib\affairsParts\hinagata_ListSrch_チェックボックス.txt 修正 <<修正前 start>> children: CommUtils.publicELEMENTSList('■{CODE_ID}■', '■{ALL_SELECT}■', Elements.elements).map((e) => <<修正前 end>> <<修正後 start>> children: Elements.elementsList('■{CODE_ID}■', '■{ALL_SELECT}■').map((e) => <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。hinagata\flutter\lib\affairsParts\hinagata_ListSrch_ラジオボタン.txt 修正 <<修正前 start>> children: CommUtils.publicELEMENTSList('■{CODE_ID}■', '■{ALL_SELECT}■', Elements.elements).map((e) => <<修正前 end>> <<修正後 start>> children: Elements.elementsList('■{CODE_ID}■', '■{ALL_SELECT}■').map((e) => <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。hinagata\flutter\lib\utils\02_00_elements.txt 修正 static List<List<String>> elementsList(String key, String defaultStr) { <<修正前 start>> List<List<String>> list = [["", defaultStr]]; <<修正前 end>> <<修正後 start>> List<List<String>> list = [[]]; if (defaultStr.isNotEmpty) { list = [["", defaultStr]]; } <<修正後 end>> ■「商品情報一覧(更新削除)」で検索押下時にエラー発生 ⑤エラーログ ======== Exception caught by widgets library ======================================================= The following _TypeError was thrown building ShohinList(dirty, state: _ShohinListState#56905): type 'String' is not a subtype of type 'DateTime' The relevant error-causing widget was: ShohinList ShohinList:file:///C:/Users/ueki_/AndroidStudioProjects/flutter_app/lib/home.dart:375:25 When the exception was thrown, this was the stack: #0 _ShohinListState._makeListWidgetItems (package:flutter_app/affairs/shohin/shohin_list.dart:915:62) #1 _ShohinListState._makeListWidgets (package:flutter_app/affairs/shohin/shohin_list.dart:721:25) 理由:DateFormat('yyyy/MM/dd HH:mm:ss').format(element["insdt"]),としているが、element["insdt"]はStringだ! さらに、なぜか、Springからの日付は標準時間(9時間前)なので9時間を加算する。 さらに、システム内の日付時間を日本にしておく。 修正する箇所: ・ShohinListクラス、及びShohinDetailクラス、ShohinRegisterAmendクラス <<追加 start>> import 'package:intl/date_symbol_data_local.dart'; <<追加 end>> ・・・ Widget build(BuildContext context) { <<追加 start>> initializeDateFormatting("ja_JP"); <<追加 end>> <<修正前 start>> if (element["insdt"] != null) { <<修正前 end>> <<修正後 start>> if (element["insdt"].isNotEmpty) { ・・・すべてのelement["・・・"]に対して行う <<修正後 end>> <<修正前 start>> DateFormat('yyyy/MM/dd HH:mm:ss').format(element["insdt"]), <<修正前 end>> <<修正後 start>> DateFormat('yyyy/MM/dd HH:mm:ss').format((DateTime.parse(element["insdt"])).add(const Duration(hours:9))), ・・・すべての、DateFormatをおこなうelement["・・・"]に対して行う <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。 1_00_hinagata_RegisterAmend.txt 2_00_hinagata_Detail.txt 3_00_hinagata_List.txt <<追加 start>> import 'package:intl/date_symbol_data_local.dart'; <<追加 end>> ・・・ Widget build(BuildContext context) { <<追加 start>> initializeDateFormatting("ja_JP"); <<追加 end>> ・実際の修正対象:Flutter 側ひな形。 補足「element["■{ITEM_NAME}■Obj"] != null」のelement["■{ITEM_NAME}■Obj"]はMapなので修正しない。かつ、 date関連もObjectなので修正しない。 hinagata_ListlView_コード値.txt hinagata_ListlView_ファイル.txt hinagata_ListlView_メールアドレスの書式.txt hinagata_ListlView_画像01.txt hinagata_ListlView_郵便番号.txt <<修正前 start>> if (element["■{ITEM_NAME}・・・ != ・・・) { <<修正前 end>> <<修正後 start>> if (element["■{ITEM_NAME}・・・.isNotEmpty) { <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。 補足「_■{PRG_NAME}■Form.resDetailMapForm["■{ITEM_NAME}■Obj"] 」の["■{ITEM_NAME}■Obj"]はMapなので修正しない。かつ、 date関連もObjectなので修正しない。 hinagata_DetailView_コード値.txt hinagata_DetailView_ファイル.txt hinagata_DetailView_メールアドレスの書式.txt hinagata_DetailView_画像01.txt hinagata_DetailView_郵便番号.txt <<修正前 start>> if (_■{PRG_NAME}■Form.resDetailMapForm["■{ITEM_NAME}・・・ != ・・・) { <<修正前 end>> <<修正後 start>> if (_■{PRG_NAME}■Form.resDetailMapForm["■{ITEM_NAME}・・・.isNotEmpty) { <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。hinagata_DetailView_通常項目date.txt <<修正前 start>> if (_■{PRG_NAME}■Form.resDetailMapForm["■{ITEM_NAME}■"] != null) { <<修正前 end>> <<修正後 start>> if (_■{PRG_NAME}■Form.resDetailMapForm["■{ITEM_NAME}■"].isNotEmpty) { <<修正後 end>> ・・・ <<修正前 start>> child:Text('■{ITEM_NAME_KANJI}■ : ' + DateFormat('yyyy/MM/dd').format(_■{PRG_NAME}■Form.resDetailMapForm["■{ITEM_NAME}■"]), <<修正前 end>> <<修正後 start>> child:Text('■{ITEM_NAME_KANJI}■ : ' + DateFormat('yyyy/MM/dd').format( (DateTime.parse(_■{PRG_NAME}■Form.resDetailMapForm["■{ITEM_NAME}■"])).add(const Duration(hours:9))), <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。hinagata_DetailView_通常項目dateTime.txt <<修正前 start>> if (_■{PRG_NAME}■Form.resDetailMapForm["■{ITEM_NAME}■"] != null) { <<修正前 end>> <<修正後 start>> if (_■{PRG_NAME}■Form.resDetailMapForm["■{ITEM_NAME}■"].isNotEmpty) { <<修正後 end>> ・・・ <<修正前 start>> child:Text('■{ITEM_NAME_KANJI}■ : ' + DateFormat('yyyy/MM/dd HH:mm:ss').format(_■{PRG_NAME}■Form.resDetailMapForm["■{ITEM_NAME}■"]), <<修正前 end>> <<修正後 start>> child:Text('■{ITEM_NAME_KANJI}■ : ' + DateFormat('yyyy/MM/dd HH:mm:ss').format( (DateTime.parse(_■{PRG_NAME}■Form.resDetailMapForm["■{ITEM_NAME}■"])).add(const Duration(hours:9))), <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。hinagata_ListlView_通常項目date.txt <<修正前 start>> if (element["■{ITEM_NAME}■"] != null) { <<修正前 end>> <<修正後 start>> if (element["■{ITEM_NAME}■"].isNotEmpty) { <<修正後 end>> ・・・ <<修正前 start>> child:Text(CommUtils.getSortOrderMark(_■{PRG_NAME}■SrchForm.srchOrderForm, '■{ITEM_NAME}■') + '■{ITEM_NAME_KANJI}■ : ' + DateFormat('yyyy/MM/dd').format(element["■{ITEM_NAME}■"]), <<修正前 end>> <<修正後 start>> child:Text(CommUtils.getSortOrderMark(_■{PRG_NAME}■SrchForm.srchOrderForm, '■{ITEM_NAME}■') + '■{ITEM_NAME_KANJI}■ : ' + DateFormat('yyyy/MM/dd').format( (DateTime.parse(element["■{ITEM_NAME}■"])).add(const Duration(hours:9))), <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。hinagata_ListlView_通常項目dateTime.txt <<修正前 start>> if (element["■{ITEM_NAME}■"] != null) { <<修正前 end>> <<修正後 start>> if (element["■{ITEM_NAME}■"].isNotEmpty) { <<修正後 end>> ・・・ <<修正前 start>> child:Text(CommUtils.getSortOrderMark(_■{PRG_NAME}■SrchForm.srchOrderForm, '■{ITEM_NAME}■') + '■{ITEM_NAME_KANJI}■ : ' + DateFormat('yyyy/MM/dd HH:mm:ss').format(element["■{ITEM_NAME}■"]), <<修正前 end>> <<修正後 start>> child:Text(CommUtils.getSortOrderMark(_■{PRG_NAME}■SrchForm.srchOrderForm, '■{ITEM_NAME}■') + '■{ITEM_NAME_KANJI}■ : ' + DateFormat('yyyy/MM/dd HH:mm:ss').format( (DateTime.parse(element["■{ITEM_NAME}■"])).add(const Duration(hours:9))), <<修正後 end>> ■「商品情報一覧(更新削除)」で検索押下時にエラー発生 ⑥検索ボタン押下したら、 ”エラーが発生しましたtype 'int' is not a subtype of type 'String'”というエラー文言が画面トップに赤文字で表示された。 ・理由:ShohinSrchFormクラス、ShohinFormクラスでSpringからの戻りが数字の時、Stringに変換できないみたいだ。 <<修正前 start>> biztypeCd = _resDataMap["shohinSrchForm"]["biztypeCd"] ?? ""; // 業種ID <<修正前 end>> biztypeCd = _resDataMap["shohinSrchForm"]["biztypeCd"]!=null?_resDataMap["shohinSrchForm"]["biztypeCd"].toString():""; // 業種ID <<修正後 start>> <<修正後 end>> ・エラーメッセージに例外発生のメッセージが出ているのを修正する ShohinListクラス、及びShohinDetailクラス、ShohinRegisterAmendクラス ・実際の修正対象:Flutter 側ひな形。 1_00_hinagata_RegisterAmend.txt 2_00_hinagata_Detail.txt 3_00_hinagata_List.txt <<修正前 start>> _errorSuccessMsg = "エラーが発生しました" + e.toString(); <<修正前 end>> <<修正後 start>> if (kDebugMode) { print("エラーが発生しました" + e.toString()); } _errorSuccessMsg = "内部エラーが発生しました"; <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。 01_04_02_03_ItmLong部品.txt <<修正前 start>> ■{item_name}■ = _resDataMap["■{prg_name}■Form"]["■{item_name}■"] ?? ■{initValue}■; // ■{ItmJpnName}■ <<修正前 end>> <<修正後 start>> ■{item_name}■ = _resDataMap["■{prg_name}■Form"]["■{item_name}■"]!=null?_resDataMap["■{prg_name}■Form"]["■{item_name}■"].toString():""; // ■{ItmJpnName}■ <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。 03_04_02_03_ItmLongFormTo部品.txt <<修正前 start>> ■{item_name}■From = _resDataMap["■{prg_name}■SrchForm"]["■{item_name}■From"] ?? 0; // ■{ItmJpnName}■From ■{item_name}■To = _resDataMap["■{prg_name}■SrchForm"]["■{item_name}■To"] ?? 0; // ■{ItmJpnName}■To <<修正前 end>> <<修正後 start>> ■{item_name}■From = _resDataMap["■{prg_name}■SrchForm"]["■{item_name}■From"] !=null?_resDataMap["■{prg_name}■SrchForm"]["■{item_name}■From"].toString():""; // ■{ItmJpnName}■From ■{item_name}■To = _resDataMap["■{prg_name}■SrchForm"]["■{item_name}■To"]!=null?_resDataMap["■{prg_name}■SrchForm"]["■{item_name}■To"].toString():""; // ■{ItmJpnName}■To <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。 03_04_02_03_ItmLong部品.txt <<修正前 start>> ■{item_name}■ = _resDataMap["■{prg_name}■SrchForm"]["■{item_name}■"] ?? 0; // ■{ItmJpnName}■ <<修正前 end>> <<修正後 start>> ■{item_name}■ = _resDataMap["■{prg_name}■SrchForm"]["■{item_name}■"]!=null?_resDataMap["■{prg_name}■SrchForm"]["■{item_name}■"].toString():""; // ■{ItmJpnName}■ <<修正後 end>> ■「商品情報一覧(更新削除)」で検索押下時にエラー発生 ⑦日付の範囲検索が1行に収まり切れなかった。 さらに、日付項目が任意入力の時、日付選択ボタンの右側に、「クリア」ボタンを付け、押下により日付をクリアする。 ・ShohinListクラス、ShohinRegisterAmendクラスに使用している ・実際の修正対象:Flutter 側ひな形。 hinagata_ListSrch_年月日FromTo02.txt 修正 hinagata_ListSrch_通常項目date.txt 同じようにクリアボタンを入れるよう修正する。 children: <Widget>[ // 日付の入力フォーム const Text("■{ITEM_NAME_KANJI}■", overflow: TextOverflow.clip, ), <<追加 start>> Row ( children: <Widget>[ <<追加 end>> Container( ・・・ ), Container( ・・・ ), <<追加 start>> Container( margin: const EdgeInsets.fromLTRB(5, 0, 5, 5), padding: const EdgeInsets.fromLTRB(5, 0, 5, 0), child: ElevatedButton( onPressed: () async { setState(() { _■{PRG_NAME}■SrchForm.■{ITEM_NAME}■From = null; }); }, style: ElevatedButton.styleFrom( primary: Colors.blue, ), child: const Text("クリア"), ), ), ] ), <<追加 end>> Text(' ~ ', ), <<ここに移動した start>> Row ( children: <Widget>[ <<ここに移動した end>> Container( ・・・ ), Container( ・・・ ), <<追加 start>> Container( margin: const EdgeInsets.fromLTRB(5, 0, 5, 5), padding: const EdgeInsets.fromLTRB(5, 0, 5, 0), child: ElevatedButton( onPressed: () async { setState(() { _■{PRG_NAME}■SrchForm.■{ITEM_NAME}■To = null; }); }, style: ElevatedButton.styleFrom( primary: Colors.blue, ), child: const Text("クリア"), ), ), <<追加 end>> ] ), Text( ・・・ ■「商品情報一覧(更新削除)」で検索押下時にエラー発生 ⑧日付の範囲検索で日付指定したら、HTTP送信まえに例外発生 発生した例外:Converting object to an encodable object failed: Instance of 'DateTime' 理由:ShohinSrchFormクラス、ShohinFormクラスでSpringからの戻りがDateの時、DateTimeに変換できないみたいだ。 ・実際の修正対象:Flutter 側ひな形。01_04_03_03_ItmDate部品.txt 修正 補足:date関連はHTTPでデータ取得した時点でDateTime形に変換するように修正する。 <<修正前 start>> ■{item_name}■ = _resDataMap["■{prg_name}■Form"]["■{item_name}■"]; // ■{ItmJpnName}■ <<修正前 end>> <<修正後 start>> ■{item_name}■ = _resDataMap["■{prg_name}■Form"]["■{item_name}■"]==null? null: (DateTime.parse(_resDataMap["■{prg_name}■Form"]["■{item_name}■"])).add(const Duration(hours:9)); // ■{ItmJpnName}■ <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。03_04_03_03_ItmDate部品.txt 修正 補足:date関連はHTTPでデータ取得した時点でDateTime形に変換するように修正する。 <<修正前 start>> ■{item_name}■ = _resDataMap["■{prg_name}■SrchForm"]["■{item_name}■"]; // ■{ItmJpnName}■ <<修正前 end>> <<修正後 start>> ■{item_name}■ = _resDataMap["■{prg_name}■SrchForm"]["■{item_name}■"]==null? null: (DateTime.parse(_resDataMap["■{prg_name}■SrchForm"]["■{item_name}■"])).add(const Duration(hours:9)); // ■{ItmJpnName}■ <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。03_04_03_03_ItmDateFormTo部品.txt 修正 補足:date関連はHTTPでデータ取得した時点でDateTime形に変換するように修正する。 <<修正前 start>> ■{item_name}■From = _resDataMap["■{prg_name}■SrchForm"]["■{item_name}■From"]; // ■{ItmJpnName}■From ■{item_name}■To = _resDataMap["■{prg_name}■SrchForm"]["■{item_name}■To"]; // ■{ItmJpnName}■To <<修正前 end>> <<修正後 start>> ■{item_name}■From = _resDataMap["■{prg_name}■SrchForm"]["■{item_name}■From"]==null? null: (DateTime.parse(_resDataMap["■{prg_name}■SrchForm"]["■{item_name}■From"])).add(const Duration(hours:9)); // ■{ItmJpnName}■From ■{item_name}■To = _resDataMap["■{prg_name}■SrchForm"]["■{item_name}■To"]==null? null: (DateTime.parse(_resDataMap["■{prg_name}■SrchForm"]["■{item_name}■To"])).add(const Duration(hours:9)); // ■{ItmJpnName}■To <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。 01_04_03_04_ItmDate部品.txt 修正 <<修正前 start>> '■{item_name}■': ■{item_name}■, // ■{ItmJpnName}■ <<修正前 end>> <<修正後 start>> '■{item_name}■': ■{item_name}■!=null?DateFormat("yyyy-MM-dd").format(■{item_name}■!) + "T" + DateFormat("HH:mm:ss").format(■{item_name}■!) + ".000":"", // ■{ItmJpnName}■ <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。 03_04_03_04_ItmDateFormTo部品.txt 修正 <<修正前 start>> '■{item_name}■From': ■{item_name}■From, // ■{ItmJpnName}■From '■{item_name}■To': ■{item_name}■To, // ■{ItmJpnName}■To <<修正前 end>> <<修正後 start>> '■{item_name}■From': ■{item_name}■From!=null?DateFormat("yyyy-MM-dd").format(■{item_name}■From!) + "T" + DateFormat("HH:mm:ss").format(■{item_name}■From!) + ".000":"", // ■{ItmJpnName}■From '■{item_name}■To': ■{item_name}■To!=null?DateFormat("yyyy-MM-dd").format(■{item_name}■To!) + "T" + DateFormat("HH:mm:ss").format(■{item_name}■To!) + ".000":"", // ■{ItmJpnName}■To <<修正後 end>> ■「商品情報一覧(更新削除)」で検索押下時にエラー発生 初期値を入れると、実行時にプルダウンに存在しない値だと例外が発生するので空白にしておく。 ・実際の修正対象:FlutterForm作成.vb 修正 Private Sub 項目関連作成ForTblForm(ByRef A01_03_00_publicDbELEMENTSWK, ・・・ Do While Cells(i, cont項目名ID列) <> "" 'form用 DBエレメントformFlgTmp = False ・・・ ・・・ <<修正前 start>> 変更内容Array(5, 2) = Trim(Cells(i, cont必須ディフォルト列)) <<修正前後 end>> <<修正後 start>> '変更内容Array(5, 2) = Trim(Cells(i, cont必須ディフォルト列)) 変更内容Array(5, 2) = "" <<修正後 end>> ・・・ <<削除 start>> これと同じものが全部で4か所ある。全部削除する。 If 変更内容Array(5, 2) = "" Then 変更内容Array(5, 2) = "0" End If <<削除 end>> ■「商品情報登録」押下時にエラー発生 例:以下のCommUtils.getItemsFromELEMENTS(CommUtils.publicELEMENTSが固定エレメントでは使えないということが分かった DropdownButton( items: CommUtils.getItemsFromELEMENTS(CommUtils.publicELEMENTS('OPN_KBN', '---未選択---', Elements.elements), _shohinForm.openkbn1), ので、これにする DropdownButton( items: CommUtils.getItemsFromFixELEMENTS('OPN_KBN', '---未選択---', _shohinForm.openkbn1), ・実際の修正対象:flutter_app_元ネタ削除後_最新 \lib\utils\comm_utils.dart 修正 <<追加 start>> ・・・ /// 固定エレメントのドロップダウンリストを作成する static List<DropdownMenuItem<String>> getItemsFromFixELEMENTS(String key, String dflt, String? selectItem) { List<List<String>> elements = Elements.elementsList(key, dflt); List<DropdownMenuItem<String>> _items = <DropdownMenuItem<String>>[]; for (int i = 0; i < elements.length; i++) { if (selectItem != null && selectItem == elements[i][0] ) { _items.add(DropdownMenuItem( value: elements[i][0], child: Text(elements[i][1], style: const TextStyle(fontWeight: FontWeight.normal, color: Colors.black, backgroundColor: Colors.yellow)), )); } else { _items.add(DropdownMenuItem( value: elements[i][0], child: Text(elements[i][1], style: const TextStyle(fontWeight: FontWeight.normal, color: Colors.black)), )); } } return _items.toList(); } <<追加 end>> ・実際の修正対象:Flutter 側ひな形。 hinagata_AmendView_プルダウン.txt 修正 <<修正前 start>> items: CommUtils.getItemsFromELEMENTS(CommUtils.publicELEMENTS('■{CODE_ID}■', '■{SELECT_OPT}■', Elements.elements), ■{chgToString_mae}■_■{PRG_NAME}■Form.■{ITEM_NAME}■■{chgToString_ura}■), <<修正前 end>> <<修正後 start>> items: CommUtils.getItemsFromFixELEMENTS('■{CODE_ID}■', '■{SELECT_OPT}■', _■{PRG_NAME}■Form.■{ITEM_NAME}■), <<修正後 end>> ・実際の修正対象:Flutter 側ひな形。 hinagata_ListSrch_プルダウン.txt 修正 <<修正前 start>> items: CommUtils.getItemsFromELEMENTS(CommUtils.publicELEMENTS('■{CODE_ID}■', '■{ALL_SELECT}■', Elements.elements), ■{chgToString_mae}■_■{PRG_NAME}■SrchForm.■{ITEM_NAME}■■{chgToString_ura}■), <<修正前 end>> <<修正後 start>> items: CommUtils.getItemsFromFixELEMENTS('■{CODE_ID}■', '■{ALL_SELECT}■', _■{PRG_NAME}■SrchForm.■{ITEM_NAME}■), <<修正後 end>> ■
■2022/06/15に、勉強した成果:『Flutter_JavaSpringプログラム自動作成◎自動生成ツール』をVectorに載せました。Zenn本も書きました。使ってみての感想や間違いの指定や、こうやったほうがいいとかの情報があればメールください。
・Vector
www.vector.co.jp
・Zenn本(Flutter_JavaSpringプログラム自動作成)
zenn.dev