できないこと・まだ使えないもの
FloatSoda で作りたいものが今できるかを、このページで確かめられます。使えないものを、置く場所と入力、見た目と文字、動きと状態、起動と終了、部品と UI コンポーネント、既知の不具合の順に並べています。
このページの読み方
Section titled “このページの読み方”各項目は、制約の内容、起きる症状、今できる回避、追跡先の4つで書いています。解除の見込みは、追跡先の Issue で確かめてください。このページには、日付や「今は」を書いていません。
項目は3種類に分かれます。まだ実装していないもの、仕様として実装しないもの、既知の不具合です。対応方針と進捗は、追跡先の Issue で確かめてください。仕様として実装しないものは、最後の節に分けています。自分の作りたいものに関わる節へ進んでください。
置く場所と入力
Section titled “置く場所と入力”ポインタの座標が届くのは、ダッシュボードのオーバーレイだけです。ボタンを置く画面は、ダッシュボードに置きます。
| 制約の内容 | 起きる症状 | 今できる回避 | 追跡 |
|---|---|---|---|
ポインタの座標が届くのは、DashboardWindow だけ |
WorldSpaceWindow と DeviceTrackedWindow に GestureDetector を置いても、コンパイルは通り例外も出ないが、コールバックは呼ばれない |
ポインター操作が要る画面は DashboardWindow に置き、コントローラーのボタンで操作するならアクション入力を使う |
#182 |
Size を省略したウィンドウは、表示範囲が起動時の大きさに固定される |
起動後に中身が大きくなると、増えた部分が SteamVR 上に表示されない | 中身の大きさが変わるウィンドウに Size を指定する |
#285 |
Size を省略したウィンドウは、ルートの制約に幅の上限がない |
途中の部品が幅の上限を渡さない場合、Wrap が折り返さず横一列に並ぶ |
Size を指定する。または Wrap を、幅を決めた SizedBox で包む |
追跡先なし(仕様) |
| 実行中にオーバーレイの種類を切り替えられない | DashboardWindow から WorldSpaceWindow への切り替えのような API がない |
起動時に、使う種類ごとにウィンドウを作る | #90 |
置き場所の選び方は、ガイドのオーバーレイの種類と選び方にあります。コントローラーの入力はコントローラーの入力を受け取る、押しても反応しないときの切り分けは反応しないときに切り分けるを開いてください。
見た目と文字
Section titled “見た目と文字”スクロールする一覧と文字入力は、今のところ作れません。Text は、親から受けた幅に収まるように自動で折り返しますが、折り返しと省略の制御はできません。
| 制約の内容 | 起きる症状 | 今できる回避 | 追跡 |
|---|---|---|---|
ListView、GridView、SingleChildScrollView が internal |
公開 API として呼べず、コンパイルできない | Stack と Positioned などで自分で並べ、表示する件数を絞る |
#69 |
| 文字入力(TextField)がない | 文字を打ち込む画面を作れない | なし | #107 |
Text に折り返しと省略(softWrap、overflow、maxLines)を指定する項目がない |
幅が有限なら自動で折り返すが、折り返さない指定、省略記号、行数の上限は指定できない(RenderParagraph.PerformLayout は親の MaxWidth で改行する) |
行を自分で決めたいときは、文字列を自分で分け、Column に複数の Text を並べる |
追跡先なし |
回避のコードは、ガイドのAI に FloatSoda を書かせるで AI に書かせられます。
アニメーションは AnimationController、Curves、FadeTransition で組めます。未実装のものは、次の表にまとめています。
| 制約の内容 | 起きる症状 | 今できる回避 | 追跡 |
|---|---|---|---|
Tween、CurvedAnimation、暗黙的アニメーション(AnimatedContainer 系)、スプリングの物理シミュレーションがない |
Flutter の同名の部品を書いても、コンパイルできない | AnimationController の値(0 から 1)を、自分の式で変換して使う |
#137、#163、#164 |
バックグラウンドのスレッドから SetState を呼べない |
画面の更新が失われる、またはクラッシュする | フレームごとに呼ばれる WidgetTicker の中など、メインのスレッドから呼ぶ(例は、チュートリアルの数字を表示して、書き換える) |
#150、#281 |
アニメーションの付け方は、ガイドのアニメーションを付けるにあります。
SteamVR が起動していない状態でアプリを起動できません。ウィンドウ1つだけを閉じる API もありません。
| 制約の内容 | 起きる症状 | 今できる回避 | 追跡 |
|---|---|---|---|
| SteamVR の起動が前提。遅延接続と再接続を扱えない | SteamVR が起動していない状態では、アプリを起動できない(--desktop でも OpenVR を初期化するため同じ) |
SteamVR を先に起動してから、アプリを起動する | #140、#233 |
| ウィンドウを閉じる API がない | 作ったウィンドウを、アプリの実行中に消せない | なし(アプリごと終了する) | #218 |
起動の作りは、ガイドのSteamVR と一緒に起動するで確かめられます。
部品と UI コンポーネント
Section titled “部品と UI コンポーネント”Button のような UI コンポーネントは、NuGet に出していません。ボタンは、GestureDetector で自分で組み立てます。スライダー、ダイアログ、トースト(通知として出して消す部品)の組み立て方は、確かめていません。
| 制約の内容 | 起きる症状 | 今できる回避 | 追跡 |
|---|---|---|---|
FloatSoda.UI、FloatSoda.UI.Cream、FloatSoda.UI.FizzyPop を NuGet に出していない(IsPackable=false) |
Button、スライダー、ダイアログなどの部品がない |
ボタンは GestureDetector と ColoredBox などで組み立てる(例は、チュートリアルのボタンを押して、数字を増やす)が、スライダーとダイアログの組み立て方は未確認 |
#126、#102、#78、#100 |
FloatSoda.Hooks を NuGet に出しておらず、UseState などの補助メソッドが NotImplementedException を投げる |
Hooks を使う書き方は、実行時に例外になる | StatefulWidget<T> と State<T> で書く |
#72 |
| 通知として出して消す部品(トースト)がない | 組み込みの通知用の部品を使えない | なし | #123、#74 |
ボタンの組み立て方は、ガイドのボタンやトグルを組み立てるにあります。
既知の不具合
Section titled “既知の不具合”不具合は、Issue で追跡しています。直ったかどうかは、Issue で確かめてください。
ここに載っていない症状は、ガイドの反応しないときに切り分けるかエラーを読んで直すを開きます。新しい不具合は、Issueで知らせてください。
Flutter と挙動が違う箇所の一覧は、Flutter の読み替え表にあります。差異を解消する作業の追跡先は、#224 です。
実装しないと決めたもの
Section titled “実装しないと決めたもの”スクリーンリーダー向けの情報を扱う、Flutter の Semantics に当たる機能は、実装しません。VR のオーバーレイのテクスチャに、スクリーンリーダーへ接続する出力先がないためです。解除の条件は決まっていません。