もくまっち開発 Week 16
ここまで
今週のタスク
- 起動後数秒で落ちるのの調査
まずはデバッグできるように準備する
DevTools を使うと良さそう
パソコンに iPhone をつないだ状態で flutter run
を実行すると、
iPhone にアプリをインストールしてデバッグができるみたい
$ flutter run
Connected devices:
Pixel 6a (mobile) • 29141JEGR13921 • android-arm64 • Android 14 (API 34)
MTS PRV (mobile) • 00008130-001958511160001C • ios • iOS 17.3.1 21D61
Chrome (web) • chrome • web-javascript • Google Chrome 123.0.6312.87
No wireless devices were found.
[1]: Pixel 6a (29141JEGR13921)
[2]: MTS PRV (00008130-001958511160001C)
[3]: Chrome (chrome)
Please choose one (or "q" to quit): 2
Launching lib/main.dart on MTS PRV in debug mode...
Automatically signing iOS for device deployment using specified development team in Xcode project: 9Z99MR8XP3
Running pod install... 12.9s
Running Xcode build...
└─Compiling, linking and signing... 25.1s
Xcode build done. 60.4s
You may be prompted to give access to control Xcode. Flutter uses Xcode to run your app. If access is not allowed, you can change this through your Settings > Privacy & Security >
Automation.
[ERROR:flutter/shell/platform/darwin/graphics/FlutterDarwinContextMetalImpeller.mm(42)] Using the Impeller rendering backend.
Installing and launching... 38.5s
Syncing files to device MTS PRV... 177ms
Flutter run key commands.
r Hot reload. 🔥🔥🔥
R Hot restart.
h List all available interactive commands.
d Detach (terminate "flutter run" but leave application running).
c Clear the screen
q Quit (terminate the application on the device).
A Dart VM Service on MTS PRV is available at: http://127.0.0.1:62127/SAotALYUIrQ=/
The Flutter DevTools debugger and profiler on MTS PRV is available at: http://127.0.0.1:9101?uri=http://127.0.0.1:62127/SAotALYUIrQ=/
══╡ EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE ╞════════════════════════════════════════════════════
The following NetworkImageLoadException was thrown resolving an image codec:
HTTP request failed, statusCode: 404,
https://storage.googleapis.com/mochmatch-3ed20.appspot.com/public/images/shops/126.JPG
When the exception was thrown, this was the stack:
#0 NetworkImage._loadAsync (package:flutter/src/painting/_network_image_io.dart:115:9)
<asynchronous suspension>
#1 MultiFrameImageStreamCompleter._handleCodecReady (package:flutter/src/painting/image_stream.dart:985:3)
<asynchronous suspension>
Image provider:
NetworkImage("https://storage.googleapis.com/mochmatch-3ed20.appspot.com/public/images/shops/126.JPG",
scale: 1.0)
Image key:
NetworkImage("https://storage.googleapis.com/mochmatch-3ed20.appspot.com/public/images/shops/126.JPG",
scale: 1.0)
════════════════════════════════════════════════════════════════════════════════════════════════════
Lost connection to device.
デバッグの選択肢が出るので iPhone (2)を選択
[1]: Pixel 6a (29141JEGR13921)
[2]: MTS PRV (00008130-001958511160001C)
[3]: Chrome (chrome)
Please choose one (or "q" to quit): 2
ちなみに Chrome を選ぶとめちゃくちゃエラーが出る
$ flutter run
Connected devices:
Pixel 6a (mobile) • 29141JEGR13921 • android-arm64 • Android 14 (API 34)
MTS PRV (mobile) • 00008130-001958511160001C • ios • iOS 17.3.1 21D61
Chrome (web) • chrome • web-javascript • Google Chrome 123.0.6312.87
Checking for wireless devices...
[1]: Pixel 6a (29141JEGR13921)
[2]: MTS PRV (00008130-001958511160001C)
[3]: Chrome (chrome)
Please choose one (or "q" to quit): 3
Launching lib/main.dart on Chrome in debug mode...
../../../../.pub-cache/hosted/pub.dev/web-0.3.0/lib/src/dom/accelerometer.dart:52:45: Error: The type 'JSObject' can't be used as supertype.
class AccelerometerReadingValues implements JSObject {
^
(略)
../../../../.pub-cache/hosted/pub.dev/web-0.3.0/lib/src/helpers/events/providers.dart:621:16: Error: The method 'hasProperty' isn't defined for the class
'EventTarget'.
- 'EventTarget' is from 'package:web/src/dom/dom.dart' ('../../../../.pub-cache/hosted/pub.dev/web-0.3.0/lib/src/dom/dom.dart').
Try correcting the name to the name of an existing method, or defining a method named 'hasProperty'.
} else if (e.hasProperty('webkitHidden'.toJS).toDart) {
^^^^^^^^^^^
Waiting for connection from debug service on Chrome... 21.1s
Failed to compile application.
make: *** [debug] Error 1
pubspec.yml の dependencies に web を追加したら直るそう
flutter pub get
して flutter run
を実行
Chrome で動いた!祝
ログのメモ
A RenderFlex overflowed by 16 pixels on the bottom.
══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
The following assertion was thrown during layout:
A RenderFlex overflowed by 16 pixels on the bottom.
The relevant error-causing widget was:
Column
Column:file:///Users/nix/ghq/github.com/protoout/mochmatch/lib/pages/list_page/list_page_widget.dart:87:20
The overflowing RenderFlex has an orientation of Axis.vertical.
The edge of the RenderFlex that is overflowing has been marked in the rendering with a yellow and
black striped pattern. This is usually caused by the contents being too big for the RenderFlex.
Consider applying a flex factor (e.g. using an Expanded widget) to force the children of the
RenderFlex to fit within the available space instead of being sized to their natural size.
This is considered an error condition because it indicates that there is content that cannot be
seen. If the content is legitimately bigger than the available space, consider clipping it with a
ClipRect widget before putting it in the flex, or using a scrollable container rather than a Flex,
like a ListView.
The specific RenderFlex in question is: RenderFlex#aad68 relayoutBoundary=up24 OVERFLOWING:
creator: Column ← Align ← ConstrainedBox ← Container ← LayoutBuilder ← DefaultTextStyle ← Align ←
Transform ← Padding ← Container ← Stack ← ClipRect ← ⋯
parentData: offset=Offset(0.0, 0.0) (can use size)
constraints: BoxConstraints(0.0<=w<=400.0, 0.0<=h<=40.0)
size: Size(400.0, 40.0)
direction: vertical
mainAxisAlignment: end
mainAxisSize: max
crossAxisAlignment: center
verticalDirection: down
◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤
════════════════════════════════════════════════════════════════════════════════════════════════════
Could not find a set of Noto fonts to display all missing characters. Please add a font asset for the missing characters. See: https://flutter.dev/docs/cookbook/design/fonts
Another exception was thrown: [object ProgressEvent]
100 個くらい出てる
CORS のため画像は出ない
Another exception was thrown: [object ProgressEvent]
は CORS のエラーのせいかも
iPhone でデバッグしてくのが良さそう
https://storage.googleapis.com/mochmatch-3ed20.appspot.com/public/images/shops/126.JPG
でエラーが出てる
══╡ EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE ╞════════════════════════════════════════════════════
The following NetworkImageLoadException was thrown resolving an image codec:
HTTP request failed, statusCode: 404,
https://storage.googleapis.com/mochmatch-3ed20.appspot.com/public/images/shops/126.JPG
When the exception was thrown, this was the stack:
#0 NetworkImage._loadAsync (package:flutter/src/painting/_network_image_io.dart:115:9)
<asynchronous suspension>
#1 MultiFrameImageStreamCompleter._handleCodecReady (package:flutter/src/painting/image_stream.dart:985:3)
<asynchronous suspension>
Image provider:
NetworkImage("https://storage.googleapis.com/mochmatch-3ed20.appspot.com/public/images/shops/126.JPG",
scale: 1.0)
Image key:
NetworkImage("https://storage.googleapis.com/mochmatch-3ed20.appspot.com/public/images/shops/126.JPG",
scale: 1.0)
════════════════════════════════════════════════════════════════════════════════════════════════════
ファイル名が違ってる
リネーム完了
さっきのエラーは消えた
$ flutter run
Launching lib/main.dart on MTS PRV in debug mode...
Automatically signing iOS for device deployment using specified development team in Xcode project: 9Z99MR8XP3
Running Xcode build...
└─Compiling, linking and signing... 17.8s
Xcode build done. 42.9s
You may be prompted to give access to control Xcode. Flutter uses Xcode to run your app. If access is not allowed, you can change this through your Settings > Privacy & Security >
Automation.
[ERROR:flutter/shell/platform/darwin/graphics/FlutterDarwinContextMetalImpeller.mm(42)] Using the Impeller rendering backend.
Installing and launching... 26.4s
Syncing files to device MTS PRV... 119ms
Flutter run key commands.
r Hot reload. 🔥🔥🔥
R Hot restart.
h List all available interactive commands.
d Detach (terminate "flutter run" but leave application running).
c Clear the screen
q Quit (terminate the application on the device).
A Dart VM Service on MTS PRV is available at: http://127.0.0.1:50802/xYf-2GgDtSQ=/
The Flutter DevTools debugger and profiler on MTS PRV is available at: http://127.0.0.1:9101?uri=http://127.0.0.1:50802/xYf-2GgDtSQ=/
Lost connection to device.
次はこちら
[ERROR:flutter/shell/platform/darwin/graphics/FlutterDarwinContextMetalImpeller.mm(42)] Using the Impeller rendering backend.
Info.plist に下記を追加すると消えるみたい
<key>FLTEnableImpeller</key>
<false />
追加した(false にしちゃっていいのかはわからん)
さっきのエラーは消えた
$ flutter run
Launching lib/main.dart on MTS PRV in debug mode...
Automatically signing iOS for device deployment using specified development team in Xcode project: 9Z99MR8XP3
Running Xcode build...
└─Compiling, linking and signing... 18.4s
Xcode build done. 47.4s
You may be prompted to give access to control Xcode. Flutter uses Xcode to run your app. If access is not allowed, you can change this through your Settings > Privacy & Security >
Automation.
Installing and launching... 28.6s
Syncing files to device MTS PRV... 140ms
Flutter run key commands.
r Hot reload. 🔥🔥🔥
R Hot restart.
h List all available interactive commands.
d Detach (terminate "flutter run" but leave application running).
c Clear the screen
q Quit (terminate the application on the device).
A Dart VM Service on MTS PRV is available at: http://127.0.0.1:51344/5-6-CHL16KU=/
The Flutter DevTools debugger and profiler on MTS PRV is available at: http://127.0.0.1:9101?uri=http://127.0.0.1:51344/5-6-CHL16KU=/
Lost connection to device.
これで、パッと見えるエラーは消えた
けどアプリ起動後数秒で落ちるのは変わらず
ここからは地道にコードをコメントアウトして切り分けていくしかなさそう
とりあえず
- 初期表示時
- 検索後
の両方で発生してるか確認する
検索後も発生してる
(エラー出てるのはコード変えて無理やり落ちないようにしてるので)
次は表示件数絞っても落ちるか調べてみる
DevTools は flutter run
したあとに表示される URL にアクセスすると利用できる。
見た目はこんな感じ。
次は 100 件で試してみる
- 100 件:NG
- 50 件:NG
- 43 件:NG
- 42 件:OK
- 41 件:OK
- 40 件:OK
- 37 件:OK
- 25 件:OK
42 件だと表示できて、43 件だと落ちる
42 件のときの最後の 3 件
flutter: MochmatchDataRecord(reference: mochmatch_data/E9BbKL91iM7rPJUUzv0C, data: {timeframe: 2, noisiness: 2, shishaPicture: https://storage.googleapis.com/mochmatch-3ed20.appspot.com/public/images/shops/1pejx85PQhyrnyuObvU3oK4Z4XF9JKVqt.webp, instagramUrl: https://www.instagram.com/holiday_shisha/, timestamp: 2024-01-06 08:11:52.000, webSiteUrl: , softnessOfChair: 3, twitterUrl: https://twitter.com/shisha_harajuku, isClosed: false, location: LatLng(lat: 35.67061110441211, lng: 139.70542682405025), bgm: 3, friendlinessOfStaffs: 4, brightness: 3, dayOfWeek: 2, name: 原宿のシーシャハウスHoliday(ホリデー)})
flutter: MochmatchDataRecord(reference: mochmatch_data/n4zyKpjdLN3eHNaivOHi, data: {timeframe: 2, noisiness: 1, shishaPicture: https://storage.googleapis.com/mochmatch-3ed20.appspot.com/public/images/shops/default.png, instagramUrl: https://www.instagram.com/holiday_shisha/, timestamp: 2023-08-31 03:27:49.000, webSiteUrl: , softnessOfChair: 3, twitterUrl: https://twitter.com/shisha_harajuku, isClosed: false, location: LatLng(lat: 35.67061110441211, lng: 139.70542682405025), bgm: 2, friendlinessOfStaffs: 4, brightness: 3, dayOfWeek: 1, name: 原宿のシーシャハウスHoliday(ホリデー)})
flutter: MochmatchDataRecord(reference: mochmatch_data/pFbdR1LFzEVD4vgLerCQ, data: {timeframe: 3, noisiness: 2, shishaPicture: https://storage.googleapis.com/mochmatch-3ed20.appspot.com/public/images/shops/17aBwJkYddrzSUc2AezG5uOoMuwjOij5V.webp, instagramUrl: https://www.instagram.com/holiday_shisha/, timestamp: 2023-12-30 11:15:01.000, webSiteUrl: , softnessOfChair: 3, twitterUrl: https://twitter.com/shisha_harajuku, isClosed: false, location: LatLng(lat: 35.67061110441211, lng: 139.70542682405025), bgm: 2, friendlinessOfStaffs: 4, brightness: 3, dayOfWeek: 2, name: 原宿のシーシャハウスHoliday(ホリデー)})
42 件のときは 500 MB くらいメモリ使ってる
43 件目
flutter: MochmatchDataRecord(reference: mochmatch_data/Vw5k8YrLUlHFtcQd5Qp5, data: {timeframe: 3, noisiness: 1, shishaPicture: https://storage.googleapis.com/mochmatch-3ed20.appspot.com/public/images/shops/129.JPG, instagramUrl: https://www.instagram.com/hellohello_ginza/, timestamp: 2024-02-29 21:05:55.061, webSiteUrl: , softnessOfChair: 3, twitterUrl: https://twitter.com/hello_stand, isClosed: false, location: LatLng(lat: 35.671652452245496, lng: 139.76100582587736), bgm: 2, friendlinessOfStaffs: 4, brightness: 1, dayOfWeek: 1, name: 銀座HelloHello STAND(ハロハロ スタンド)})
この店の画像は jpeg になってて、 5.2 MB くらいあった。
これのせいかも。
webp で一回圧縮してみる
画像圧縮したら 43 件にしても落ちなくなった!祝
やっぱ画像が重くてメモリ使いすぎてる説が濃厚だなぁ
ちょっと JPG 画像全部圧縮してみるか
JPG だったやつ全部圧縮した
全画像 webp にしてみたけど、too much memory で落ちた。
解決せず。
カスタム関数にログを追加して、どの処理で落ちてるか見てみる
calculateMochmatch
calculateDistance
がめっちゃ呼ばれてることがわかったけど、落ちる原因はまだわからない
$ flutter run
Connected devices:
Chrome (web) • chrome • web-javascript • Google Chrome 123.0.6312.87
Wirelessly connected devices:
MTS PRV (mobile) • 00008130-001958511160001C • ios • iOS 17.3.1 21D61
[1]: Chrome (chrome)
[2]: MTS PRV (00008130-001958511160001C)
Please choose one (or "q" to quit): 2
Launching lib/main.dart on MTS PRV in debug mode...
Automatically signing iOS for device deployment using specified development team in Xcode project: 9Z99MR8XP3
Running Xcode build...
└─Compiling, linking and signing... 5.7s
Xcode build done. 36.7s
You may be prompted to give access to control Xcode. Flutter uses Xcode to run your app. If access is not allowed, you can change this through your Settings > Privacy & Security > Automation.
Installing and launching... 42.5s
Syncing files to device MTS PRV... 147ms
Flutter run key commands.
r Hot reload. 🔥🔥🔥
R Hot restart.
h List all available interactive commands.
d Detach (terminate "flutter run" but leave application running).
c Clear the screen
q Quit (terminate the application on the device).
A Dart VM Service on MTS PRV is available at: http://127.0.0.1:58325/ly5fd33ac0w=/
The Flutter DevTools debugger and profiler on MTS PRV is available at: http://127.0.0.1:9101?uri=http://127.0.0.1:58325/ly5fd33ac0w=/
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
flutter: [START]calculateMochmatch
flutter: [END ]calculateMochmatch
flutter: [START]calculateDistance
flutter: [END ]calculateDistance
Lost connection to device.
メモリの動向
順調に増えてる...
調査激ムズ...
画面表示時にメモリ 3GB 近く使ってる
プロファイルは Xcode の方が見やすいな
43 件で落ちるときのメモリも見てみよう
落ちるまで一瞬すぎてわからん
List ページがメモリを大量に使う可能性があるか聞いてみた
Claude
はい、このコードではメモリを大量に使用する可能性があります。以下の点が原因と考えられます。
1. **FutureBuilder**
`FutureBuilder`を使って大量のデータをロードしようとしている箇所があります。大量のデータをメモリ上に保持すると、メモリ消費量が増えてしまう可能性があります。
2. **ListView.builder**
`ListView.builder`を使って大量のデータを表示しようとしています。リストの要素数が多くなればなるほど、メモリ消費量が増加します。
3. **画像データ**
各リスト要素に画像を表示しようとしています。画像データをメモリ上に保持するため、画像の数が増えるとメモリ消費量が増加します。
4. **ステートフル Widget**
`StatefulWidget`を使用しているため、ウィジェットツリー全体が再ビルドされる可能性があります。再ビルドの際にメモリを大量に消費する可能性があります。
メモリ消費を抑えるためには、以下の対策が考えられます。
- ページング機能を実装し、一度に表示するデータ量を制限する
- 画像キャッシュを適切に管理する
- ステートレス Widgetを使用する、もしくはステートフル Widgetの使用範囲を限定する
- 不要なデータやウィジェットを適切に破棄する
大量のデータを扱う場合は、パフォーマンスとメモリ使用量に注意を払う必要があります。上記の対策を講じることで、アプリのメモリ使用量を適切に管理できると考えられます。
Gemini
はい、このコードはメモリを大量に使用 する可能性があります。
可能性が高い理由:
大量のデータ:
queryMochmatchDataRecordOnce 関数は、すべてのショップデータを一度に取得します。
取得したデータはメモリに保持されます。
ショップデータが多い場合、メモリ使用量が大幅に増加します。
画像:
ショップデータに画像が含まれている場合、画像はメモリにキャッシュされます。
画像が多い場合、メモリ使用量が大幅に増加します。
複雑な UI:
リストページの UI が複雑な場合、多くのウィジェットがメモリに保持されます。
複雑な UI は、メモリ使用量の増加につながります。
メモリ使用量を抑える方法:
データの取得を最適化する:
必要なデータのみを取得するように queryMochmatchDataRecordOnce 関数を調整します。
データをページングして、一度に取得するデータ量を制限します。
画像のキャッシュを管理する:
画像を必要に応じてのみキャッシュします。
キャッシュされた画像のサイズを小さくします。
UI を簡略化する:
不要なウィジェットを削除します。
効率的なウィジェットを使用します。
メモリ使用量を監視する:
Flutter DevTools を使用して、アプリのメモリ使用量を監視します。
メモリ使用量が許容範囲を超えている場合は、上記の対策を講じます。
その他の注意事項:
アプリのメモリ使用量は、デバイスによって異なります。
低メモリデバイスでは、メモリ使用量を抑える対策が特に重要になります。
メモリ使用量に関する詳細情報:
Flutter のメモリ使用量: [無効な URL を削除しました]
Flutter DevTools: https://flutter.dev/docs/development/tools/devtools
試しにリストページで画像表示しないようにしたらメモリ全然使わなくなった
(〜 300 MB くらい)
一旦、リストページの画像を非表示にする案を試すのが良さそう
一旦、リストページの画像を非表示にする案を試すのが良さそう
こちらで進めるで着地!
今週は Flutter DevTools とちょっと仲良くなった 1 週間でした
お疲れ様でした!