gpt4 book ai didi

android - Flutter:未处理的异常:断言失败: bool 表达式不能为null

转载 作者:行者123 更新时间:2023-12-03 03:50:41 25 4
gpt4 key购买 nike

我从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代码
```
导入'package:http / http.dart'作为http;
导入'dart:convert';
导入'package:shared_preferences / shared_preferences.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com