如何将参数重新传递给另一个屏幕?
How to re-pass a parameter to another screen?
最后一个屏幕采用前一个屏幕的颜色参数 - arg。我需要当你点击最后一个屏幕上的按钮时,这个占据最后一个屏幕的参数再次传递给 HomeScreenWidget。如何实施?
我的代码:
class _TextValueScreenState extends State<TextValueScreen> {
// controller for textField
TextEditingController textController = TextEditingController();
@override
void dispose() {
textController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
//get arg from ColorPickerScreen
var arg = ModalRoute.of(context)!.settings.arguments as ColorArguments;
return Scaffold(
backgroundColor: arg.color,
appBar: AppBar(
title: const Text('Enter a value'),
centerTitle: true,
),
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextField(
controller: textController,
keyboardType: TextInputType.number,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
style: TextStyle(color: Colors.black),
decoration: const InputDecoration(
hintText: 'Enter a value',
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2)),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2))),
),
const SizedBox(
height: 20,
),
ElevatedButton(
onPressed: () {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (BuildContext context) =>
HomeScreenWidget(valueText: textController.text),
),
(route) => false,
);
},
child: const Text('Done'),
)
],
),
),
);
}
}
Main.dart:
routes: {
HomeScreenWidget.routeName: (context) => HomeScreenWidget(valueText: '',),
ColorPickerWidget.routeName: (context) => ColorPickerWidget(),
TextValueScreen.routeName: (context) => TextValueScreen(),
},
initialRoute: HomeScreenWidget.routeName,
您可以让 HomeScreenWidget
在构造函数中使用 ColorArguments
参数,如下所示:
class HomeScreenWidget{
final ColorArguments? colorArgs;
final String valueText;
HomeScreenWidget({
Key? key,
required this.valueText;
required this.colorArgs;
});
}
然后像这样传递到页面:
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (BuildContext context) => HomeScreenWidget(valueText: textController.text, colorArgs: arg),), (route) => false,
);
最后一个屏幕采用前一个屏幕的颜色参数 - arg。我需要当你点击最后一个屏幕上的按钮时,这个占据最后一个屏幕的参数再次传递给 HomeScreenWidget。如何实施?
我的代码:
class _TextValueScreenState extends State<TextValueScreen> {
// controller for textField
TextEditingController textController = TextEditingController();
@override
void dispose() {
textController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
//get arg from ColorPickerScreen
var arg = ModalRoute.of(context)!.settings.arguments as ColorArguments;
return Scaffold(
backgroundColor: arg.color,
appBar: AppBar(
title: const Text('Enter a value'),
centerTitle: true,
),
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextField(
controller: textController,
keyboardType: TextInputType.number,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
style: TextStyle(color: Colors.black),
decoration: const InputDecoration(
hintText: 'Enter a value',
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2)),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2))),
),
const SizedBox(
height: 20,
),
ElevatedButton(
onPressed: () {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (BuildContext context) =>
HomeScreenWidget(valueText: textController.text),
),
(route) => false,
);
},
child: const Text('Done'),
)
],
),
),
);
}
}
Main.dart:
routes: {
HomeScreenWidget.routeName: (context) => HomeScreenWidget(valueText: '',),
ColorPickerWidget.routeName: (context) => ColorPickerWidget(),
TextValueScreen.routeName: (context) => TextValueScreen(),
},
initialRoute: HomeScreenWidget.routeName,
您可以让 HomeScreenWidget
在构造函数中使用 ColorArguments
参数,如下所示:
class HomeScreenWidget{
final ColorArguments? colorArgs;
final String valueText;
HomeScreenWidget({
Key? key,
required this.valueText;
required this.colorArgs;
});
}
然后像这样传递到页面:
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (BuildContext context) => HomeScreenWidget(valueText: textController.text, colorArgs: arg),), (route) => false,
);