Как отобразить результаты запроса MySQL на основе введенного значения TextField
Я новичок во Flutter и хотел бы узнать, как отображать результаты запроса MySQL на основе значения TextField, введенного пользователем.
Поскольку я новичок во Flutter, я скопировал кусочки и фрагменты из других руководств, чтобы попытаться достичь результата.
Некоторая помощь была бы чрезвычайно благодарна, так как я уже несколько недель борюсь с этим. Это повторное редактирование моего вопроса, поскольку я пытаюсь быть немного более описательным, надеясь, что кто-то может попросить помощи. Спасибо
Это моя таблица MySQL:
Это мой файл PHP (flutter_data.PHP)
$con = mysqli_connect($HostName, $HostUser, $HostPass, $DatabaseName);
$json = file_get_contents('php://input');
$obj = json_decode($json,true);
$name = $obj['name'];//this value coming from TextField ( i hope :-))
$CheckSQL = "SELECT * FROM Student_data WHERE student_name = '$name'";
$result = $con->query($CheckSQL);
if ($result->num_rows >0) {
while($row[] = $result->fetch_assoc()) {
$Item = $row;
$json = json_encode($Item, JSON_NUMERIC_CHECK);
}
}else {
echo "No Results Found.";
}
echo $json;
$con->close();
?>
Я провел тест, чтобы убедиться, что мой файл PHP работает без предложения WHERE. Ниже запущен мой файл PHP.
Мой главный экран, состоящий из TextField, Image, FlatButton
Установка переменных класса:
int studentID;
String studentName;
int studentPhoneNumber;
String studentSubject;
Studentdata({
this.studentID,
this.studentName,
this.studentPhoneNumber,
this.studentSubject
});
factory Studentdata.fromJson(Map<String, dynamic> json) {
return Studentdata(
studentID: json['id'],
studentName: json['student_name'],
studentPhoneNumber: json['student_phone_number'],
studentSubject: json['student_class']
);
}
}
Я установил текстовое поле для захвата значения onChanged
onChanged: (value) {
setState(() {
name = value;
Моя FlatButton с onPressed:
onPressed: () {
var route = new MaterialPageRoute(
builder: (BuildContext context) => new NextPageState(name.toString(),
));
Navigator.of(context).push(route);
},
Ниже код для NextPage:
class NextPageState extends StatefulWidget {
final String name;
NextPageState(this.name);
@override
State<StatefulWidget> createState() {
return NextPage(this.name);
}
}
class NextPage extends State<NextPageState> {
final String name ;
NextPage(this.name);
// API URL
var url = 'https://www.datashine.co.za/flutter_data.php';
Future<List<Studentdata>> fetchStudent() async {
var data = {'name': name};
var response = await http.post(url, body: json.encode(data));
if (response.statusCode == 200) {
print(response.statusCode);
final items = json.decode(response.body).cast<Map<String, dynamic>>();
List<Studentdata> studentList = items.map<Studentdata>((json) {
return Studentdata.fromJson(json);
}).toList();
return studentList;
}
else {
throw Exception('Failed to load data from Server.');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text(name),
automaticallyImplyLeading: true,
leading: IconButton(icon:Icon(Icons.arrow_back),
onPressed:() => Navigator.pop(context, false),
)
),
body: FutureBuilder<List<Studentdata>>(
future: fetchStudent(),
builder: (context, snapshot) {
if (!snapshot.hasData) return Center(
child: CircularProgressIndicator()
);
return ListView(
children: snapshot.data
.map((data) => Column(children: <Widget>[
GestureDetector(
onTap: (){print(data.studentName);},
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.fromLTRB(0, 20, 0, 10),
child: Text('Name = ' + data.studentName.toString(),
style: TextStyle(fontSize: 21))),
]),)
],))
.toList(),
);
},
)
));
}
}
После запуска приложения кажется, что результаты не возвращаются. Так что я понятия не имею, как исправить. Индикатор Circularprogress просто загружается и зависает.