Open4

Flutter ライブラリ

Hidden comment
masato_is_a_ snakemasato_is_a_ snake

localhostのipアドレスを取得してアプリを起動する。

実機とエミュレーターどちらも同じコードでローカルのAPIを叩きたい。
ipアドレスを取得するためにnetwork_info_plusを使用する。

https://pub.dev/packages/network_info_plus/install

普通に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();

https://qiita.com/Kurunp/items/04f34a47cc8cee0fe542

masato_is_a_ snakemasato_is_a_ snake

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が使われている。

https://github.com/dart-lang/shelf/issues/137

このコマンドで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