【问题标题】:A non-null String must be provided to a Text widget. 'package:flutter/src/widgets/text.dart':必须向 Text 小部件提供非空字符串。 'package:flutter/src/widgets/text.dart':
【发布时间】:2021-07-26 19:50:04
【问题描述】:
======== 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,
                    //
                    // )),
                  ),
                )
              ],
            ),
          ),
        );
      }
    }

【问题讨论】:

    标签: flutter


    【解决方案1】:

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

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

    【讨论】:

    • 我工作正常,但为什么它不显示来自 firebase 的所需信息,我认为每个用户,profileName 都是空的。为什么?
    • 我不了解 Firebase。但是当我使用带有 null 值的 Text 小部件时,我遇到了您现在所面临的问题。所以,我只是提供了解决方案。
    猜你喜欢
    • 2020-12-15
    • 1970-01-01
    • 2022-01-23
    • 2023-03-24
    • 2021-07-19
    • 2020-04-14
    • 2021-01-28
    • 1970-01-01
    相关资源
    最近更新 更多