Open4
Flutter ライブラリ
localhostのipアドレスを取得してアプリを起動する。
実機とエミュレーターどちらも同じコードでローカルのAPIを叩きたい。
ipアドレスを取得するためにnetwork_info_plusを使用する。
普通にmain.dartで呼び出したら以下のエラー
Unhandled Exception: Binding has not yet been initialized.
E/flutter ( 9080): The "instance" getter on the ServicesBinding binding mixin is only available once that binding has been initialized.
E/flutter ( 9080): Typically, this is done by calling "WidgetsFlutterBinding.ensureInitialized()" or "runApp()" (the latter calls the former). Typically this call is done in the "void main()" method. The "ensureInitialized" method is idempotent; calling it multiple times is not harmful. After calling that method, the "instance" getter will return the binding.
E/flutter ( 9080): In a test, one can call "TestWidgetsFlutterBinding.ensureInitialized()" as the first line in the test's "main()" method to initialize the binding.
runApp内ではないと今回のようなnetwork情報を取得する機能は使えないみたい。runApp外でそれを使うにはmain関数内で以下を定義する。
WidgetsFlutterBinding.ensureInitialized();
shelf
chromeでサーバーを起動したら以下エラー
DartError: Unsupported operation: ServerSocket.bind
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 296:3 throw_
errors.dart:296
dart-sdk/lib/_internal/js_dev_runtime/patch/io_patch.dart 465:5 _bind
io_patch.dart:465
dart-sdk/lib/io/socket.dart 309:27 bind
原因としては、dart:ioがflutter_webでは使えないからみたい。shelfでも内部でdart:ioが使われている。
このコマンドでchromeやデバイスを必要せずサーバーを立ち上げることが可能。
dart lib/backend/main.dart --port 8081
ただ今回やりたいことは端末内でサーバーを起動する必要があるため、flutter projectにshelfのコードが交じるという状況になっている。
そうなると以下エラーが発生する。
art lib/backend/main.dart --port 8081
../../../fvm/versions/3.24.3/packages/flutter/lib/src/material/animated_icons.dart:9:8: Error: Dart library 'dart:ui' is not available on this platform.
import 'dart:ui' as ui show Canvas, Paint, Path, lerpDouble;
^
Context: The unavailable library 'dart:ui' is imported through these packages:
package:作成したflutter project => package:flutter => dart:ui
shelf 使い方