如何将参数重新传递给另一个屏幕?

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,
);