📅  最后修改于: 2023-12-03 14:51:40.304000             🧑  作者: Mango
在编写应用程序时,有时我们希望多个小部件共享相同的全局键并显示相应的文本字段。这可以通过使用Flutter的ValueListenableBuilder
小部件和ValueNotifier
类来实现。
首先,我们需要在应用程序的顶层创建一个ValueNotifier
对象。这个对象将保存全局键的值,并在值发生变化时通知所有订阅者。
final ValueNotifier<String> globalText = ValueNotifier<String>("Initial text");
在需要显示文本字段的小部件中,我们可以使用ValueListenableBuilder
来监听globalText
对象的变化,并根据新的值构建界面。
ValueListenableBuilder(
valueListenable: globalText,
builder: (BuildContext context, String value, Widget? child) {
return Text(value);
},
)
在上面的例子中,Text
小部件显示了globalText
的当前值。
当我们想要修改全局文本字段时,我们只需要更新globalText
的值。这会触发ValueListenableBuilder
小部件重新构建,并更新相应的界面。
globalText.value = "New text";
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
final ValueNotifier<String> globalText = ValueNotifier<String>("Initial text");
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Multiple Widgets with Global Key Shake Text Field'),
),
body: Column(
children: [
TextField(
key: GlobalKey(),
),
ElevatedButton(
onPressed: () {
globalText.value = 'Shake all TextFields';
},
child: Text('Shake All TextFields'),
),
ValueListenableBuilder(
valueListenable: globalText,
builder: (BuildContext context, String value, Widget? child) {
return Text(value);
},
),
],
),
),
);
}
}
在这个例子中,我们创建了一个具有全局键的文本字段,并在按钮按下时改变全局文本字段的值。ValueListenableBuilder
小部件会根据全局文本字段的新值更新相应的界面。