導入
これ作りたい
![スクリーンショット 2022-09-02 18.50.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/633771/e849f448-5a66-de08-9026-9407f4430159.png)
CupertinoTextFieldの特性
・入力の可不を設定できる
・入力できない時の色は基本的に変えられない
(↑今回はこれをゴリ押しで変える。)
・検索マークをつける
記事を書くきっかけ
・TextField押下時に違う画面に遷移させたい
・一発でできそうな方法が無かった
・iOSっぽく角丸で扱いたかった
CupertinoTextFieldの色を変える
三層に分けて考える。
・そもそものベースのview
->CupertinoTextFieldを入れる色を決めるコンテナ
->CupertinoTextField
コンテナをCupertinoTextFieldでくり抜く(BlendMode.dstIn)
参考はこちら
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Fadvent-calendar-ogp-background-f625e957b80c4bd8dd47b724be996090.jpg?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9QmxlbmRNb2RlJUUzJTgxJUFCJUUzJTgxJUE0JUUzJTgxJTg0JUUzJTgxJUE2JnR4dC1jb2xvcj0lMjMzQTNDM0MmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkNtaWRkbGUmcz1kNzZjY2RjNzQ4NzZhOTJiMzJkMGMzZWM5YTEwYjg3OA&mark-x=142&mark-y=151&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTcxNiZ0eHQ9JTQwa28yaWMlMjBpbiUyME5ld3NQaWNrcyZ0eHQtY29sb3I9JTIzM0EzQzNDJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTMyJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9OTRjMTllNDFmMTk2N2NkN2NmNzZmYWJmMzRhMmU3ZjA&blend-x=142&blend-y=491&blend-mode=normal&s=d660391fad97ae478dbb20ed087d64f0)
BlendModeについて - Qiita
今度、Flutterの書籍を発売することになりました。いや、執筆することの大変さは噂で聞いていたけど、本当に辛かったです。その辺りの話は別に書くとして、ここでは、書籍に載せるには「需要が少なそう/カ…
そうすると、
にできる。
コード全文は以下。
Material(
shape: RoundedRectangleBorder(
// そもそものviewを丸くする
borderRadius: BorderRadius.circular(10),
),
// 押下時にイベントを発生させるためにInkWellを使う
child: InkWell(
onTap: () {},
// TextFieldを入れるコンテナを作成
child: Container(
decoration: BoxDecoration(
// コンテナも同様に丸くする。
borderRadius: BorderRadius.circular(10),
// あたかも有効に見える色を設定する。
color: Colors.gray,
),
child: CupertinoTextField(
readOnly: true,
autofocus: false,
enabled: false,
decoration: BoxDecoration(
// 丸くする。
borderRadius: BorderRadius.circular(10),
// くり抜くviewの色は無色にしておく
color: Colors.transparent, // 背景色
// コンテナと重なっている箇所だけ表示する。
backgroundBlendMode: BlendMode.dstIn,
),
prefix: Icon.search,
placeholder: 'ここに入力してね',
),
),
),
);