· 6 years ago · Feb 06, 2020, 04:59 AM
1import 'dart:async';
2import 'package:async/async.dart';
3import 'dart:convert';
4//import 'dart:html';
5import 'dart:io';
6import 'package:flutter/material.dart';
7import 'package:http/http.dart';
8import 'package:image_picker/image_picker.dart';
9import 'package:line_icons/line_icons.dart';
10import 'package:http/http.dart' as http;
11import 'package:path/path.dart';
12
13
14class CreateChildren extends StatefulWidget {
15 @override
16 _CreateChildrenState createState() => _CreateChildrenState();
17}
18
19class _CreateChildrenState extends State<CreateChildren> {
20 final _formKey = GlobalKey<FormState>();
21
22 final _nameController = TextEditingController();
23 final _dobController = TextEditingController();
24 final _genderController = TextEditingController();
25 final _bloogGroupController = TextEditingController();
26
27 final _url = 'http://139.59.91.202/api/v1';
28
29 File birth_certificate_dir;
30 var testimonial_dir;
31 var certificate_dir;
32 var bytes;
33 var a;
34
35
36
37 Future getBirthCertificate() async {
38 var image = await ImagePicker.pickImage(source: ImageSource.gallery);
39 var stream = new http.ByteStream(DelegatingStream.typed(image.openRead()));
40 var length = await image.length();
41 setState(() {
42 birth_certificate_dir = image;
43 a = birth_certificate_dir.openRead();
44 a.transform(utf8.decoder);
45 });
46
47 }
48
49 Future getTetimonial() async {
50 var image = await ImagePicker.pickImage(source: ImageSource.gallery);
51
52 setState(() {
53 testimonial_dir = image;
54 });
55 }
56
57 Future getCertificate() async {
58 var image = await ImagePicker.pickImage(source: ImageSource.gallery);
59
60 setState(() {
61 certificate_dir = image;
62 });
63 }
64
65
66
67 Future addChildren(String name, String dob, String gender, String blood_group, File birth_certificate_dir, var testimonial_dir, var certificate_dir) async {
68
69 try{
70
71 print("data $name $dob $blood_group");
72
73// final myHeader = [
74// 'Content-Type': 'application/x-www-form-urlencoded',
75// 'Accept': 'application/json',
76// 'Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6Ijg3NmVmZTMwYmUzNTI2MjYyZmVlNzJlM2Q0YTBlMDgyM2U4MmU1NmU3YWU1MjliNjhmMmU3NGE4MDBiOTg0YzUyMTc4MzhmZjg4ODE1ODU3In0.eyJhdWQiOiIxIiwianRpIjoiODc2ZWZlMzBiZTM1MjYyNjJmZWU3MmUzZDRhMGUwODIzZTgyZTU2ZTdhZTUyOWI2OGYyZTc0YTgwMGI5ODRjNTIxNzgzOGZmODg4MTU4NTciLCJpYXQiOjE1ODA5MTUzMDksIm5iZiI6MTU4MDkxNTMwOSwiZXhwIjoxNjEyNTM3NzA5LCJzdWIiOiI1NiIsInNjb3BlcyI6W119.jIhmdPI0BJ1kcD6Mgphb7RdiJyPabCE8TyIErrgmpXM5TH1tZVoI8XEqnUH8ZzeHQb5sgfzIWGhWXw0yVQ2DyC-o8gsEUBZwkav1sbg0cjSKV_htiyE4bmss3IBCrABS3-PFbe-2U_OF5xMUN-oW_UTKZZ7y_bOK7Wfspbn-E0p4BEVmDl7bIzvC4rIdWNmb0vW-s0TQ7kjresbjuUbRXcPXClt4Jo1o1nAXWYT0FtS7-lUxehHlq4Ikt9ITgtEB-1UWQxZkjVyI66NlKrA-dlXk__kVCEPJgas_jnUupLxnKGnaUrm53n2-fSFSfX-azetxNujalmSXNyXn2RhSbRDDZqXKmrDCoSQ_6Qx1OE8ksH8Sjm6uZaujLXJSrANjnQXduLkR6Rys6YoFLprqSRUg873z9BwxN-zSzf31AGjEQK2rr4YaFJNHz8XVlHGVuTdYtP3CAZxwyoWIx1sdBc5XKeCYn5RMEWD440px5wdgTT8M6SObRRhk-A3qvy_vV_UU6MGWJnW2MAX-Bc0xItl5iu_P9MswXkLhCGQoQVH_6PepkwagMUZ35Z3JcBvw6pDk1sWaorhrNz8c_L9gAIFzAoKhf42VZYJh85_iFYeSubikCK2ZwigKPVjaOUGLm_BxHlw3fowFtkprrWGfZO0sX6on3l7zITfNOxXCEgo',
77// ];
78 List<MultipartFile> lst = new List<MultipartFile>();
79 var uri = Uri.parse("$_url/children/create/");
80 http.MultipartRequest request = new http.MultipartRequest('POST', uri);
81
82 File imageFile = File(birth_certificate_dir.path.toString());
83 var stream = new http.ByteStream(DelegatingStream.typed(imageFile.openRead()));
84 var length = await imageFile.length();
85 print('length : $length ');
86 print('stream : $stream ');
87 print('imageFile : $imageFile ');
88// var multipartFile = new http.MultipartFile("birth_certificate_dir", stream, length, filename: basename(imageFile.path));
89// var multipartFile1 = new http.MultipartFile("certificate_dir", stream, length, filename: basename(imageFile.path));
90// lst.add(multipartFile);
91// lst.add(multipartFile1);
92
93 request.files.add(await http.MultipartFile.fromPath('birth_certificate_dir', imageFile.path,));
94 request.files.add(await http.MultipartFile.fromPath('certificate_dir', imageFile.path,));
95
96// request.files.addAll(lst);
97
98
99
100 request.headers['Content-Type'] = 'application/x-www-form-urlencoded';
101 request.headers['Accept'] = 'application/json';
102 request.headers['Authorization'] = 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6Ijg3NmVmZTMwYmUzNTI2MjYyZmVlNzJlM2Q0YTBlMDgyM2U4MmU1NmU3YWU1MjliNjhmMmU3NGE4MDBiOTg0YzUyMTc4MzhmZjg4ODE1ODU3In0.eyJhdWQiOiIxIiwianRpIjoiODc2ZWZlMzBiZTM1MjYyNjJmZWU3MmUzZDRhMGUwODIzZTgyZTU2ZTdhZTUyOWI2OGYyZTc0YTgwMGI5ODRjNTIxNzgzOGZmODg4MTU4NTciLCJpYXQiOjE1ODA5MTUzMDksIm5iZiI6MTU4MDkxNTMwOSwiZXhwIjoxNjEyNTM3NzA5LCJzdWIiOiI1NiIsInNjb3BlcyI6W119.jIhmdPI0BJ1kcD6Mgphb7RdiJyPabCE8TyIErrgmpXM5TH1tZVoI8XEqnUH8ZzeHQb5sgfzIWGhWXw0yVQ2DyC-o8gsEUBZwkav1sbg0cjSKV_htiyE4bmss3IBCrABS3-PFbe-2U_OF5xMUN-oW_UTKZZ7y_bOK7Wfspbn-E0p4BEVmDl7bIzvC4rIdWNmb0vW-s0TQ7kjresbjuUbRXcPXClt4Jo1o1nAXWYT0FtS7-lUxehHlq4Ikt9ITgtEB-1UWQxZkjVyI66NlKrA-dlXk__kVCEPJgas_jnUupLxnKGnaUrm53n2-fSFSfX-azetxNujalmSXNyXn2RhSbRDDZqXKmrDCoSQ_6Qx1OE8ksH8Sjm6uZaujLXJSrANjnQXduLkR6Rys6YoFLprqSRUg873z9BwxN-zSzf31AGjEQK2rr4YaFJNHz8XVlHGVuTdYtP3CAZxwyoWIx1sdBc5XKeCYn5RMEWD440px5wdgTT8M6SObRRhk-A3qvy_vV_UU6MGWJnW2MAX-Bc0xItl5iu_P9MswXkLhCGQoQVH_6PepkwagMUZ35Z3JcBvw6pDk1sWaorhrNz8c_L9gAIFzAoKhf42VZYJh85_iFYeSubikCK2ZwigKPVjaOUGLm_BxHlw3fowFtkprrWGfZO0sX6on3l7zITfNOxXCEgo';
103
104
105
106 request.fields['name'] = name;
107 request.fields['dob'] = dob;
108 request.fields['gender'] = gender;
109 request.fields['blood_group'] = blood_group;
110
111
112 print("requesting");
113
114 var response = await request.send();
115
116 print("response : ${response.statusCode}");
117// var r = await http.Response.fromStream(response);
118// print("res ${r.statusCode} ");
119// print("res ${r.body} ");
120 if (response.statusCode == 200) {
121 print("Image Uploaded");
122 } else {
123 print("Upload Failed");
124 }
125 response.stream.transform(utf8.decoder).listen((value) {
126 print('listining to ${value}');
127 });
128
129 }catch(e){
130 print("error in api calling ${e}");
131 }
132
133
134
135// try{
136// var response = await http.post(
137// "$_url/children/create/",
138//
139// headers:{
140// 'Content-Type': 'application/x-www-form-urlencoded',
141// 'Accept': 'application/json',
142// 'Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6Ijg3NmVmZTMwYmUzNTI2MjYyZmVlNzJlM2Q0YTBlMDgyM2U4MmU1NmU3YWU1MjliNjhmMmU3NGE4MDBiOTg0YzUyMTc4MzhmZjg4ODE1ODU3In0.eyJhdWQiOiIxIiwianRpIjoiODc2ZWZlMzBiZTM1MjYyNjJmZWU3MmUzZDRhMGUwODIzZTgyZTU2ZTdhZTUyOWI2OGYyZTc0YTgwMGI5ODRjNTIxNzgzOGZmODg4MTU4NTciLCJpYXQiOjE1ODA5MTUzMDksIm5iZiI6MTU4MDkxNTMwOSwiZXhwIjoxNjEyNTM3NzA5LCJzdWIiOiI1NiIsInNjb3BlcyI6W119.jIhmdPI0BJ1kcD6Mgphb7RdiJyPabCE8TyIErrgmpXM5TH1tZVoI8XEqnUH8ZzeHQb5sgfzIWGhWXw0yVQ2DyC-o8gsEUBZwkav1sbg0cjSKV_htiyE4bmss3IBCrABS3-PFbe-2U_OF5xMUN-oW_UTKZZ7y_bOK7Wfspbn-E0p4BEVmDl7bIzvC4rIdWNmb0vW-s0TQ7kjresbjuUbRXcPXClt4Jo1o1nAXWYT0FtS7-lUxehHlq4Ikt9ITgtEB-1UWQxZkjVyI66NlKrA-dlXk__kVCEPJgas_jnUupLxnKGnaUrm53n2-fSFSfX-azetxNujalmSXNyXn2RhSbRDDZqXKmrDCoSQ_6Qx1OE8ksH8Sjm6uZaujLXJSrANjnQXduLkR6Rys6YoFLprqSRUg873z9BwxN-zSzf31AGjEQK2rr4YaFJNHz8XVlHGVuTdYtP3CAZxwyoWIx1sdBc5XKeCYn5RMEWD440px5wdgTT8M6SObRRhk-A3qvy_vV_UU6MGWJnW2MAX-Bc0xItl5iu_P9MswXkLhCGQoQVH_6PepkwagMUZ35Z3JcBvw6pDk1sWaorhrNz8c_L9gAIFzAoKhf42VZYJh85_iFYeSubikCK2ZwigKPVjaOUGLm_BxHlw3fowFtkprrWGfZO0sX6on3l7zITfNOxXCEgo',
143// },
144// body: {
145// 'name': name,
146// 'dob': dob,
147// 'gender': gender,
148// 'blood_group': blood_group,
149// 'birth_certificate_dir': birth_certificate_dir.readAsStringSync(),
150// 'testimonial_dir': testimonial_dir,
151// 'certificate_dir': certificate_dir, //oki
152// },
153//
154// encoding: Encoding.getByName("LATIN1")
155// );
156// if (response.statusCode == 200) {
157// return response;
158// } else {
159// print("egag");
160// print(response);
161// print("egag");
162// throw Exception('Failed to add data');
163// }
164//
165//
166// }catch(e){
167// print("error api calling ${e}");
168// }
169
170 print("file : ${birth_certificate_dir}");
171 }
172
173
174
175 @override
176 Widget build(BuildContext context) {
177 final appBar = Padding(
178 padding: EdgeInsets.only(bottom: 40.0),
179 child: Row(
180 mainAxisAlignment: MainAxisAlignment.start,
181 children: <Widget>[
182 IconButton(
183 onPressed: () => Navigator.pop(context),
184 icon: Icon(
185 Icons.arrow_back,
186 color: Colors.black,
187 ),
188 )
189 ],
190 ),
191 );
192
193 final pageTitle = Container(
194 child: Text(
195 "Register",
196 style: TextStyle(
197 fontWeight: FontWeight.bold,
198 color: Colors.black,
199 fontSize: 40.0,
200 ),
201 ),
202 );
203
204 final formFieldSpacing = SizedBox(
205 height: 30.0,
206 );
207
208 final registerForm = Padding(
209 padding: EdgeInsets.only(top: 30.0),
210 child: Form(
211 key: _formKey,
212 child: Column(
213 children: <Widget>[
214 TextFormField(
215 controller: _nameController,
216 decoration: InputDecoration(
217 labelText: 'User Name',
218 labelStyle: TextStyle(color: Colors.black),
219 prefixIcon: Icon(
220 LineIcons.user,
221 color: Colors.black38,
222 ),
223 enabledBorder: UnderlineInputBorder(
224 borderSide: BorderSide(color: Colors.black38),
225 ),
226 focusedBorder: UnderlineInputBorder(
227 borderSide: BorderSide(color: Colors.orange),
228 ),
229 ),
230 keyboardType: TextInputType.text,
231 style: TextStyle(color: Colors.black),
232 cursorColor: Colors.black,
233 validator: (val) =>
234 val.isEmpty ? 'Please Enter Your Name' : null,
235 ),
236
237
238 TextFormField(
239 controller: _dobController,
240 decoration: InputDecoration(
241 labelText: 'Date of Birth',
242 labelStyle: TextStyle(color: Colors.black),
243 prefixIcon: Icon(
244 LineIcons.envelope,
245 color: Colors.black38,
246 ),
247 enabledBorder: UnderlineInputBorder(
248 borderSide: BorderSide(color: Colors.black38),
249 ),
250 focusedBorder: UnderlineInputBorder(
251 borderSide: BorderSide(color: Colors.orange),
252 ),
253 ),
254 keyboardType: TextInputType.text,
255 style: TextStyle(color: Colors.black),
256 cursorColor: Colors.black,
257 validator: (val) =>
258 !val.contains('@') && val.isEmpty ? 'Invalid Email' : null,
259 ),
260
261
262
263 TextFormField(
264 controller: _genderController,
265 decoration: InputDecoration(
266 labelText: 'Gender',
267 labelStyle: TextStyle(color: Colors.black),
268 prefixIcon: Icon(
269 LineIcons.phone,
270 color: Colors.black38,
271 ),
272 enabledBorder: UnderlineInputBorder(
273 borderSide: BorderSide(color: Colors.black38),
274 ),
275 focusedBorder: UnderlineInputBorder(
276 borderSide: BorderSide(color: Colors.orange),
277 ),
278 ),
279 keyboardType: TextInputType.text,
280 style: TextStyle(color: Colors.black),
281 cursorColor: Colors.black,
282 validator: (val) =>
283 val.isEmpty ? 'Please Enter Phone Number' : null,
284 ),
285
286
287 TextFormField(
288 controller: _bloogGroupController,
289 decoration: InputDecoration(
290 labelText: 'Password',
291 labelStyle: TextStyle(color: Colors.black),
292 prefixIcon: Icon(
293 LineIcons.lock,
294 color: Colors.black38,
295 ),
296 enabledBorder: UnderlineInputBorder(
297 borderSide: BorderSide(color: Colors.black38),
298 ),
299 focusedBorder: UnderlineInputBorder(
300 borderSide: BorderSide(color: Colors.orange),
301 ),
302 ),
303 keyboardType: TextInputType.text,
304 style: TextStyle(color: Colors.black),
305 cursorColor: Colors.black,
306 validator: (val) =>
307 val.isEmpty ? 'Password Should Be Minimum 6 Characters' : null,
308 ),
309
310 ],
311 ),
312 ),
313 );
314
315
316 final submitBtn = Padding(
317 padding: EdgeInsets.only(top: 20.0),
318 child: Container(
319 margin: EdgeInsets.only(top: 10.0, bottom: 20.0),
320 height: 60.0,
321 width: MediaQuery.of(context).size.width,
322 decoration: BoxDecoration(
323 borderRadius: BorderRadius.circular(7.0),
324 border: Border.all(color: Colors.white),
325 ),
326 child: Material(
327 borderRadius: BorderRadius.circular(7.0),
328 //color: primaryColor,
329 elevation: 10.0,
330 shadowColor: Colors.white70,
331 child: MaterialButton(
332 //onPressed: () => Navigator.of(context).pushNamed(homeViewRoute),
333 onPressed: () async {
334 if (_formKey.currentState.validate()){
335 await new Future.delayed(const Duration(milliseconds: 500));
336// Navigator.of(context).pop();
337 await addChildren(_nameController.text, _dobController.text, _genderController.text, _bloogGroupController.text, birth_certificate_dir, testimonial_dir, certificate_dir);
338 print('children done');
339 Navigator.of(context).pop();
340 }
341 },
342 child: Text(
343 'REGISTER',
344 style: TextStyle(
345 fontWeight: FontWeight.w800,
346 fontSize: 20.0,
347 color: Colors.black,
348 ),
349 ),
350 ),
351 ),
352 ),
353 );
354
355 return Scaffold(
356 body: SingleChildScrollView(
357 child: Container(
358 padding: EdgeInsets.only(top: 40.0),
359 child: Column(
360 children: <Widget>[
361 appBar,
362 Container(
363 padding: EdgeInsets.only(left: 30.0, right: 30.0),
364 child: Column(
365 crossAxisAlignment: CrossAxisAlignment.start,
366 children: <Widget>[
367 pageTitle,
368 registerForm,
369 pickImageButton1(),
370// pickImageButton2(),
371// pickImageButton3(),
372 submitBtn
373 ],
374 ),
375 )
376 ],
377 ),
378 ),
379 ),
380 );
381 }
382
383
384 Widget _buildFormField(String label, IconData icon) {
385 return TextFormField(
386 decoration: InputDecoration(
387 labelText: label,
388 labelStyle: TextStyle(color: Colors.black),
389 prefixIcon: Icon(
390 icon,
391 color: Colors.black38,
392 ),
393 enabledBorder: UnderlineInputBorder(
394 borderSide: BorderSide(color: Colors.black38),
395 ),
396 focusedBorder: UnderlineInputBorder(
397 borderSide: BorderSide(color: Colors.orange),
398 ),
399 ),
400 keyboardType: TextInputType.text,
401 style: TextStyle(color: Colors.black),
402 cursorColor: Colors.black,
403 );
404 }
405
406 Widget pickImageButton1(){
407 return IconButton(icon: Icon(Icons.camera), onPressed: getBirthCertificate);
408 }
409
410 Widget pickImageButton2(){
411 return IconButton(icon: Icon(Icons.camera), onPressed: getTetimonial);
412 }
413
414 Widget pickImageButton3(){
415 return IconButton(icon: Icon(Icons.camera), onPressed: getCertificate);
416 }
417}