Как использовать условный оператор в onTap

-4

У меня есть проблема, связанная с оператором if в dart. Я хочу, чтобы пользователь коснулся города, чтобы перейти на новый экран. этот код работает отлично


class citySec extends StatelessWidget {
Widget getListView(BuildContext context) {
var listView = ListView(
children: <Widget>[
Text(
"choose ur city:",
textDirection: TextDirection.rtl,
textAlign: TextAlign.center,
),
ListTile(
leading: Icon(Icons.location_city),
title: Text("Toronto ", textDirection: TextDirection.rtl),

onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TorontoUniversitySection(),
),
);
},
),
],
);
return listView;
}

@override
Widget build(BuildContext context) {
return Scaffold(body: getListView(context));
}
}

Поскольку у меня длинный список городов, и предыдущий код сделает мой код очень длинным, поэтому мне пришлось изменить свой код. Однако я столкнулся с некоторыми ошибками в операторах if, вот что я сделал до сих пор.


import 'package:flutter/material.dart';
import 'package:rate/screens/firstScreen.dart';

void main() {
runApp(MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Rate',
home: Scaffold(
appBar: AppBar(
title: Text("jgfnjfnj ", textDirection: TextDirection.rtl),
),
body: ListDisplay(),
),
));
}
class ListDisplay extends StatelessWidget {
List<String> litems = ["Toronto","NewYork","London","Riyadh","Dubai","Istanbul"];

@override
Widget build (BuildContext ctxt) {
return new Scaffold(
appBar: AppBar(title: Text("Please Choose your city: ", textDirection: TextDirection.ltr,),
),

body: new ListView.builder
(
itemCount: litems.length,

itemBuilder: (BuildContext ctxt, int index) {

return new ListTile(
leading: Icon(Icons.location_city),
title: Text(litems[index], textDirection: TextDirection.rtl),

onTap: () {
// begin of all IF statements

if (litems.contains("Totonto")){
Navigator.push(
ctxt,
MaterialPageRoute(

builder: (ctxt) => TorontoUniversitySection()
),
);

}
if (litems.contains("London")){
Navigator.push(
ctxt,
MaterialPageRoute(

builder: (ctxt) => LondonUniversitySection()
),
);

}

// end of all If statements

},
);

}
)
);
}
}

спросил(а) 2019-01-24T17:15:00+03:00 1 год, 6 месяцев назад
0
78

например, когда я нажму на Торонто, я попаду в LondonUniversitySection()

Это связано с тем, что в ваших операторах if вы проверяете, содержит ли ваш список Торонто/Лондон, а не является ли в настоящий момент нажатым один из них - Торонто/Лондон. Замена litems.contains("x") на litems[index] == "x" поможет. Здесь отредактированный фрагмент:

    return new ListTile(
leading: Icon(Icons.location_city),
title: Text(litems[index], textDirection: TextDirection.rtl),
onTap: () {
if (litems[index] == "Toronto") {
Navigator.push(
ctxt,
MaterialPageRoute(builder: (ctxt) => TorontoUniversitySection()),
);
} else if (litems[index] == "London") {
Navigator.push(
ctxt,
MaterialPageRoute(builder: (ctxt) => LondonUniversitySection()));
}
},
);

Кроме того, я рекомендую использовать switch или else-if для этого, а не кучу ifs.

ответил(а) 2019-01-24T23:11:00+03:00 1 год, 6 месяцев назад
40

Попробуйте onTap: litems.contains("Totonto")? Navigator.push( ctxt, MaterialPageRoute( builder: (ctxt) => TorontoUniversitySection()), ): null onTap: litems.contains("Totonto")? Navigator.push( ctxt, MaterialPageRoute( builder: (ctxt) => TorontoUniversitySection()), ): null

ответил(а) 2019-01-24T17:21:00+03:00 1 год, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема