我試圖呼叫這個包含FormField它的驗證器作為變數的小部件。
import 'package:flutter/material.dart';
class InputField extends StatelessWidget {
final String label, label2;
final String content, content2;
var fieldController = TextEditingController();
void fieldValidator =() {
};
InputField(
{this.label,
this.content,
this.label2,
this.content2,
this.fieldValidator
});
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
return Row(
children: <Widget>[
Expanded(
flex: 1,
child: Container(
width: 50.0,
child: Text(
"$label",
textAlign: TextAlign.left,
style: TextStyle(
fontWeight: FontWeight.w900,
color: Color.fromARGB(255, 255, 255, 255),
),
),
),
),
SizedBox(
width: 5.0,
),
Expanded(
flex: 3,
child: Container(
width: MediaQuery.of(context).size.width / 3.7,
color: Color.fromARGB(255, 255, 255, 255),
child: TextFormField(
controller: fieldController,
validator: fieldValidator,
style: TextStyle(
fontSize: 15.0,
color: Colors.black,
),
decoration: InputDecoration(
contentPadding: EdgeInsets.all(10.0),
hintText: "$content",
hintStyle: TextStyle(
color: Color.fromARGB(255, 190, 190, 190),
fontSize: 14),
fillColor: Color.fromARGB(255, 0, 0, 0),
),
),
),
),
],
);
},
);
}
}
我在小部件構造器中設定驗證器,并且每次呼叫小部件時我都想提供自己的驗證器功能:
InputField( label: "City",
content: "Please provide us your city name",
fieldValidator:(value) {
if (value == null || value.isEmpty) {
return 'This one is required';
}
return null;
},),
我在創建小部件的第一頁上收到此錯誤:
This expression has a type of 'void' so its value can't be used.
Try checking to see if you're using the correct API; there might be a function or call that returns void you didn't expect. Also check type parameters and variables which might also be void.
uj5u.com熱心網友回復:
驗證器應該來自型別FormFieldValidator<String>?而不是,void所以您的驗證器應該如下所示:
FormFieldValidator<String>? fieldValidator =(fieldValue) {
return "result";
};
uj5u.com熱心網友回復:
如果您查看TextFormField,您會看到它validator是這樣定義的,一個可以接收字串并回傳另一個字串的函式。
String? Function(String?)? validator
我建議您為您的 做同樣的fieldValidator事情,以便您的InputField定義如下所示:
class InputField extends StatelessWidget {
final String label, label2;
final String content, content2;
final String Function(String?)? fieldValidator;
var fieldController = TextEditingController();
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/445212.html
上一篇:如何在Flutter中顯示從上一個螢屏接收到的json資料
下一篇:如何在類init上呼叫函式
