我是新手,我尝试从另一个文件中的customWidget更新main.dart中的变量。 我在互联网上搜索,但有点迷茫。
如何使用用户输入的值更新变量userDistance? 我的小部件结构正确吗?还是必须是无状态或有状态的?
Main.dart:
class HomeController extends StatefulWidget {
HomeController({Key key, this.title}) : super(key: key);
final String title;
@override
_HomeControllerState createState() => _HomeControllerState();
}
class _HomeControllerState extends State<HomeController> {
// ************************************
// Variable
// ************************************
int userDistance = null;
final _formKey = GlobalKey<FormState>();
// ************************************
// Initialisation
// ************************************
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: (() => FocusScope.of(context).requestFocus(FocusNode())),
child: Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: FutureBuilder(
future: loadJson(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return CircularProgressIndicator();
}
return SingleChildScrollView(
padding: EdgeInsets.all(24),
child: Form(
key: _formKey,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
FormValidatorWidgets.buildDistance(), // => Here I call my external widget
...
还有我的customWidget:
import 'package:flutter/material.dart';
class FormValidatorWidgets{
static buildDistance() {
return TextFormField(
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: "Distance",
hintText: "Enter a distance",
),
keyboardType: TextInputType.number,
validator: (String value) {
int distance = int.tryParse(value);
if (distance == null) {
return "Distance is required";
}
if (distance <= 0) {
return "Distance must be greater than zero";
}
},
onSaved: (String value) {
userDistance = int.tryParse(value);
},
);
}
}
如何更新我的变量userDistance?
答案 0 :(得分:0)
为您的FormValidatorWidgets添加回调函数
class FormValidatorWidgets{
static buildDistance(FormFieldSetter<String> onSaved) { // onSaved is a callback
return TextFormField(
...
onSaved: onSaved,
);
}
}
然后以您的形式:
Column(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: <Widget>[
FormValidatorWidgets.buildDistance(
(String value) {
userDistance = int.tryParse(value);
},
),
...