Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 使用RESTAPI搜索数据';飘飘然_Flutter_Http_Dart_Dio - Fatal编程技术网

Flutter 使用RESTAPI搜索数据';飘飘然

Flutter 使用RESTAPI搜索数据';飘飘然,flutter,http,dart,dio,Flutter,Http,Dart,Dio,我有一个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:flut

我有一个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',
                    onPressed: () {
                      Navigator.pop(context);
                    },
                  ),
                ),
              ),
              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,
                                              fontFamily: "SansRegular",
                                              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());})
                                ])))
                        // ])
                        ),
                  ],
                ),
              )),
        ));
  }
}
导入'dart:convert';
进口“包装:dio/dio.dart”;
进口“包装:颤振/材料.省道”;
进口“包装:fluttoast/fluttoast.dart”;
导入“包:my_app/src/api_provider/api_provider.dart”;
导入“package:my_app/src/model/search_doctor.dart”;
导入“包:my_app/src/utils/commons.dart”;
类Doctorbydetails扩展StatefulWidget{
@凌驾
_DoctorbydetailsState createState()=>\u DoctorbydetailsState();
}
类_DoctorbydetailsState扩展状态{
//未来搜索模型;
最终API_Manager API=API_Manager();
final _searchKey=GlobalKey();
TextEditingController_searchController=TextEditingController();
bool_isLoading=false;
int成功=1;
//@覆盖
//void initState(){
//_searchModel=API_Manager().searchdoctor();
//打印(搜索模型);
//super.initState();
// }
未来搜索医生(var搜索)异步{
var模型;
试一试{
选项=选项(
标题:{“内容类型”:“应用程序/json”},
);
Response Response=wait Commons.dio.post(“/search\u doctor”,
数据:{
“搜索”:搜索
},
选择:选择);
设置状态(){
searchModel=jsonDecode(response.data);
打印(搜索模型);
});
if(searchModel['status']==成功){
如果(response.statusCode==200){
var jsonString=response.data;
var jsonMap=json.decode(jsonString);
打印(jsonMap);
searchModel=SearchDoctor.fromJson(jsonMap);
} 
else if(response.statusCode==401){
抛出异常(“错误的电子邮件/密码”);
}否则
抛出异常(“身份验证错误”);
}否则{
烤面包片(
msg:searchModel['message'],
烤面包片长度:烤面包片长度,
重力:ToastGravity.BOTTOM,
背景颜色:Colors.black,
textColor:Colors.white,
体积:16.0),;
}
}捕获(例外){
返回null;
}
返回搜索模型;
}
@凌驾
小部件构建(构建上下文){
返回安全区(
子:容器(
孩子:脚手架(
背景颜色:颜色(0xff29ABE2),
appBar:appBar(
海拔:0,
背景颜色:颜色(0xff29ABE2),
领先:集装箱(
孩子:我的钮扣(
图标:Image.asset('assets/images/home/left_arrow.png'),
已按下:(){
Navigator.pop(上下文);
},
),
),
标题:集装箱(
身高:60,
宽度:60,
孩子:我的钮扣(
图标:Image.asset('assets/images/home/patient.png'),
工具提示:“关闭应用程序”,
已按下:(){
Navigator.pop(上下文);
},
),
),
),
正文:SingleChildScrollView(
子:列(
儿童:[
容器(
宽度:double.infinity,
孩子:卡片(
形状:圆形矩形边框(
borderRadius:borderRadius.all(半径圆形(20)),
),
孩子:填充(
填充:边缘设置。全部(15),
子项:列(子项:[
划船(
主轴对准:
MainAxisAlignment.spaceBetween,
儿童:[
纵队(
儿童:[
大小盒子(
身高:5,,
),
正文(
“搜索医生”,
样式:TextStyle(
尺码:18,
fontFamily:“SansRegular”,
fontWeight:fontWeight.w100),
)
],
),
],
),
大小盒子(
身高:10,
),
形式(
键:_searchKey,
子:容器(
宽度:double.infinity,
子项:TextFormField(
控制器:\ u搜索控制器,
样式:TextStyle(
颜色:颜色,黑色,
fontFamily:“OpenSans”,
),
装饰:输入装饰(
enabledBorder:下划线