我收到此錯誤,我理解它,但我不知道如何修復它當我嘗試使用 profilPicker 類的變數時會發生此錯誤。
class MyDrawerPages extends StatefulWidget {
final ValueChanged<DrawerItem> onSelectedItem;
final VoidCallback? onClick;
const MyDrawerPages({
Key? key,
required this.onSelectedItem,
this.onClick,
}) : super(key: key);
@override
_MyDrawerPagesState createState() => _MyDrawerPagesState();
}
class _MyDrawerPagesState extends State<MyDrawerPages> {
final signUpKey = GlobalKey<_ProfilPickerState>();
var stringName = '';
var stringTeam = '';
@override
Widget build(BuildContext context) {
final name = signUpKey.currentState!.name;
final team = signUpKey.currentState!.team;
final bool isSignin = signUpKey.currentState!.isSignin;
return Scaffold(
body: Container(
color: const Color(0xFFE26A2C),
child: Column(
children: [
Padding(
key: signUpKey,
padding: const EdgeInsets.only(top: 20, bottom: 10),
child: ListTile(
leading: GestureDetector(
onTap: () {
Navigator.pushNamed(context, '/profil_picker');
},
child: const CircleAvatar(
backgroundColor: Color(0xFF463E3E),
child: Icon(
Icons.person,
size: 40,
color: Colors.white,
),
radius: 22,
),
),
title: Text(
isSignin ? name.toString().toUpperCase() : stringName,
style: const TextStyle(color: Colors.white),
),
subtitle: Text(
isSignin
? team.toString()
: stringTeam,
style: const TextStyle(color: Colors.white)),
),
),
SingleChildScrollView(
child: Column(children: [listTileDrawer(context)]),
),
],
),
),
);
}
這是 ProfilPicker 類
class _ProfilPickerState extends State<ProfilPicker> {
bool visible = false;
File? image;
late String name;
late String team;
TextEditingController nameController = TextEditingController();
TextEditingController teamController = TextEditingController();
var isSignin = true;
Future pickeImage(ImageSource source) async {
final image = await ImagePicker().pickImage(source: source);
if (image == null) return;
final saveImage = await saveImagepermanently(image.path);
try {
setState(() {
this.image = saveImage;
});
} on Exception catch (e) {
// ignore: avoid_print
print('failed to pick image $e');
}
}
bool signUp = true;
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
appBar: AppBar(
iconTheme: const IconThemeData(color: Colors.black),
backgroundColor: Colors.transparent,
elevation: 0,
),
backgroundColor: const Color(0xFFFFFFFF),
body: Center(
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Column(
children: [
Container(
height: 150,
width: 150,
decoration: BoxDecoration(
color: Colors.blueGrey[200],
borderRadius: BorderRadius.circular(200)),
child: image != null
? ClipOval(
child: Image.file(
image!,
width: 150,
height: 150,
fit: BoxFit.cover,
),
)
: const Icon(
Icons.add_a_photo,
size: 30,
),
),
],
),
const SizedBox(
height: 100,
),
signUp
? Column(
children: [
Card(
margin:
const EdgeInsets.symmetric(horizontal: 40),
child: ListTile(
onTap: () {
setState(() {
pickeImage(ImageSource.gallery);
signUp = false;
});
},
leading: const Icon(Icons.image_outlined),
title: const Text("Gallery"),
),
color: Colors.blue[100]),
const SizedBox(
height: 10,
),
Card(
color: Colors.blue[100],
margin: const EdgeInsets.symmetric(horizontal: 40),
child: ListTile(
onTap: () {
setState(() {
pickeImage(ImageSource.camera);
signUp = false;
});
},
leading: const Icon(Icons.camera),
title: const Text("Camera"),
),
),
],
)
: Column(
children: [
_listTileBuilder(),
const SizedBox(
height: 30,
)
],
)
],
),
),
),
),
);
}
_listTileBuilder() {
return SingleChildScrollView(
child: Wrap(
crossAxisAlignment: WrapCrossAlignment.center,
children: [
Padding(
padding: const EdgeInsets.all(10),
child: Column(
children: [
Container(
alignment: Alignment.topLeft,
padding: const EdgeInsets.fromLTRB(0, 10, 0, 4),
child: const Text('Profil')),
const Padding(
padding: EdgeInsets.only(right: 50),
child: Divider(
indent: 4,
color: Colors.black,
),
),
],
),
),
Padding(
padding: const EdgeInsets.all(10),
child: Column(
children: [
TextField(
controller: nameController,
maxLines: 1,
keyboardType: TextInputType.name,
style: const TextStyle(fontSize: 14),
decoration: InputDecoration(
filled: true,
fillColor: Colors.blue[100],
border: const OutlineInputBorder(
borderSide: BorderSide.none,
borderRadius: BorderRadius.all(Radius.circular(10))),
label: const Text('name',
style: TextStyle(fontStyle: FontStyle.italic)),
),
),
const Padding(padding: EdgeInsets.all(4)),
TextField(
controller: teamController,
maxLines: 1,
keyboardType: TextInputType.name,
style: const TextStyle(fontSize: 14),
decoration: InputDecoration(
filled: true,
fillColor: Colors.blue[100],
border: const OutlineInputBorder(
borderSide: BorderSide.none,
borderRadius: BorderRadius.all(Radius.circular(10))),
label: const Text(
'Team',
style: TextStyle(fontStyle: FontStyle.italic),
),
),
)
],
),
),
const Padding(
padding: EdgeInsets.all(20),
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
TextButton(
onPressed: () {
// Navigator.pop();
},
child: Text(
'cancel'.toUpperCase(),
style: const TextStyle(fontWeight: FontWeight.bold),
)),
TextButton(
onPressed: () {
setState(() {
isSignin;
name = nameController.text;
team = teamController.text;
});
},
child: Text('ok'.toUpperCase(),
style: const TextStyle(fontWeight: FontWeight.bold)))
],
)
],
),
);
}
}
我沒有更多細節提前謝謝!我在聽你,放縱我是初學者謝謝!
錯誤代碼
========被小部件庫捕獲的例外================================== 如下_CastError 被拋出構建 MyDrawerPages(dirty, state: _MyDrawerPagesState#a6f02): Null check operator used on a null value
uj5u.com熱心網友回復:
當對具有空值的變數使用空檢查運算子 ( ! )時會導致此錯誤。
您必須跟蹤所有變數并找到此空值或使用其他運算子來解決問題或檢查該值是否不為空。您可以使用 ??運算子并給出一個替代值,如果 null 像這樣
Text(name ?? 'Not Found')
您可以在本文中找到有關空感知運算子的所有資訊轉到文章
uj5u.com熱心網友回復:
問題就在這里
final name = signUpKey.currentState!.name;
final team = signUpKey.currentState!.team;
您正在嘗試訪問名稱和團隊,它們應該不為空,因為它們被標記為late,但是在單擊確定按鈕之前不會為它們分配值,在上面的構建方法中它們為空。
所以你應該讓它們為空并檢查它們是否為空。像這樣:
String? name;
String? team;
...
final name = signUpKey.currentState!.name ?? '';
final team = signUpKey.currentState!.team ?? '';
試試這個,告訴我它是否有效!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/374328.html
上一篇:如何在Flutter中創建一個不會產生空函式問題的匿名函式
下一篇:為什么這個手勢檢測器不能用作敲擊
