Передача 2 переменных с 2 различных экранов на 1 экран - PullRequest
0 голосов
/ 19 июня 2020

У меня есть классы Home (), Category (), Region ()

Чтобы добавить категорию, я перехожу к Category (), а чтобы добавить регион, я перехожу к Region ()

Я хочу передать значения cat внутри категории и значение города внутри региона на главный экран, но я получаю эту ошибку:

Compiler message:
lib/Screens/regions.dart:32:95: Error: Too few positional arguments: 2 required, 1 given.
                Navigator.pushReplacement(context, MaterialPageRoute(builder: (context)=>Home(city)));

Вот главный экран:

 class Home extends StatefulWidget {

  final String sRegion;
  final String sCategory;

  Home(this.sRegion,this.sCategory, {Key key}):super(key: key);
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
 @override
  Widget build(BuildContext context) {
return Directionality(
  textDirection: TextDirection.rtl,
  child: Scaffold(
    body: Center(
      child: Text(cat + city),
    ),
  ),
);
  }
}

Экран категории:

 class Category extends StatefulWidget {

  @override
  _CategoryState createState() => _CategoryState();
}

class _CategoryState extends State<Category> {
 @override
  Widget build(BuildContext context) {
 String cat = 'General';
return Directionality(
  textDirection: TextDirection.rtl,
  child: Scaffold(
    body: Center(
      child: FlatButton( onPressed: (){
            Navigator.pushReplacement(context, MaterialPageRoute(builder: (context)=>Home(cat)));
          },),
    ),
  ),
);
  }
}

Экран области:

     class Region extends StatefulWidget {

  @override
  _RegionState createState() => _RegionState();
}

class _RegionState extends State<Region> {
 @override
  Widget build(BuildContext context) {
 String city = 'London';
return Directionality(
  textDirection: TextDirection.rtl,
  child: Scaffold(
    body: Center(
      child: FlatButton( onPressed: (){
            Navigator.pushReplacement(context, MaterialPageRoute(builder: (context)=>Home(city)));
          },),
    ),
  ),
);
  }
}

1 Ответ

1 голос
/ 19 июня 2020

Home имеет два обязательных позиционных параметра (sRegion и sCategory). Это не обязательно, и вы должны их предоставить.

Navigator.pushReplacement(context, 
     MaterialPageRoute(builder: (context)=>Home(city, cat)));

Обратите внимание, что я добавил cat в конструктор Home. Если какой-либо из этих параметров является необязательным, вам необходимо переписать подпись конструктора.

Если вы хотите сделать любой из этих параметров необязательным, преобразуйте их в именованные аргументы

Home({this.sRegion,this.sCategory, Key key}):super(key: key);
...