必须向"文本"构件提供非空字符串。'package:flutter/src/widgets/text.dart':


======== Exception caught by widgets library =======================================================
The following assertion was thrown building UserResult(dirty):
A non-null String must be provided to a Text widget.
'package:flutter/src/widgets/text.dart':
Failed assertion: line 378 pos 10: 'data != null'

下面是我的完整代码,我不知道我在哪个文本小工具上修复了它

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:nethouese/pages/imported/models/user.dart';
import 'package:nethouese/pages/imported/widgets/ProgressWidget.dart';

class SearchPage extends StatefulWidget {
@override
_SearchPageState createState() => _SearchPageState();
}
class _SearchPageState extends State<SearchPage>with AutomaticKeepAliveClientMixin<SearchPage>
{
final userReference= FirebaseFirestore.instance.collection('agent');
TextEditingController searchtextEditingController= TextEditingController();
Future<QuerySnapshot>futureSearchResults;
clearFormfield(){
searchtextEditingController.clear();
}
//searching process this method searches and fetechs data from agents collection
controllSearching(String str){
Future<QuerySnapshot>allUsers=userReference.where("profileName", isGreaterThanOrEqualTo:str).get();
setState(() {
futureSearchResults=allUsers;
});
}
AppBar searchPageHeader(){
return AppBar(
backgroundColor: Colors.teal.shade900,
title: TextFormField(
style: TextStyle(
fontSize: 18, color: Colors.white,),
controller: searchtextEditingController,
decoration: InputDecoration(
fillColor: Colors.red,
hintText: "search here",
hintStyle: TextStyle(color: Colors.grey),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.grey),
),
focusedBorder:  UnderlineInputBorder(
borderSide: BorderSide(color: Colors.white),
),

prefixIcon: Icon(Icons.person_pin, color: Colors.white,size: 30.0,),
suffix: IconButton(icon: Icon(Icons.clear),color: Colors.white,onPressed:clearFormfield,)
),
onFieldSubmitted: controllSearching,
),
);
}
Container DispalyNoSearchResult(){
final Orientation orientation= MediaQuery.of(context).orientation;
return Container(
child: Center(
child: ListView(
shrinkWrap: true,
children: <Widget>[
Icon(Icons.group,color: Colors.grey,size: 60,),
Text(
"Search User",
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white,fontWeight: FontWeight.w300,fontSize: 50.0,
),)
],
),
),
);
}
displayAllUser(){
return FutureBuilder(
future: futureSearchResults,
builder: (context ,dataSnapshot){
if (!dataSnapshot.hasData || dataSnapshot.data.docs.isEmpty) {
return circularProgress();
}
List<UserResult>searchUserResult=[];
dataSnapshot.data.docs.forEach((docs){
agent eachuser=agent.fromDocument(docs);
UserResult userResult= UserResult(eachuser);
searchUserResult.add(userResult);

});
return ListView(children: searchUserResult);
},
);
}
bool get wantKeepAlive=>true;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white10,
appBar: searchPageHeader(),
body: futureSearchResults==null? DispalyNoSearchResult():displayAllUser(),

);
}
}
class UserResult extends StatelessWidget {
final agent eachuser;
UserResult(this.eachuser);
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.all(3.0),
child: Container(
color: Colors.white54,
child: Column(
children: <Widget>[
GestureDetector(
onTap: (){print("tabbled");},
child: ListTile(
// leading: CircleAvatar(
//   backgroundColor: Colors.black,
//   backgroundImage: CachedNetworkImageProvider(eachuser.url),
//
// ),
title:Text(
eachuser.profileName,
style:TextStyle(
color: Colors.black,
fontSize: 16,
fontWeight: FontWeight.bold,

)
),
// subtitle: Text(eachuser.username,style:TextStyle(
//   color: Colors.black,
//   fontSize: 13.0,
//   fontWeight: FontWeight.bold,
//
// )),
),
)
],
),
),
);
}
}

Text小部件不允许显示空值。在Text小部件中使用该值之前,您必须检查该值是否为null。在UserResult类中修改以下代码并进行检查。

Text(eachuser?.profileName ?? ' ',
style: TextStyle(
color: Colors.black,
fontSize: 16,
fontWeight: FontWeight.bold,
),
),

相关内容

最新更新