Flutter 如何根据输入的TextField值显示MySQL查询结果
我对Flatter还比较陌生,希望了解如何根据用户输入的TextField值显示MySQL查询结果 因为我是一个新手,所以我从其他教程中搜集了一些零碎的东西,试图取得成果 如果能得到一些帮助,我将不胜感激,因为我已经为此苦苦挣扎了好几个星期。这是对我问题的重新编辑,因为我试图更具描述性,希望有人能提供帮助。多谢各位 这是我的MySQL表: 这是我的PHP文件(flatter_data.PHP) 我做了一个测试,看看我的PHP文件是否可以在没有WHERE子句的情况下工作。下面运行我的PHP文件 我的主屏幕由文本字段、图像、平面按钮组成 设置类变量:Flutter 如何根据输入的TextField值显示MySQL查询结果,flutter,flutter-listview,flutter-card,Flutter,Flutter Listview,Flutter Card,我对Flatter还比较陌生,希望了解如何根据用户输入的TextField值显示MySQL查询结果 因为我是一个新手,所以我从其他教程中搜集了一些零碎的东西,试图取得成果 如果能得到一些帮助,我将不胜感激,因为我已经为此苦苦挣扎了好几个星期。这是对我问题的重新编辑,因为我试图更具描述性,希望有人能提供帮助。多谢各位 这是我的MySQL表: 这是我的PHP文件(flatter_data.PHP) 我做了一个测试,看看我的PHP文件是否可以在没有WHERE子句的情况下工作。下面运行我的PHP文件
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']
);
}
}
我的扁平按钮已按下:
onPressed: () {
var route = new MaterialPageRoute(
builder: (BuildContext context) => new NextPageState(name.toString(),
));
Navigator.of(context).push(route);
},
下一页的以下代码:
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(),
);
},
)
));
}
}
class NextPageState扩展了StatefulWidget{
最后的字符串名;
下一个妊娠期(此名称);
@凌驾
状态createState(){
返回下一页(此名称);
}
}
类下一页扩展状态{
最后的字符串名;
下一页(此名称);
//API URL
var url='1〕https://www.datashine.co.za/flutter_data.php';
Future fetchStudent()异步{
变量数据={'name':name};
var response=wait http.post(url,body:json.encode(data));
如果(response.statusCode==200){
打印(响应状态码);
final items=json.decode(response.body.cast();
List studentList=items.map((json){
返回Studentdata.fromJson(json);
}).toList();
返回学生名单;
}
否则{
抛出异常('未能从服务器加载数据');
}
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
appBar:appBar(
标题:文本(名称),
自动嵌入:正确,
前导:图标按钮(图标:图标(图标。箭头向后),
onPressed:()=>Navigator.pop(上下文,false),
)
),
正文:未来建设者(
future:fetchStudent(),
生成器:(上下文,快照){
如果(!snapshot.hasData)返回中心(
子对象:循环进程指示器()
);
返回列表视图(
子项:snapshot.data
.map((数据)=>列(子项:[
手势检测器(
onTap:(){print(data.studentName);},
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
填充物(
填充:从LTRB(0,20,0,10)开始的边缘设置,
子项:Text('Name='+data.studentName.toString(),
样式:TextStyle(fontSize:21)),
]),)
],))
.toList(),
);
},
)
));
}
}
运行应用程序时,似乎没有返回任何结果。所以我不知道如何修复。Circularprogress指示器只是加载和挂起
我已经实现了类似的功能。我根据变量中textField的onValueChanged参数将textField值存储在变量中,按下按钮时,我将该变量传递到下一个屏幕,在第二个屏幕的init状态下,我启动数据库查询。此查询将返回一个列表,并将其存储在适当的变量中,然后根据需要在listViewBuilder中进行设置。希望这个逻辑能对你有用。@Sanket Vekariya我能看到你所做的一切。由于我是一个全新的颤振者,我会通过一个示例代码更好地理解。抱歉,目前无法共享,否则我已经共享了。您可以尝试实现这一点。如果您在这方面遇到任何问题,您可以在此处发表评论以寻求帮助。:)@Sanket Vekariya。谢谢哦。我将尝试并实施。我将记录并发布进度。感谢you@SanketVekariya我重新编辑了我的问题。我面临一些问题,并发表评论寻求帮助。请您帮忙:-)我已经实现了类似的事情。我根据变量中textField的onValueChanged参数将textField值存储在变量中,按下按钮时,我将该变量传递到下一个屏幕,在第二个屏幕的init状态下,我启动数据库查询。此查询将返回一个列表,并将其存储在适当的变量中,然后根据需要在listViewBuilder中进行设置。希望这个逻辑能对你有用。@Sanket Vekariya我能看到你所做的一切。由于我是一个全新的颤振者,我会通过一个示例代码更好地理解。抱歉,目前无法共享,否则我已经共享了。您可以尝试实现这一点。如果您在这方面遇到任何问题,您可以在此处发表评论以寻求帮助。:)@Sanket Vekariya。谢谢哦。我将尝试并实施。我将记录并发布进度。感谢you@SanketVekariya我重新编辑了我的问题。我面临一些问题,并发表评论寻求帮助。请您帮忙:-)
onPressed: () {
var route = new MaterialPageRoute(
builder: (BuildContext context) => new NextPageState(name.toString(),
));
Navigator.of(context).push(route);
},
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(),
);
},
)
));
}
}