【问题标题】:_CastError (Null check operator used on a null value) because it requires loading_CastError(用于空值的空检查运算符),因为它需要加载
【发布时间】:2022-06-27 00:35:09
【问题描述】:

所以我正在创建一个 Instagram 克隆,当我打开提要屏幕时,会弹出一个错误,显示“_CastError(用于空值的空检查运算符)”。 但是当我离开它一分钟时,它通常被饲料屏幕取代 所以事实证明它想要加载,但我不知道如何让它这样做。

代码如下(粗体部分需要时间):

`

class PostCard extends StatefulWidget {`
`final snap;`
`const PostCard({Key? key, required this.snap}) : super(key: key);`

`@override`
`State<PostCard> createState() => _PostCardState();`
`}`

`class _PostCardState extends State<PostCard> {`
`bool isLikeAnimating = false;`
`int commentLen = 0;`
`bool isLoading = false;`

`@override`
`Widget build(BuildContext context) {`
`

    ** final UserProvider userProvider = Provider.of<UserProvider>(context);**`


`return isLoading`


`? const Center(`


`child: CircularProgressIndicator(),`


`)`
`: Container(`


`color: Colors.white,`


`padding: EdgeInsets.symmetric(vertical: 10),`


`child: Column(`


`children: [`


`Container( //inside here are the contents of the post`
`);`
`}`
`}`

`Feed Screen:`
`StreamBuilder(`


`stream: stream,`


`builder: (context,`


`AsyncSnapshot<QuerySnapshot<Map<String, dynamic>>> snapshot) {`


`if (snapshot.connectionState == ConnectionState.waiting) {`


`return Center(`


`child: CircularProgressIndicator(),`


`);`


`}`


`return ListView.builder(`


`itemCount: snapshot.data!.docs.length,`


`itemBuilder: (context, index) => PostCard(`


`snap: snapshot.data!.docs[index],`


`),`
`);`
`}));`

【问题讨论】:

    标签: firebase flutter provider


    【解决方案1】:

    我遵循相同的课程。我将在 Discord 服务器中搜索解决方案并找到它:

    像这样更改 user_provider.dart 中的代码:

    class UserProvider with ChangeNotifier {
      User? _user;
      final AuthMethods _authMethods = AuthMethods();
    
      User? get getUser => _user;
    
      Future<void> refreshUser() async {
        User user = await _authMethods.getUserDetails();
        _user = user;
        notifyListeners();
      }
    }
    And this is the code for add_post_screen.dart:
    @override
      Widget build(BuildContext context) {
        final User? user = Provider.of<UserProvider>(context).getUser;
        return user == null
            ? const Center(
                child: CircularProgressIndicator(
                color: Colors.black,
              ))
            : _file == null
                ? Center(
                    child: IconButton(
                      icon: const Icon(Icons.upload),
                      onPressed: () => _selectImage(context),
                    ),
                  )
                : Scaffold(
                    appBar: AppBar(
                      backgroundColor: Colors.grey,
                      leading: IconButton(
                          icon: const Icon(Icons.arrow_back), onPressed: () {}),
    

    您必须按如下方式更改您的 user_provider.dart:

    class UserProvider with ChangeNotifier {
      User? _user;
      final AuthMethods _authMethods = AuthMethods();
    
      // Change it
      User? get getUser => _user;
    
      // update the value of an user
      Future<void> refreshUser() async {
        User user = await _authMethods.getUserDetails();
        _user = user;
        notifyListeners();
      }
    }
    

    在您的 post_card.dart 中,您必须在 user == null 时添加验证,如果为 null,您必须放置一个 CircularProgressIndicator,否则您的下一个代码会显示所有帖子:

    @override
      Widget build(BuildContext context) {
        final model.User? user = Provider.of<UserProvider>(context).getUser;
    
        /*Fixing error related with null value located in user provider*/
        return user == null
            ? const Center(
                child: CircularProgressIndicator(
                  color: Colors.white,
                ),
              )
            : Container(//the rest of your code)
    

    【讨论】:

      猜你喜欢
      • 2022-06-19
      • 2022-01-13
      • 2021-06-13
      • 2022-08-06
      • 2021-12-15
      • 2021-10-22
      • 1970-01-01
      • 2021-01-24
      • 2022-07-06
      相关资源
      最近更新 更多