- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从flutter登录到laravel API时遇到问题。我已经使用下面的代码并收到错误消息:
Unhandled Exception: Failed assertion: boolean expression must not be null.
login.cart代码
```
import 'package:flutter/material.dart';
import 'package:qtrack/api/api.dart';
import 'package:qtrack/Pages/Dashboard/dashboard.dart';
import 'package:qtrack/Pages/Register/register.dart';
import 'package:shared_preferences/shared_preferences.dart';
class LoginPage extends StatefulWidget {
LoginPage({Key key, this.title}) : super(key: key);
final String title;
@override
LoginPageState createState() => LoginPageState();
}
class LoginPageState extends State<LoginPage> {
DatabaseHelper databaseHelper = new DatabaseHelper();
String msgStatus = '';
final TextEditingController _emailController = new TextEditingController();
final TextEditingController _passwordController = new TextEditingController();
@override
initState() {
read();
super.initState();
}
read() async {
final prefs = await SharedPreferences.getInstance();
final key = 'token';
final value = prefs.get(key) ?? 0;
if (value != '0') {
Navigator.of(context).push(new MaterialPageRoute(
builder: (BuildContext context) => new Dashboard(),
));
}
}
_onPressed() {
setState(() {
if ((_emailController.text).trim().toLowerCase().isNotEmpty &&
((_passwordController.text).trim().isNotEmpty)) {
databaseHelper
.loginData(_emailController.text.trim().toLowerCase(),
_passwordController.text.trim())
.whenComplete(() {
if (databaseHelper.status) {
Navigator.pushReplacementNamed(context, '/dashboard');
} else {
_showDialog();
msgStatus = 'Check email or password';
}
});
}
});
}
void _showDialog() {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: new Text('Failed'),
content: new Text('Check your email or password'),
actions: <Widget>[
new RaisedButton(
child: new Text(
'Close',
),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Stack(
children: <Widget>[
/////////// background///////////
new Container(
decoration: new BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
stops: [0.0, 0.4, 0.9],
colors: [
Color(0xFFFF835F),
Color(0xFFFC663C),
Color(0xFFFF3F1A),
],
),
),
),
Positioned(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Card(
elevation: 4.0,
color: Colors.white,
margin: EdgeInsets.only(left: 20, right: 20),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15)),
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
///////////// Email//////////////
TextField(
style: TextStyle(color: Color(0xFF000000)),
controller: _emailController,
cursorColor: Color(0xFF9b9b9b),
keyboardType: TextInputType.text,
decoration: InputDecoration(
prefixIcon: Icon(
Icons.account_circle,
color: Colors.grey,
),
hintText: "Email",
hintStyle: TextStyle(
color: Color(0xFF9b9b9b),
fontSize: 15,
fontWeight: FontWeight.normal),
),
),
/////////////// password////////////////////
TextField(
style: TextStyle(color: Color(0xFF000000)),
cursorColor: Color(0xFF9b9b9b),
controller: _passwordController,
keyboardType: TextInputType.text,
obscureText: true,
decoration: InputDecoration(
prefixIcon: Icon(
Icons.vpn_key,
color: Colors.grey,
),
hintText: "Password",
hintStyle: TextStyle(
color: Color(0xFF9b9b9b),
fontSize: 15,
fontWeight: FontWeight.normal),
),
),
///////////// LogIn Botton///////////////////
Padding(
padding: const EdgeInsets.all(10.0),
child: FlatButton(
child: Padding(
padding: EdgeInsets.only(
top: 8, bottom: 8, left: 10, right: 10),
child: Text(
'Login',
textDirection: TextDirection.ltr,
style: TextStyle(
color: Colors.white,
fontSize: 15.0,
decoration: TextDecoration.none,
fontWeight: FontWeight.normal,
),
),
),
color: Color(0xFFFF835F),
disabledColor: Colors.grey,
shape: new RoundedRectangleBorder(
borderRadius:
new BorderRadius.circular(20.0)),
onPressed: _onPressed,
),
),
],
),
),
),
//////////// new account///////////////
Padding(
padding: const EdgeInsets.only(top: 20),
child: InkWell(
onTap: () {
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => RegisterPage()));
},
child: Text(
'Create new Account',
textDirection: TextDirection.ltr,
style: TextStyle(
color: Colors.white,
fontSize: 15.0,
decoration: TextDecoration.none,
fontWeight: FontWeight.normal,
),
),
),
),
],
),
),
)
],
),
),
);
}
}
```
api.dart代码
class DatabaseHelper {
String serverUrl = "http://localhost/qtrack-api/public/api";
var status;
var token;
loginData(String email, String password) async {
String myUrl = "$serverUrl/login";
final response = await http.post(myUrl,
headers: {'Accept': 'application/json'},
body: {"email": "$email", "password": "$password"});
status = response.body.contains('success');
var data = json.decode(response.body);
if (status) {
_save(data["token"]);
} else {
print('data : ${data["error"]}');
}
}
registerData(String name, String email, String password) async {
String myUrl = "$serverUrl/register";
final response = await http.post(myUrl,
headers: {'Accept': 'application/json'},
body: {"name": "$name", "email": "$email", "password": "$password"});
status = response.body.contains('error');
var data = json.decode(response.body);
if (status) {
print('data : ${data["error"]}');
} else {
print('data : ${data["token"]}');
_save(data["token"]);
}
}
Future<List> getData() async {
final prefs = await SharedPreferences.getInstance();
final key = 'token';
final value = prefs.get(key) ?? 0;
String myUrl = "$serverUrl/products/";
http.Response response = await http.get(myUrl, headers: {
'Accept': 'application/json',
'Authorization': 'Bearer $value'
});
return json.decode(response.body);
}
void deleteData(int id) async {
final prefs = await SharedPreferences.getInstance();
final key = 'token';
final value = prefs.get(key) ?? 0;
String myUrl = "$serverUrl/products/$id";
http.delete(myUrl, headers: {
'Accept': 'application/json',
'Authorization': 'Bearer $value'
}).then((response) {
print('Response status : ${response.statusCode}');
print('Response body : ${response.body}');
});
}
void addData(String name, String price) async {
final prefs = await SharedPreferences.getInstance();
final key = 'token';
final value = prefs.get(key) ?? 0;
String myUrl = "$serverUrl/products";
http.post(myUrl, headers: {
'Accept': 'application/json',
'Authorization': 'Bearer $value'
}, body: {
"name": "$name",
"price": "$price"
}).then((response) {
print('Response status : ${response.statusCode}');
print('Response body : ${response.body}');
});
}
void editData(int id, String name, String price) async {
final prefs = await SharedPreferences.getInstance();
final key = 'token';
final value = prefs.get(key) ?? 0;
String myUrl = "http://flutterapitutorial.codeforiraq.org/api/products/$id";
http.put(myUrl, headers: {
'Accept': 'application/json',
'Authorization': 'Bearer $value'
}, body: {
"name": "$name",
"price": "$price"
}).then((response) {
print('Response status : ${response.statusCode}');
print('Response body : ${response.body}');
});
}
_save(String token) async {
final prefs = await SharedPreferences.getInstance();
final key = 'token';
final value = token;
prefs.setString(key, value);
}
read() async {
final prefs = await SharedPreferences.getInstance();
final key = 'token';
final value = prefs.get(key) ?? 0;
print('read : $value');
}
}
```
Dubug控制台日志
E/flutter ( 8339): [ERROR:flutter/lib/ui/ui_dart_state.cc(171)] Unhandled Exception: Failed assertion: boolean expression must not be null
E/flutter ( 8339): #0 LoginPageState._onPressed.<anonymous closure>.<anonymous closure>
package:qtrack/…/Login/login.dart:48
E/flutter ( 8339): #1 _rootRun (dart:async/zone.dart:1182:47)
E/flutter ( 8339): #2 _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter ( 8339): #3 _FutureListener.handleWhenComplete (dart:async/future_impl.dart:167:18)
E/flutter ( 8339): #4 Future._propagateToListeners.handleWhenCompleteCallback (dart:async/future_impl.dart:666:39)
E/flutter ( 8339): #5 Future._propagateToListeners (dart:async/future_impl.dart:722:37)
E/flutter ( 8339): #6 Future._completeError (dart:async/future_impl.dart:537:5)
E/flutter ( 8339): #7 _AsyncAwaitCompleter.completeError (dart:async-patch/async_patch.dart:47:15)
E/flutter ( 8339): #8 DatabaseHelper.loginData (package:qtrack/api/api.dart)
E/flutter ( 8339): <asynchronous suspension>
E/flutter ( 8339): #9 LoginPageState._onPressed.<anonymous closure>
package:qtrack/…/Login/login.dart:45
E/flutter ( 8339): #10 State.setState
package:flutter/…/widgets/framework.dart:1244
E/flutter ( 8339): #11 LoginPageState._onPressed
package:qtrack/…/Login/login.dart:41
E/flutter ( 8339): #12 _InkResponseState._handleTap
package:flutter/…/material/ink_well.dart:993
E/flutter ( 8339): #13 _InkResponseState.build.<anonymous closure>
package:flutter/…/material/ink_well.dart:1111
E/flutter ( 8339): #14 GestureRecognizer.invokeCallback
package:flutter/…/gestures/recognizer.dart:183
E/flutter ( 8339): #15 TapGestureRecognizer.handleTapUp
package:flutter/…/gestures/tap.dart:598
E/flutter ( 8339): #16 BaseTapGestureRecognizer._checkUp
package:flutter/…/gestures/tap.dart:287
E/flutter ( 8339): #17 BaseTapGestureRecognizer.handlePrimaryPointer
package:flutter/…/gestures/tap.dart:222
E/flutter ( 8339): #18 PrimaryPointerGestureRecognizer.handleEvent
package:flutter/…/gestures/recognizer.dart:476
E/flutter ( 8339): #19 PointerRouter._dispatch
package:flutter/…/gestures/pointer_router.dart:77
E/flutter ( 8339): #20 PointerRouter._dispatchEventToRoutes.<anonymous closure>
package:flutter/…/gestures/pointer_router.dart:122
E/flutter ( 8339): #21 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:377:8)
E/flutter ( 8339): #22 PointerRouter._dispatchEventToRoutes
package:flutter/…/gestures/pointer_router.dart:120
E/flutter ( 8339): #23 PointerRouter.route
package:flutter/…/gestures/pointer_router.dart:106
E/flutter ( 8339): #24 GestureBinding.handleEvent
package:flutter/…/gestures/binding.dart:219
E/flutter ( 8339): #25 GestureBinding.dispatchEvent
package:flutter/…/gestures/binding.dart:199
E/flutter ( 8339): #26 GestureBinding._handlePointerEvent
package:flutter/…/gestures/binding.dart:157
E/flutter ( 8339): #27 GestureBinding._flushPointerEventQueue
package:flutter/…/gestures/binding.dart:103
E/flutter ( 8339): #28 GestureBinding._handlePointerDataPacket
package:flutter/…/gestures/binding.dart:87
E/flutter ( 8339): #29 _rootRunUnary (dart:async/zone.dart:1206:13)
E/flutter ( 8339): #30 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 8339): #31 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter ( 8339): #32 _invoke1 (dart:ui/hooks.dart:267:10)
E/flutter ( 8339): #33 _dispatchPointerDataPacket (dart:ui/hooks.dart:176:5)
E/flutter ( 8339):
等待回应。
最佳答案
我认为您正在传递值= 0但正在检查值='0'
read() async {
final prefs = await SharedPreferences.getInstance();
final key = 'token';
final value = prefs.get(key) ?? 0;
if (value != '0') {
Navigator.of(context).push(new MaterialPageRoute(
builder: (BuildContext context) => new Dashboard(),
));
}
}
关于android - Flutter:未处理的异常:断言失败: bool 表达式不能为null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63545340/
我是 javascript 的新手(今天开始弄乱它)。 我正在尝试更改名为“bar”的元素(div)的高度。条形图将成为图表的一部分。 我可以毫无问题地将按钮连接到更改栏高度的函数。一切正常,除了条形
错误 -> “UIVIew”没有名为“addSubView”的成员 override func viewDidLoad() { super.viewDidLoad() // Do an
我在命令行工具项目中复制并粘贴了 main.swift 下面链接中的代码。 How do you use CGEventTapCreate in Swift? 它构建没有错误,但是当我运行时, gua
我在尝试编译我的代码时遇到以下错误。 ERROR! ..\myCode\CPOI.cpp:68:41: error: cannot dynamic_cast 'screenType' (of type
我正在尝试将多个字符串连接到一个我已为其分配内存的字符串指针。这是一个例子: char *finalNumString = malloc(sizeof(char)*1024); finalNumStr
我在使用 dup2() 和 pipe() 时遇到问题。 当我尝试将管道的写入端 dup2 到 STDOUT_FILENO 时,我收到了 EBADF。 我用 gdb 在 dup2(pout[1], ST
首先,我应该说我运行的是 Windows 7。 因此,今天早上我尝试像往常一样从我的存储库中提取数据,但我做不到。我得到了错误: The authenticity of host 'github.co
刚开始在虚拟环境中运行Python,乱用Django,无法激活虚拟环境。 花了最后 4 个小时尝试在本地终端/VS 代码上激活虚拟环境 (venv),但没有成功。 避免使用“sudo pip inst
Tidyverse 的粉丝经常给出使用小标题而不是数据框的几个优点。它们中的大多数似乎旨在保护用户免于犯错误。例如,与数据框不同,小标题: 不需要 ,drop=FALSE不从数据中删除维度的论据。 不
我一直在对 Elm 应用程序进行 docker 化时遇到问题。据我所知,我已经创建了一个完整且有效的 Docker 文件……但它不起作用。 我会解释的。 所以我的脚本在 3 个文件中运行。 首先是启动
我可以在 Controller 中使用@Autowired,例如 @RestController public class Index { @Autowired HttpServlet
我定义了一个方法和一个函数: def print(str:String) = println val intToString = (n:Int) => n.toString 现在我想创作它们。 我的问
当我控制台单独记录变量“pokemons”时,它确实返回一个数组。但是当我尝试映射它时,出现错误: TypeError: pokemons.map is not a function 我的代码: im
每当我尝试在 Python 解释器中导入 smtplib 时,都会收到此错误: ImportError: cannot import name fix_eols 我该如何解决这个问题? 编辑:这是完整
我正在使用 Meteor.js 开发一个项目,但在使用 Handlebar 时遇到了一些问题:我想检索集合的最后一项,并显示字段:其中包含 html 的文本: 这是我的javascript代码: Te
你好,我想使用 Service 实现 GestureDetector 但是我有这个错误The method onTouchEvent(MotionEvent) of type GestureServi
我正在尝试在 Controller bean 中 Autowiring 接口(interface) 在我放置的上下文配置文件中 和 我的 Controller 类是 @Controller pub
我试图在 mainwindow.cpp 中包含 QtSvg,但是当我编译时它说无法打开包含文件:QtSvg。我已经在我的 *.pro 文件中添加了这个(QT += svg)。我可以知道可能是什么问题吗
鉴于以下 PostgreSQL 代码,我认为这段代码不容易受到 SQL 注入(inject)攻击: _filter 'day' _start 1 _end 10 _sort 'article_name
我想执行以下操作。这在 MySQL 中是非法的。 PostGRESQL 中关联的 CTE(“with”子句)有效。这里的假设是 MySQL 中的子查询不是完全限定的 CTE。 请注意:这个查询显然非常
我是一名优秀的程序员,十分优秀!