Flutter: Macのデスクトップアプリで、TextFieldのテキストを右から左に選択するとRangeErrorになる

2022/3/7 Flutter エラー・バグ日記 

TextField内のテキスト選択部分を抽出するために、以下のコードを入れていた。

 

controller.text.substring(controller.selection.baseOffset, controller.selection.extentOffset)
※「controller」は、TextEditingControllerのインスタンス

 

これをMacのデスクトップアプリとしてビルドし、テキストを右から左に向かって選択したら、以下のエラーが出た。

 

本記事はライトな日記思考で書いているので、詳細説明はしておらず、基本、テキストのみで画像とかは載せておりません。。m(_ _)m

解説記事ではないため、解決していない内容や、その時々の間違った解釈を述べてしまっている可能性が大いにありますので、何卒、ご了承ください。

 

The following RangeError was thrown during a scheduler callback:
Value not in range: 11

When the exception was thrown, this was the stack:
#0      _StringBase.substring (dart:core-patch/string_patch.dart:402:7)
・・・
以下略・・・

 

Androidアプリや、iOSアプリとしてビルドした時は発生しなかった。

substringメソッドがエラーになっているようなので、print文を入れて、「controller.selection.baseOffset」と「controller.selection.extentOffset」の値を見てみると、左から右に選択した時は、

 

.baseOffset < .extentOffset

 

であるが、右から左に選択すると、

 

.baseOffset  .extentOffset

 

となってしまい、substringメソッドの引数の条件エラーになるとわかった。

 

一方、AndroidアプリやiOSアプリの場合を調べると、選択範囲を左に広げても、右に広げても、常に

 

.baseOffset < .extentOffset

 

の状態が維持されていた。そのためエラーにならない。

 

仕方なく、コード内にOS判定による条件分岐を入れ、Macデスクトップの場合は、

 

.baseOffset  .extentOffset

 

となったら、substringメソッドの2つの引数を入れ替える修正を行い、無事、解消できた。

 

やはりiOS用とMac用とでは、微妙な違いがある模様。。

 

\ Flutterの学習で役立ったコンテンツ・書籍 /

 

 

 


Dart入門 – Dartの要点をつかむためのクイックツアー
タイトルとURLをコピーしました