我试图用Flutter Dark创建一个认证andoid应用程序。我为登录注册路由创建了一个具有endpointAPI的节点js服务器,该服务器直接与Atlas MongoDB数据库通信。我可以在邮递员中成功发送邮件请求,但当我试图从flutter应用程序内调用它时,我得到如下错误
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart' as http;
import 'package:shared_preferences/shared_preferences.dart';
import 'profile.dart';
class LoginSection extends StatelessWidget {
static const String id = "LoginSection";
var uid;
var password;
@override
Widget build(BuildContext context) {
final logo = Hero(
tag: 'hero',
child: CircleAvatar(
backgroundColor: Colors.transparent,
radius: 48.0,
child: Image.asset('assets/profile.png'),
),
);
final uid = TextFormField(
textAlign: TextAlign.center,
keyboardType: TextInputType.text,
autofocus: false,
initialValue: 'abc123',
decoration: InputDecoration(
hintText: 'Unique ID',
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)),
),
);
final password = TextFormField(
textAlign: TextAlign.center,
autofocus: false,
initialValue: '123abc',
obscureText: true,
decoration: InputDecoration(
hintText: 'Password',
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)),
),
);
final loginButton = Padding(
padding: EdgeInsets.symmetric(vertical: 16.0),
child: RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(24),
),
onPressed: () async {
await login(uid, password);
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString("token");
print(token);
if (token != null) {
Navigator.popAndPushNamed(context, LandingScreen.id);
}
},
padding: EdgeInsets.all(12),
color: Colors.lightBlueAccent,
child: Text('Log In', style: TextStyle(color: Colors.white)),
),
);
final forgotLabel = FlatButton(
child: Text(
'Forgot password?',
style: TextStyle(color: Colors.black54),
),
onPressed: () {},
);
return Scaffold(
backgroundColor: Colors.white,
body: Center(
child: ListView(
shrinkWrap: true,
padding: EdgeInsets.only(left: 24.0, right: 24.0),
children: <Widget>[
logo,
SizedBox(height: 48.0),
uid,
SizedBox(height: 8.0),
password,
SizedBox(height: 24.0),
loginButton,
forgotLabel
],
),
),
);
}
}
login(uid, password) async {
print(uid);
print(password);
var url = "http://192.147.111.104:5000/login"; // iOS
final http.Response response = await http.post(
url,
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(<String, String>{
'uid': uid,
'password': password,
}),
);
print(response.body);
SharedPreferences prefs = await SharedPreferences.getInstance();
var parse = jsonDecode(response.body);
await prefs.setString('token', parse["token"]);
}
https://api.flutter.dev/flutter/widgets/texteditingcontroller-class.html
在执行post请求的情况下,您将希望访问Controller.text,而不是传入整个小部件。
class VeryBasicForm extends StatefulWidget {
@override
_VeryBasicFormState createState() => _VeryBasicFormState();
}
class _VeryBasicFormState extends State<VeryBasicForm> {
final uidController = TextEditingController();
final passwordController = TextEditingController();
@override
void initState(){
// set initial value here
uidController.text = 'abc123';
passwordController.text = 'abc123';
super.initState();
}
@override
void dispose() {
uidController.dispose();
passwordController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Column(
children: [
TextFormField(
textAlign: TextAlign.center,
controller: uidController,
keyboardType: TextInputType.text,
autofocus: false,
decoration: InputDecoration(
hintText: 'Unique ID',
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)),
),
),
TextFormField(
textAlign: TextAlign.center,
controller: passwordController,
autofocus: false,
obscureText: true,
decoration: InputDecoration(
hintText: 'Password',
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)),
),
),
Padding(
padding: EdgeInsets.symmetric(vertical: 16.0),
child: RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(24),
),
onPressed: () async {
// pass in the String values from inputs using the controllers
await login(uidController.text, passwordController.text);
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString("token");
print(token);
if (token != null) {
Navigator.popAndPushNamed(context, LandingScreen.id);
}
},
padding: EdgeInsets.all(12),
color: Colors.lightBlueAccent,
child: Text('Log In', style: TextStyle(color: Colors.white)),
),
);
],
);
}
}
请问为什么第13行的错误是未报告的异常,必须捕获pr声明要抛出
我的Spring启动应用程序, 在获得Whitelabel错误页面后,我在我的一个控制器中映射了, 我映射了一个,出现以下异常:, 遵循User9123的解决方案,但是,我仍然得到下面的页面,
我试图用spring Boot开发一个应用程序。我被困在管理应用程序的异常/错误上。到目前为止,我有服务层和控制器,我已经创建了特定于服务类的异常。对于。(如)异常类是。服务抛出各自的。我被困在如何处理控制器中的异常/错误,如果那里有异常?特别针对api方法调用的格式不正确的输入。我正在读取控制器的输入。我应该把它包括在服务中吗? 所有服务异常都以500个内部应用程序错误的形式返回HTTP代码。我
我有一个定义doTry-doCatch块的路由。当在doCatch块中处理异常时,我希望将其传播到错误处理程序,以确保在本地处理后将消息添加到死信队列中。问题是我无法让错误处理程序的传播工作(“defaultErrorHandler called!”未打印到控制台)。我也尝试过onException,但也没有成功。 任何提示都非常感谢。此致,奥利弗
我读了很多关于Java异常处理的帖子,但我确实得到了满意的答案,为什么我要把它们放在我的代码中呢? 我想使用JRE的一些api方法,这些方法是用检查的异常进行的。所以如果我想使用它们,我需要抛出或捕获异常(例如java I/O)。这是在我的类中使用异常的合理规则吗? 我听说了这件事 Java异常处理使错误处理代码与我的业务逻辑分离 在下面的代码段中,分离错误处理的位置在哪里? 3.Java默认的异
获取此语句时出错。deleteEntry(Integer.valueOf); 如果在执行dao.delete项(Integer.valueOf(s))时发生异常;捕捉块不能捕捉异常,因为它捕捉""执行异常"具体而言,因此函数本身应该自动抛出异常,因为它的签名已抛出语句我写的捕捉块是用于处理逻辑处理的,如果我在try捕捉之外写同样的语句,它不会给出任何错误。我想了解这里的行为。请好心帮忙