[英]Grab the textfield data from another stateful widget class
我試圖通過訪問狀態類的方法來查看另一個類的文本字段數據。 單擊按鈕時,我想在另一個類中獲取文本字段值。
我嘗試調用應該返回字符串的方法,但是當我嘗試從其他類訪問它時卻沒有任何值。
class TitleWidget extends StatefulWidget{
final IncidentComponent data;
String titleVal;
TitleWidget(this.data);
@override
TitleWidgetState createState() => TitleWidgetState();
}
class TitleWidgetState extends State<TitleWidget>{
final titleController = TextEditingController();
titleTextValue() {
print("title text field: ${titleController.text}");
return titleController.text;
}
@override
void initState() {
super.initState();
titleController.addListener(titleTextValue);
}
@override
Widget build(BuildContext context) {
return TextField(
controller: titleController);
}
}
我試圖訪問上述方法以在另一個類中獲取字符串。
FloatingActionButton.extended(
label: Text("Complete Report",
onPressed: () { print('title is ' + TitleWidgetState().titleTextValue()); }
)
當我按下其他班級的FAB按鈕時,我一直期望文本字段值。 但是我從其他類方法中什么也沒得到。 但是titleTextValue()方法的print語句將打印正確的文本字段值。
試試這個全球商店。 通過各種物體可以節省大量的工作。 最終,您需要掌握集團。
import 'package:flutter_web/material.dart';
import 'package:flutter_web/widgets.dart';
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new Scaffold(
body: new Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
new MyStatefulWidget1(),
new MyStatefulWidget2(),
],
),
),
);
}
}
class MyStatefulWidget1 extends StatefulWidget {
State createState() => new MyStatefulWidget1State();
}
class MyStatefulWidget1State extends State<MyStatefulWidget1> {
final titleController = TextEditingController();
titleTextValue() {
print("title text field: ${titleController.text}");
return titleController.text;
}
@override
Widget build(BuildContext context) {
store.set("titleTextValue", titleTextValue);
return TextField(controller: titleController);
}
}
class MyStatefulWidget2 extends StatefulWidget {
State createState() => new MyStatefulWidget2State();
}
class MyStatefulWidget2State extends State<MyStatefulWidget2> {
String _text = 'PRESS ME';
@override
Widget build(BuildContext context) {
var titleTextValue = store.get("titleTextValue");
return new Center(
child: new RaisedButton(
child: new Text(_text),
onPressed: () {
print('title is ' + titleTextValue());
}),
);
}
}
class GlobalState {
final Map<dynamic, dynamic> _data = <dynamic, dynamic>{};
static GlobalState instance = GlobalState._();
GlobalState._();
set(dynamic key, dynamic value) => _data[key] = value;
get(dynamic key) => _data[key];
}
final GlobalState store = GlobalState.instance;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.