如何解决在Flutter中使用REST API搜索数据
我有一个API请求来搜索数据。如果数据通过,则响应需要将响应传递到屏幕。
API请求为post,Post方法具有文本字段参数。
如何从API获得响应并传递到屏幕?
如果状态为1,它将被执行,否则返回null。传递json响应数据需要传递到屏幕。
我正在使用dio作为http客户端
import 'dart:convert';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:my_app/src/api_provider/apis_provider.dart';
import 'package:my_app/src/model/search_doctor.dart';
import 'package:my_app/src/utils/commons.dart';
class Doctorbydetails extends StatefulWidget {
@override
_DoctorbydetailsState createState() => _DoctorbydetailsState();
}
class _DoctorbydetailsState extends State<Doctorbydetails> {
// Future<SearchDoctor> searchModel;
final API_Manager api = API_Manager();
final _searchKey = GlobalKey<FormState>();
TextEditingController _searchController = TextEditingController();
bool _isLoading = false;
int success = 1;
// @override
// void initState() {
// _searchModel = API_Manager().searchdoctor();
// print(_searchModel);
// super.initState();
// }
Future<SearchDoctor> searchdoctor(var search) async {
var searchModel;
try{
Options options = Options(
headers: {"Content-Type": "application/json"},);
Response response = await Commons.dio.post('/search_doctor',data: {
"search":search
},options: options);
setState(() {
searchModel = jsonDecode(response.data);
print(searchModel);
});
if (searchModel['status'] == success) {
if (response.statusCode == 200) {
var jsonString = response.data;
var jsonMap = json.decode(jsonString);
print(jsonMap);
searchModel = SearchDoctor.fromJson(jsonMap);
}
else if (response.statusCode == 401) {
throw Exception("Incorrect Email/Password");
} else
throw Exception('Authentication Error');
}else {
Fluttertoast.showToast(
msg:searchModel['message'],toastLength: Toast.LENGTH_SHORT,gravity: ToastGravity.BOTTOM,backgroundColor: Colors.black,textColor: Colors.white,fontSize: 16.0);
}
}catch (Exception) {
return null;
}
return searchModel;
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Container(
child: Scaffold(
backgroundColor: Color(0xff29ABE2),appBar: AppBar(
elevation: 0,backgroundColor: Color(0xff29ABE2),leading: Container(
child: IconButton(
icon: Image.asset('assets/images/home/left_arrow.png'),onPressed: () {
Navigator.pop(context);
},),title: Container(
height: 60,width: 60,child: IconButton(
icon: Image.asset('assets/images/home/patient.png'),tooltip: 'Closes application',body: SingleChildScrollView(
child: Column(
children: <Widget>[
Container(
width: double.infinity,child: Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(20)),child: Padding(
padding: EdgeInsets.all(15),child: Column(children: <Widget>[
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,children: <Widget>[
Column(
children: <Widget>[
SizedBox(
height: 5,Text(
"Search doctor",style: TextStyle(
fontSize: 18,fontFamily: "SansRegular",fontWeight: FontWeight.w100),)
],],SizedBox(
height: 10,Form(
key: _searchKey,child: Container(
width: double.infinity,child: TextFormField(
controller: _searchController,style: TextStyle(
color: Colors.black,fontFamily: 'OpenSans',decoration: InputDecoration(
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: Colors.black)),contentPadding:
EdgeInsets.only(top: 14.0),focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: Color(0xff29ABE2))),hintText:
'Search doctors by ID,Mobile number',suffixIcon: IconButton(
icon: Icon(Icons.search),onPressed: () {
})),validator: (value) {
if (value.isEmpty) {
return 'null';
}
return null;
},SizedBox(
height: 8,Row(
mainAxisAlignment: MainAxisAlignment.start,children: <Widget>[
Container(
child: FlatButton(
onPressed: () {
if (_searchKey.currentState.validate()) {
_searchKey.currentState.save();
api.searchdoctor(_searchController.text);
}
},// padding: EdgeInsets.only(left: 30,right: 30),shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(8.0),child: Text(
"Search",style: TextStyle(
color: Colors.white,fontWeight: FontWeight.w600,fontSize: 20),color: Color(0xff29ABE2),)),// Container(child: Text(),)
FutureBuilder<SearchDoctor>(
future: searchModel,builder: (context,snapshot) {
if (snapshot.connectionState ==
ConnectionState.done &&
snapshot.hasData) {
return Container();}else
return Center(
child: CircularProgressIndicator());})
])))
// ])
),));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。