Lặn sâu vào văn bản rung

Hướng dẫn về sức mạnh của TextFields trong Flutter

Đây là bài viết thứ hai trong một loạt các bài viết giải thích chi tiết một số tiện ích mà Flutter cung cấp và các mẹo và thủ thuật cho chúng. Trong bài viết trước, chúng tôi đã tìm hiểu chi tiết về tiện ích ListView. Trong bài viết này, chúng tôi đi sâu vào tiện ích Flutter TextField một cách toàn diện và tìm hiểu các tính năng và các tùy chỉnh có thể có của nó.

Giới thiệu về TextField

Một widget TextField cho phép thu thập thông tin từ người dùng. Mã cho TextField cơ bản đơn giản như:

Trương Văn bản()

Điều này tạo ra một TextField cơ bản:

Lấy thông tin từ TextField

Vì TextField không có ID như trong Android, văn bản không thể được truy xuất theo yêu cầu và thay vào đó phải được lưu trữ trong một biến khi thay đổi hoặc sử dụng bộ điều khiển.

  1. Cách dễ nhất để làm điều này là sử dụng phương thức onChanged và lưu trữ giá trị hiện tại trong một biến đơn giản. Đây là mã mẫu cho nó:
Chuỗi giá trị = "";
Trương Văn bản(
  onChanged: (văn bản) {
    giá trị = văn bản;
  },
)

2. Cách thứ hai để làm điều này là sử dụng TextEditingContoder. Bộ điều khiển được gắn vào TextField và cũng cho phép chúng tôi nghe và điều khiển văn bản của TextField.

Trình điều khiển TextEditingControll = TextEditingCont điều khiển ();
Trương Văn bản(
  bộ điều khiển: bộ điều khiển,
)

Và chúng ta có thể lắng nghe những thay đổi bằng cách sử dụng

điều khiển.addListener (() {
  // Làm gì đó ở đây
});

Và nhận hoặc đặt giá trị bằng cách sử dụng

in (control.text); // In giá trị hiện tại
control.text = "Văn bản demo"; // Đặt giá trị mới

Các cuộc gọi lại khác từ TextField

Tiện ích TextField cũng cung cấp các cuộc gọi lại khác như

  1. onEditingCompleted
  2. onSubmit
onEditingComplete: () {},
onSubmit: (giá trị) {},

Đây là các cuộc gọi lại được gọi trên các hành động như khi người dùng nhấp vào nút Xong Xẻng trên iOS.

Làm việc với trọng tâm trong TextFields

Có một tiêu điểm tập trung vào một TextField có nghĩa là có một TextField hoạt động và bất kỳ đầu vào nào từ bàn phím sẽ dẫn đến dữ liệu được nhập vào TextField tập trung.

1. Làm việc với lấy nét tự động

Để tự động lấy nét trên TextField khi tiện ích được tạo, hãy đặt trường tự động lấy nét thành đúng.

Trương Văn bản(
  tự động lấy nét: đúng,
),

Điều này đặt trọng tâm vào TextField theo mặc định.

Theo mặc định, trọng tâm chuyển sang TextField

2. Làm việc với các thay đổi tập trung tùy chỉnh

Điều gì sẽ xảy ra nếu chúng ta muốn thay đổi sự tập trung vào nhu cầu và không chỉ tự động lấy nét? Vì chúng tôi cần một số cách để tham khảo TextField mà chúng tôi muốn tập trung vào tiếp theo, chúng tôi đính kèm FocusNode vào TextField và sử dụng nó để chuyển trọng tâm.

// Khởi tạo bên ngoài phương thức xây dựng
FocusNode nodeOne = FocusNode ();
FocusNode nodeTwo = FocusNode ();
// Làm điều này trong phương thức xây dựng
Trương Văn bản(
  FocusNode: nodeOne,
),
Trương Văn bản(
  FocusNode: nodeTwo,
),
TăngButton (
  onPress: () {
    FocusScope.of (bối cảnh) .requestF Focus (nodeTwo);
  },
  con: Văn bản ("Trường tiếp theo"),
),

Chúng tôi tạo hai nút tiêu điểm và đính kèm chúng vào TextFields. Khi nhấn nút, chúng tôi sử dụng FocusScope để yêu cầu lấy nét cho TextField tiếp theo.

Lấy nét thay đổi khi nhấn nút

Thay đổi thuộc tính bàn phím cho TextFields

TextField trong Flutter cũng cho phép bạn tùy chỉnh các thuộc tính liên quan đến bàn phím.

1. Loại bàn phím

TextField cho phép bạn tùy chỉnh loại bàn phím hiển thị khi TextField được đưa vào tiêu điểm. Chúng tôi thay đổi thuộc tính keyboardType cho điều này.

Trương Văn bản(
  keyboardType: TextInputType.number,
),

Các loại là:

  1. TextInputType.text (Bàn phím hoàn chỉnh bình thường)
  2. TextInputType.number (Bàn phím số)
  3. TextInputType.emailAddress (Bàn phím bình thường với một kiểu @ @)
  4. TextInputType.datetime (Bàn phím số có chữ /
  5. TextInputType.numberWithOptions (Bàn phím số với các tùy chọn để bật chế độ ký và thập phân)
  6. TextInputType.multiline (Tối ưu hóa cho thông tin nhiều dòng)

2. TextInputAction

Thay đổi textInputAction của TextField cho phép bạn thay đổi nút hành động của chính bàn phím.

Ví dụ:

Trương Văn bản(
  textInputAction: TextInputAction.cContueAction,
),

Điều này khiến cho nút của Done Done được thay thế bằng nút Tiếp tục của:

Hoặc là

Trương Văn bản(
  textInputAction: TextInputAction.send,
),

Nguyên nhân

Danh sách đầy đủ quá lớn để hiển thị ở đây, nhưng hãy chắc chắn kiểm tra nó.

3. Tự động sửa

Bật hoặc tắt tự động sửa cho TextField cụ thể. Sử dụng trường tự động sửa để đặt cái này.

Trương Văn bản(
  tự động sửa: sai,
),

Điều này cũng sẽ vô hiệu hóa các đề xuất.

4. Viết hoa văn bản

TextField cung cấp một vài tùy chọn về cách viết hoa chữ cái trong đầu vào từ người dùng.

Trương Văn bản(
  textCapitalization: TextCapitalization.sentences,
),

Các loại là:

  1. TextCapitalization.sentences

Đây là loại viết hoa bình thường mà chúng tôi mong đợi, chữ cái đầu tiên của mỗi câu được viết hoa.

2. TextCapitalization.char character

Viết hoa tất cả các ký tự trong câu.

3. TextCapitalization.words

Viết hoa chữ cái đầu tiên của mỗi từ.

Tùy chọn kiểu văn bản, căn chỉnh và con trỏ

Flutter cho phép tùy chỉnh liên quan đến kiểu dáng và căn chỉnh văn bản bên trong TextField cũng như con trỏ bên trong TextField.

Căn chỉnh văn bản bên trong TextField

Sử dụng thuộc tính textAlign để điều chỉnh vị trí con trỏ bên trong TextField.

Trương Văn bản(
  textAlign: TextAlign.center,
),

Điều này khiến con trỏ và văn bản bắt đầu ở giữa TextField.

Điều này có các thuộc tính căn chỉnh thông thường: bắt đầu, kết thúc, trái, phải, trung tâm, biện minh.

Tạo kiểu văn bản bên trong TextField

Chúng tôi sử dụng thuộc tính kiểu để thay đổi cách văn bản bên trong TextField trông. Sử dụng nó để thay đổi màu sắc, kích thước phông chữ, v.v ... Điều này tương tự với thuộc tính kiểu trong tiện ích Văn bản, vì vậy chúng tôi sẽ không mất quá nhiều thời gian để khám phá nó.

Trương Văn bản(
  style: TextStyle (color: Colors.red, font Weight: Fontweight.w300),
),

Thay đổi con trỏ trong TextField

Con trỏ được tùy chỉnh trực tiếp từ tiện ích TextField.

Bạn được phép thay đổi màu con trỏ, chiều rộng và bán kính của các góc. Ví dụ, ở đây tôi tạo một con trỏ màu đỏ hình tròn mà không có lý do rõ ràng.

Trương Văn bản(
  con trỏ màu: Colors.red,
  con trỏRadius: Radius.circular (16.0),
  con trỏWidth: 16.0,
),

Kiểm soát kích thước và độ dài tối đa trong TextField

TextFields có thể kiểm soát số lượng ký tự tối đa được viết bên trong nó, số lượng dòng tối đa và mở rộng khi văn bản được nhập.

Kiểm soát ký tự tối đa

Trương Văn bản(
  độ dài tối đa: 4,
),

Bằng cách đặt thuộc tính maxLạng, độ dài tối đa được thi hành và bộ đếm được thêm theo mặc định vào TextField.

Tạo một TextField có thể mở rộng

Đôi khi, chúng ta cần một TextField mở rộng khi một dòng kết thúc. Trong Flutter, nó hơi kỳ lạ (nhưng dễ) để làm. Để làm điều này, chúng tôi đặt maxLines thành null, theo mặc định là 1. Cài đặt thành null không phải là điều mà chúng tôi rất quen thuộc nhưng tuy nhiên nó rất dễ thực hiện.

Lưu ý: Đặt maxLines thành giá trị trực tiếp sẽ mở rộng nó thành số dòng đó theo mặc định.

Trương Văn bản(
  maxLines: 3,
)

Văn bản che khuất

Để che khuất văn bản trong TextField, hãy đặt obscureText thành true.

Trương Văn bản(
  tối nghĩa: đúng,
),

Và cuối cùng, trang trí TextField

Cho đến bây giờ chúng tôi tập trung vào các tính năng Flutter cung cấp cho đầu vào. Bây giờ chúng tôi sẽ chuyển sang thực sự thiết kế một TextField ưa thích và không nói không với nhà thiết kế của bạn.

Để trang trí TextField, chúng tôi sử dụng thuộc tính trang trí cần lấy InputDecoration. Vì lớp InputDecoration là rất lớn, chúng tôi sẽ cố gắng nhanh chóng vượt qua hầu hết các thuộc tính quan trọng.

Sử dụng các thuộc tính gợi ý và nhãn để cung cấp thông tin cho người dùng

Cả gợi ý và nhãn là các chuỗi giúp người dùng hiểu thông tin được nhập vào TextField. Sự khác biệt là một gợi ý sẽ biến mất khi người dùng bắt đầu nhập trong khi nhãn nổi trên TextField.

DấuNhãn

Bạn có thể thêm các biểu tượng bằng cách sử dụng biểu tượng của Tiếng Việt, tiền tố và tiền tố

Bạn có thể thêm các biểu tượng trực tiếp vào TextFields. Bạn cũng có thể sử dụng prefixText và hậu tố cho Văn bản thay thế.

Trương Văn bản(
  trang trí: InputDecoration (
    biểu tượng: Biểu tượng (Biểu tượng.print)
  ),
),
Biểu tượng sử dụng thuộc tính biểu tượng
Trương Văn bản(
  trang trí: InputDecoration (
    prefixIcon: Icon (Icon.print)
  ),
),
Biểu tượng sử dụng thuộc tính prefixIcon

Tương tự như vậy đối với bất kỳ tiện ích nào khác, hãy sử dụng tiền tố của Cameron thay vì tiền tố

Để sử dụng tiện ích chung thay vì biểu tượng, hãy sử dụng trường tiền tố. Một lần nữa, không có lý do rõ ràng, hãy để Thêm một chỉ báo tiến trình vòng tròn trong TextField.

Trương Văn bản(
  trang trí: InputDecoration (
    tiền tố: ThongProTHERTheicator (),
  ),
),

Mỗi thuộc tính như gợi ý, nhãn, v.v đều có các trường kiểu tương ứng

Để tạo kiểu cho một gợi ý, hãy sử dụng một gợi ý. Để tạo kiểu cho nhãn, hãy sử dụng nhãnStyle.

Trương Văn bản(
  trang trí: InputDecoration (
    gợi ý: "Văn bản demo",
    gợi ýStyle: TextStyle (font Weight: Fontweightight300, color: Colors.red)
  ),
),

Lưu ý: Mặc dù tôi đã thực hiện nó trong ví dụ này, nhưng nhìn chung không thay đổi màu gợi ý vì nó gây nhầm lẫn cho người dùng.

Sử dụng helperText của người dùng nếu bạn không muốn có nhãn nhưng bạn muốn có một thông điệp bền bỉ cho người dùng.

Trương Văn bản(
  trang trí: InputDecoration (
    helperText: "Xin chào"
  ),
),

Sử dụng trang trí trên đường phố: null, hoặc InputDecor.collapsed để xóa phần gạch chân mặc định trên TextField

Sử dụng chúng để xóa phần gạch chân mặc định trên TextField.

Trương Văn bản(
  trang trí: InputDecoration.collapsed (gợi ý: "")
),

Sử dụng đường viền của Nhật Bản để cung cấp đường viền cho TextField

Trương Văn bản(
  trang trí: InputDecoration (
    viền: OutlineInputBorder ()
  )
),

Có một số lượng lớn trang trí bạn có thể làm hơn nữa, nhưng chúng ta có thể đi sâu vào mọi thứ trong một bài viết. Nhưng tôi hy vọng điều này làm cho nó rõ ràng để hiểu cách dễ dàng tùy chỉnh Flutter TextFields.

Điều đó cho nó bài viết này! Tôi hy vọng bạn thích nó và để lại một vài tiếng vỗ tay nếu bạn đã làm. Theo dõi tôi để biết thêm các bài viết Flutter và bình luận cho bất kỳ phản hồi nào bạn có thể có về bài viết này.

Vui lòng kiểm tra các hồ sơ và bài viết khác của tôi là tốt:

Twitter

GitHub

Một số bài viết khác của tôi