Flutter: ์ „์ฒด ํŠธ๋ฆฌ์—์„œ ํ‚ค๋ณด๋“œ ํฌ์ปค์Šค๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ธฐ๋Šฅ

์— ๋งŒ๋“  2018๋…„ 02์›” 01์ผ  ยท  1๋…ผํ‰  ยท  ์ถœ์ฒ˜: flutter/flutter

๋ฒˆ์‹ ๋‹จ๊ณ„

์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ๊ณณ์„ ๋งŒ์งˆ ๋•Œ๊นŒ์ง€ textField์˜ hintText๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
ํ„ฐ์น˜ ํฌ์ธํŠธ๋Š” ์œ„์ ฏ ํŠธ๋ฆฌ ๊นŠ์ˆ™์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์œ„์ ฏ ํŠธ๋ฆฌ ์–ด๋”˜๊ฐ€์—์„œ ํ˜„์žฌ ์ดˆ์ ์ด ๋งž์ถฐ์ง„ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ ธ์™€ ์ดˆ์ ์ด ๋งž์ง€ ์•Š์€ ์ƒํƒœ๋กœ ํ˜ธ์ถœํ•˜๊ณ , textField๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ํ‚ค๋ณด๋“œ๋ฅผ ์ˆจ๊ธฐ๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜ˆ์ œ๊ฐ€ ๋ถ€์กฑํ•˜๊ณ  ํŒจํ„ด ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์„œ ๋˜๋Š” ํ”Œ๋Ÿฌํ„ฐ์— ๋Œ€ํ•œ ๋‚ด ์ดํ•ด์˜ ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ์˜ˆ์ œ๋Š” ๋…ธ๋“œ์—์„œ unfocus๋ฅผ ํ˜ธ์ถœํ•˜๋Š” GestureDetector๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. focusNode๋Š” ๋™์ผํ•œ ์œ„์ ฏ์—์„œ ์‰ฝ๊ฒŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์—์„œ๋Š” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ์ค‘์ฒฉ๋œ ์œ„์ ฏ ํŠธ๋ฆฌ์—์„œ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ถŒ์žฅ๋˜๋Š” ํŒจํ„ด์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  <strong i="9">@override</strong>
  Widget build(BuildContext context) {
    return new Scaffold(
        appBar: new AppBar(
          title: new Text(widget.title),
        ),
        body: new Stack(children: <Widget>[
          new GestureDetector(
              excludeFromSemantics: true,
              onTapDown: (_) {
                _focusNode.unfocus();
              }),
          new Column(children: <Widget>[
            new TextField(
                focusNode: _focusNode,
                decoration: new InputDecoration(
                    border: null,
                    hintText: _focusNode.hasFocus ? 'FOCUS' : 'no focus')),
            new RaisedButton(
                child: new Text('Remove Focus'),
                onPressed: () => _focusNode.unfocus())
          ])
        ]));
  }

  final FocusNode _focusNode = new FocusNode();

  <strong i="10">@override</strong>
  void initState() {
    super.initState();
    _focusNode.addListener(() {
      setState(() {});
      print('Has focus: $_focusNode.hasFocus');
    });
  }

ํ”Œ๋Ÿฌํ„ฐ ๋‹ฅํ„ฐ

[โˆš] Flutter (on Microsoft Windows [Version 10.0.16299.192], locale en-US, channel dev)
    โ€ข Flutter version 0.0.21 at c:\sdks\flutter
    โ€ข Framework revision 2e449f06f0 (2 days ago), 2018-01-29 14:26:51 -0800
    โ€ข Engine revision 6921873c71
    โ€ข Tools Dart version 2.0.0-dev.16.0
    โ€ข Engine Dart version 2.0.0-edge.da1f52592ef73fe3afa485385cb995b9aec0181a

[โˆš] Android toolchain - develop for Android devices (Android SDK 27.0.2)
    โ€ข Android SDK at C:\Users\ride4\AppData\Local\Android\sdk
    โ€ข Android NDK location not configured (optional; useful for native profiling support)
    โ€ข Platform android-27, build-tools 27.0.2
    โ€ข Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    โ€ข Java version OpenJDK Runtime Environment (build 1.8.0_152-release-915-b01)

[โˆš] Android Studio (version 3.0)
    โ€ข Android Studio at C:\Program Files\Android\Android Studio
    โ€ข Java version OpenJDK Runtime Environment (build 1.8.0_152-release-915-b01)

[โˆš] IntelliJ IDEA Community Edition (version 2017.2)
    โ€ข Flutter plugin version 19.1
    โ€ข Dart plugin version 172.4343.25

[โˆš] Connected devices
    โ€ข Android SDK built for x86 โ€ข emulator-5554 โ€ข android-x86 โ€ข Android 7.1.1 (API 25) (emulator)
look material design framework new feature

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ์ด๊ฒƒ์ด ๊ท€๊ฒฐ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

FocusScope.of(context).requestFocus(new FocusNode());

#7247์˜ ์ค‘๋ณต์œผ๋กœ ๋‹ซ๊ธฐ
์•„๋งˆ๋„ ๋˜ํ•œ #20227

>๋ชจ๋“  ๋Œ“๊ธ€

๋‚˜๋Š” ์ด๊ฒƒ์ด ๊ท€๊ฒฐ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

FocusScope.of(context).requestFocus(new FocusNode());

#7247์˜ ์ค‘๋ณต์œผ๋กœ ๋‹ซ๊ธฐ
์•„๋งˆ๋„ ๋˜ํ•œ #20227

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰