Не удается найти «аргументы» в Navigator.pushNamed при переходе на следующий экран - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь переместить экран регистрации на экран OTP. С экрана регистрации мне нужно передать идентификатор электронной почты на экран OTP. Теперь я использую ниже, но не могу разрешить аргументы: параметр в этом.

Navigator.pushNamed(context, Routes.ROUTE_OTP,arguments:{"id": 'email'});

Искал так много обучающих программ, которые они там дали, чтобы использовать аргументы :( но мой плохой, я не могу найти: (

1 Ответ

1 голос
/ 10 июля 2019

Ниже приведен простой пример, демонстрирующий ваши требования:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      onGenerateRoute: (settings) {
        WidgetBuilder builder;
        Map arguments = settings.arguments;

        switch (settings.name) {
          case '/':
            builder = (
              BuildContext _,
            ) =>
                SignUp();
            break;
          case '/otp':
            builder = (
              BuildContext _,
            ) =>
                Otp(id: arguments["id"]);
            break;
          default:
            return null;
        }
        return MaterialPageRoute(builder: builder, settings: settings);
      },
    );
  }
}

class SignUp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Signup"),
      ),
      body: Center(
        child: FlatButton(
            onPressed: () {
              Navigator.of(context).pushNamed(
                "/otp",
                arguments: {
                  "id": "email@email.com",
                },
              );
            },
            child: Text("SEND OTP")),
      ),
    );
  }
}

class Otp extends StatelessWidget {
  final String id;

  Otp({this.id});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("OTP"),
      ),
      body: Center(
        child: Text(id),
      ),
    );
  }
}

gif

...