我正在尋找一些簡單的技術來清理和驗證用戶輸入TextFormField
有了這個,我還想保持代碼的結構和可讀性。
是否有任何解決方案可以在輸入時執行一系列消毒劑(例如,Trim、ToLowerCase)和驗證器(例如,需要值、有效電子郵件)TextFormField?
謝謝你
uj5u.com熱心網友回復:
pub.dev validation_chain上有一個包
它為清理和驗證不同形式的資料提供了有用的 API(可能是來自用戶的 TextInput 或Map<dynamic, dynamic>來自請求/回應正文的資料)
我們將看到在 Flutter中使用SanitizationChain& ValidationChainAPI 的示例。TextFormField
然而,這個包還提供了更多涵蓋不同用例的 API。它也可以與基于服務器端/CLI 的 Dart 應用程式一起使用。(您可以參考軟體包檔案以獲取更多詳細資訊。)
import 'package:flutter/material.dart';
import 'package:validation_chain/validation_chain.dart';
void main() {
runApp(App());
}
class App extends StatelessWidget {
App({super.key});
final _formKey = GlobalKey<FormState>();
final _email = TextEditingController(text: ' [email protected] ');
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Sanitization Chain Example'),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Form(
key: _formKey,
child: TextFormField(
controller: _email,
decoration: const InputDecoration(labelText: 'Email'),
validator: ValidationChain(
[compulsory, tooShort, tooLong],
).validate,
onSaved: (value) {
_email.text = SanitizerChain(
[trim, lowerCase],
).sanitize(value) ??
'';
},
),
),
const SizedBox(height: 32),
ElevatedButton(
child: const Text('Sanitize'),
onPressed: () {
_formKey.currentState!.save();
_formKey.currentState!.validate();
},
),
],
),
),
);
}
/* -----Utility functions----- */
String? trim(String? value) {
return value?.trim();
}
String? lowerCase(String? value) {
return value?.toLowerCase();
}
String? compulsory(String? value) {
return (value?.isEmpty ?? true) ? 'Required' : null;
}
String? tooShort(String? value) {
return value != null && value.length < 5 ? 'Too Short' : null;
}
String? tooLong(String? value) {
return value != null && value.length > 10 ? 'Too Long' : null;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/521180.html
標籤:扑镖验证文本域消毒
下一篇:根據條件將值放入列中的資料驗證
