我正在嘗試構建一個用于資料捕獲的表單,我有一些實體,其中某些表單部分具有重復的文本欄位。我想減少冗余并從先前鍵入的文本欄位(如第 1 部分)中復制資料,并將其顯示在同一表單的第 20 部分中的重復文本欄位欄位中。我只管理了下面的示例,您必須單擊按鈕才能將文本欄位推送到另一個欄位。編碼
import "package:flutter/material.dart";
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Home(),
);
}
}
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
final titleController = TextEditingController();
String text = "No Value Entered";
void _setText() {
setState(() {
text = titleController.text;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('GeeksforGeeks'),
backgroundColor: Colors.green,
),
body: Column(
children: [
Padding(
padding: const EdgeInsets.all(15),
child: TextField(
decoration: InputDecoration(labelText: 'Title'),
controller: titleController,
),
),
SizedBox(
height: 8,
),
RaisedButton(
onPressed: _setText,
child: Text('Submit'),
elevation: 8,
),
SizedBox(
height: 20,
),
Text(text),
],
),
);
}
}
如何通過將一個文本欄位值傳遞給另一個文本欄位而不按提交按鈕而不更改整個表單的狀態來實作這一點?

uj5u.com熱心網友回復:
在方法listener上注冊一個。TextEditingControllerinitState
然后在dispose方法上處理它。
像這樣:
import "package:flutter/material.dart";
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Home(),
);
}
}
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
final TextEditingController titleController = TextEditingController();
String text = "No Value Entered";
@override
void initState() {
titleController.addListener(_setText);
super.initState();
}
@override
void dispose() {
titleController.dispose();
super.dispose();
}
void _setText() {
setState(() {
text = titleController.text;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('GeeksforGeeks'),
backgroundColor: Colors.green,
),
body: Column(
children: [
Padding(
padding: const EdgeInsets.all(15),
child: TextField(
decoration: InputDecoration(labelText: 'Title'),
controller: titleController,
),
),
SizedBox(
height: 8,
),
RaisedButton(
onPressed: _setText,
child: Text('Submit'),
elevation: 8,
),
SizedBox(
height: 20,
),
Text(text),
],
),
);
}
}
uj5u.com熱心網友回復:
您只需將偵聽器添加到相應的 textControllers 中,如下所示:
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
final titleController = TextEditingController();
final titleController2 = TextEditingController();
String text = "No Value Entered";
@override
void initState() {
super.initState();
titleController.addListener(() {
setState(() {
titleController2.text = titleController.text;
});
});
titleController2.addListener(() {
setState(() {
titleController.text = titleController2.text;
});
});
}
@override
void dispose() {
titleController.dispose();
titleController2.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('GeeksforGeeks'),
backgroundColor: Colors.green,
),
body: Column(
children: [
Padding(
padding: const EdgeInsets.all(15),
child: TextField(
decoration: InputDecoration(labelText: 'Title'),
controller: titleController,
),
),
Padding(
padding: const EdgeInsets.all(15),
child: TextField(
decoration: InputDecoration(labelText: 'Title'),
controller: titleController2,
),
),
SizedBox(
height: 8,
),
// RaisedButton(
// onPressed: _setText,
// child: Text('Submit'),
// elevation: 8,
// ),
// SizedBox(
// height: 20,
// ),
// Text(text),
],
),
);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/337352.html
上一篇:型別“String”不是型別轉換中“List<String>”型別的子型別?
下一篇:顫振:如何洗掉mapbox徽標
