iT邦幫忙

2022 iThome 鐵人賽

DAY 3
0
Mobile Development

在 Flutter 開發旅程的手札系列 第 3

Flutter Widget - TextField 的應用介紹

  • 分享至 

  • xImage
  •  
  1. 設定預設值
    使用TextField時必須使用Stateful Widget,不能使用Stateless Widget,避免輸入的文字沒有被存下來,當我們在開發編輯畫面時,最常見的就是需要把原本使用者填入的資訊放入到輸入框內

Widget build(BuildContext context)上方輸入下方程式碼

//建立controller變數
  TextEditingController controller = TextEditingController();
//設定controller的預設值,present text可以換成自己要替換的文字
  @override
  void initState() {
    super.initState();
    controller.text = "預設文字";
  }

https://ithelp.ithome.com.tw/upload/images/20220918/20152683WcLaHo5fq8.png
TextField內使用controller,並將步驟一建立的controller變數放入

  TextField(controller: controller),

  1. 鍵盤樣式改為數字

當我們開發時會遇到數值只需要輸入數值,這時候我們能透過鍵盤樣式,避免讓使用者輸入更多奇怪的值

const TextField(keyboardType: TextInputType.number)

https://ithelp.ithome.com.tw/upload/images/20220918/20152683IAhNbOq2Bt.png

若想要在iOS的number keyboard上有done這一個按鍵,可以這麼做

import 'dart:io';

TextField(keyboardType: Platform.isIOS ? const TextInputType.numberWithOptions(signed: true, decimal: true) : TextInputType.number),

https://ithelp.ithome.com.tw/upload/images/20220918/20152683HAfy4ZJEzb.png


  1. TextField內使用Icon

TextField前面增加Icon

const TextField(decoration: InputDecoration(prefixIcon: Icon(Icons.done)))

https://ithelp.ithome.com.tw/upload/images/20220918/20152683LqhPacqCjw.png

TextField後面增加Icon

const TextField(decoration: InputDecoration(suffixIcon: Icon(Icons.clear)))

https://ithelp.ithome.com.tw/upload/images/20220918/20152683OsOtfh97m7.png


  1. 在TextField新增提示的文字
const TextField(decoration: InputDecoration(hintText: '提示的文字'))

https://ithelp.ithome.com.tw/upload/images/20220918/20152683YXKMTUNY8C.png


  1. 在TextField新增錯誤訊息
const TextField(decoration: InputDecoration(errorText: '錯誤訊息'))

https://ithelp.ithome.com.tw/upload/images/20220918/20152683gqthRmMI89.png


  1. 補充應用:設定APP內的所有頁面,當有鍵盤跳出來,點擊空白處隱藏
    放置檔案:main.dart
    重點:要將控制的程式碼放在最外層,讓Listener能夠間聽到所有的事件
    void main() {
      runApp(const MyApp());
    }

    class MyApp extends StatelessWidget {
      const MyApp({Key? key}) : super(key: key);

      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        return Listener(
          onPointerUp: (_) {
            final FocusScopeNode currentFocus = FocusScope.of(context);
            if (!currentFocus.hasPrimaryFocus && currentFocus.focusedChild != null) {
              currentFocus.focusedChild?.unfocus();
            }
          },
          child: const MaterialApp(
            home: MyHomePage(title: 'Flutter Demo Home Page'),
          ),
        );
      }
    }

Demo 有鍵盤跳出來,點擊空白處隱藏


上一篇
Flutter Widget - Container 在開發上的實用語法
下一篇
Flutter Package - 製作多國語系
系列文
在 Flutter 開發旅程的手札30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言