Как проверить и отправить данные на другую страницу в flutter

#flutter

Вопрос:

Я новичок в flutter, и я хотел бы создать простые входные данные, передать данные на другую страницу и показать текст.

вот мой код

void main() => runApp(const MyApp());

 class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    const appTitle = 'Form Validation Demo';

    return MaterialApp(
      title: appTitle,
      home: Scaffold(
        appBar: AppBar(
          title: const Text(appTitle),
        ),
        body: const MyForm(),
      ),
    );
  }
}

class MyForm extends StatefulWidget {
  const MyForm({Key? key}) : super(key: key);

  @override
  MyFormState createState() {
    return MyFormState();
  }
}


class MyFormState extends State<MyForm> {
  final _formKey = GlobalKey<FormState>();

  @override
  Widget build(BuildContext context) {

    return Form(
      key: _formKey,
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          TextFormField(
            validator: (value) {
              if (value == null || value.isEmpty) {
                return 'Please enter some text';
              }
              return null;
            },
          ),
           ElevatedButton(
              onPressed: () {
                if (_formKey.currentState!.validate()) {
                  Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => Page2(_formKey)),
                  );

                }
              },
              child: const Text('Submit'),
            ),
        ],
      ),
    );
  }
}

class Page2 extends StatelessWidget {
  Page2(final data){
    this.data = data;
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Page 2'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(this.data),
            RaisedButton(
              child: Text('BACK'),
              onPressed: () {
                Navigator.pop(context);
              },
            ),
          ],
        ),
      ),
    );
  }
}
 

Но, наконец, это становится
Параметр «данные» не определен для типа «Страница 2».
ошибка

Есть идеи, как это сделать??

и что не так с моим кодом

Большое спасибо.

Ответ №1:

Вы можете создать глобальную переменную и легко использовать ее на другом экране. все, что вам нужно, — это обновить часть своего кода до следующего

   final _formKey = GlobalKey<FormState>();
  TextEditingController inputController = TextEditingController();
  String resu<

  class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    const appTitle = 'Form Validation Demo';

    return MaterialApp(
      title: appTitle,
      home: Scaffold(
        appBar: AppBar(
          title: const Text(appTitle),
        ),
        body: const MyForm(),
      ),
    );
  }
}

class MyForm extends StatefulWidget {
  const MyForm({Key? key}) : super(key: key);

  @override
  MyFormState createState() {
    return MyFormState();
  }
}


class MyFormState extends State<MyForm> {
  final _formKey = GlobalKey<FormState>();

  @override
  Widget build(BuildContext context) {

    return SafeArea(
  child: Scaffold(
    body: Form(
      key: _formKey,
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          TextFormField(
            controller: inputController,
            validator: (value) {
              if (value == null || value.isEmpty) {
                return 'Please enter some text';
              }
              return null;
            },
          ),
          ElevatedButton(
            onPressed: () {
              if (_formKey.currentState.validate()) {
                setState(() {
                  result = inputController.text;
                });
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => Page2()),
                );

              }
            },
            child: const Text('Submit'),
          ),
        ],
      ),
    ),
  ),
);
  }
}

class Page2 extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
  appBar: AppBar(
    title: Text('Page 2'),
  ),
  body: Center(
    child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Text(result),
        RaisedButton(
          child: Text('BACK'),
          onPressed: () {
            Navigator.pop(context);
          },
        ),
      ],
    ),
  ),
);
  }
}
 

Ответ №2:

Вы должны определить data на странице 2 что-то вроде этого :

 class Page2 extends StatelessWidget {
  final data = GlobalKey<FormState>();

  Page2(final data){
    this.data = data;
  }
 

Ответ №3:

См.раздел Отправка данных на новый экран в кулинарной книге Flutter.