Здравствуйте, я новичок в трепетании, и я решил создать приложение TodoList, чтобы оттачивать свои навыки и привыкать к трепетанию и работе с API
, что я пытаюсь сделать - это то, что я хочу показать сообщение, написанное на нашем языке, после отправки данных в API
код
Future<Todo> sendData(String title, String body) async{
final http.Response response = await http.post(
'http://192.168.1.20/Todo_api/public/todos/store',
headers: <String , String>{
'Content-Type' : 'application/json; charset=UTF-8',
},
body: jsonEncode(<String,String>{
'title' : title,
'body' : body,
}),
);
if(response.statusCode == 200){
//200 Created
//parse json
return Todo.fromJson(jsonDecode(response.body)) ;
}else{
throw Exception('Failed to submit Contact the Devolopers please ');
}
}
, как вы можете видеть, я хочу показать сообщение для пользователя, если код 200 (успех) вместо синтаксического анализа ответа json для пользователя, потому что он не получит его, а также я хочу вызвать Navigator.pop (), чтобы пользователь мог go вернуться к главному экрану, который я попытался вернуть, widget, string, ... et c, но он не работал и продолжал выдавать эту ошибку
error: значение типа 'Null Function () не может быть возвращено из функции' sendData ', потому что он имеет тип возвращаемого значения' Future '. (return_of_invalid_type at [todolist] lib \ CreateTodo.dart: 35)
, так что я хочу сделать, как упоминалось ранее, я хочу go вернуться на главный экран и показать дружеское сообщение для пользователь как в laravel
return redirect("/")->with('success' , 'Todo Stored Successfully');
и это все Спасибо за просмотр моего поста и Заранее спасибо
ОБНОВЛЕНИЕ: Решено с помощью оператора if для моих переменных
полный код
import 'dart:convert';
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:rflutter_alert/rflutter_alert.dart';
import 'main.dart';
class Todo {
final title;
final body;
Todo ({this.title , this.body});
factory Todo.fromJson(Map<String , dynamic> json){
return Todo(
title: json['title'],
body: json['body'],
);
}
}
Future<Todo> sendData(String title, String body) async{
final http.Response response = await http.post(
'http://192.168.1.20/Todo_api/public/todos/store',
headers: <String , String>{
'Content-Type' : 'application/json; charset=UTF-8',
},
body: jsonEncode(<String,String>{
'title' : title,
'body' : body,
}),
);
if(response.statusCode == 201){
return Todo.fromJson(jsonDecode(response.body));
}else{
return null;
}
}
class CreateTodo extends StatefulWidget {
@override
_CreateTodoState createState() => _CreateTodoState();
}
class _CreateTodoState extends State<CreateTodo> {
Future<Todo> _futureTodo;
String title = "";
String body = "";
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Create Todo"),
),
body: Center(
child : ListView(
children: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: TextField(
onChanged: (text){
title = text;
},
decoration: InputDecoration(hintText: 'Enter Title'),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: TextField(
onChanged: (text){
body = text;
},
decoration: InputDecoration(hintText: 'Enter Body'),
),
),
IconButton(
icon: Icon(Icons.send),
//if contains data then send else block
onPressed: () {
if (title == '' || body == ''){
Alert(context: context, title: "Error", desc: "Please fill the form", type: AlertType.error).show();
}else{
_futureTodo = sendData(title,body);
Alert(context: context, title: "Success", desc: "Stored Successfully", type: AlertType.success,
buttons: [
DialogButton(
child: Text(
"Home",
style: TextStyle(color: Colors.white, fontSize: 20),
),
onPressed: (){
Navigator.push(
context,
MaterialPageRoute(builder: (context) => MyApp()),
);
},
width: 120,
),
DialogButton(
child: Text(
"Back",
style: TextStyle(color: Colors.white, fontSize: 20),
),
onPressed: (){
Navigator.push(
context,
MaterialPageRoute(builder: (context) => CreateTodo()),
);
},
),
]
).show();
}
},
),
],
),
),
);
}
}