【问题标题】:LateInitializationError: Field 'chatRoomStream' has not been initializedLateInitializationError:字段“chatRoomStream”尚未初始化
【发布时间】:2021-10-27 21:37:03
【问题描述】:

以下代码给了我错误:

小部件库捕获的异常以下 LateError 在构建 Conversations(dirty, state: _ConversationsState#77d8c) 时引发: LateInitializationError: 字段 'chatRoomStream' 尚未初始化。

import 'package:flutter/material.dart';
import 'package:meet_up/screens/authenticate/helperfunctions.dart';
import 'package:meet_up/screens/home/conversationdm.dart';
import 'package:meet_up/screens/home/searchusers.dart';
import 'package:meet_up/services/auth.dart';
import 'package:meet_up/services/database.dart';
import 'package:meet_up/shared/constants.dart';

class Conversations extends StatefulWidget {
  @override
  _ConversationsState createState() => _ConversationsState();
}

class _ConversationsState extends State<Conversations> {
  AuthService authService = AuthService();
  DatabaseServices databaseServices = DatabaseServices();

  late Stream chatRoomStream;

  Widget chatRoomList() {
    return StreamBuilder(
        stream: chatRoomStream,
        builder: (context, snapshot) {
          return snapshot.hasData
              ? ListView.builder(
                  itemCount: (snapshot.data as QuerySnapshot).docs.length,
                  itemBuilder: (context, index) {
                    return ChatRoomTile(
                        (snapshot.data as QuerySnapshot)
                            .docs[index]["chatroomId"]
                            .toString()
                            .replaceAll("_", "")
                            .replaceAll(Constants.myName, ""),
                        ((snapshot.data as QuerySnapshot).docs[index]
                            ["chatroomId"]));
                  })
              : Container();
        });
  }

  @override
  void initState() {
    super.initState();
    getUserInfo();
    databaseServices.getChatRooms(Constants.myName).then((value) {
      setState(() {
        chatRoomStream = value;
      });
    });
  }

  getUserInfo() async {
    Constants.myName = (await HelperFunctions.getUserNameSharedPreference())!;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.green,
        elevation: 0,
        title: Text(
          'Conversations',
        ),
      ),
      body: chatRoomList(),
      floatingActionButton: FloatingActionButton(
        backgroundColor: Color(0xFF25D55F),
        onPressed: () {
          Navigator.push(
              context,
              MaterialPageRoute(
                builder: (context) => SearchScr(),
              ));
        },
        child: Icon(Icons.search),
      ),
    );
  }
}

class ChatRoomTile extends StatelessWidget {
  final String userName;
  final String chatRoomId;
  ChatRoomTile(this.userName, this.chatRoomId);

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        Navigator.push(
            context,
            MaterialPageRoute(
                builder: (context) => UserConversationDM(chatRoomId)));
      },
      child: Container(
        color: Color(0xff2d2828),
        padding: EdgeInsets.symmetric(horizontal: 20, vertical: 16),
        child: Row(
          children: [
            Container(
              height: 40,
              width: 40,
              alignment: Alignment.center,
              decoration: BoxDecoration(
                  color: Colors.green, borderRadius: BorderRadius.circular(40)),
              child: Text(
                "${userName.substring(0, 1).toUpperCase()}",
                style: TextStyle(
                  fontSize: 15,
                  fontWeight: FontWeight.bold,
                ),
              ),
            ),
            SizedBox(
              width: 8,
            ),
            Text(
              userName,
              style: TextStyle(
                fontSize: 15,
                fontWeight: FontWeight.bold,
              ),
            )
          ],
        ),
      ),
    );
  }
}

我真的是 Flutter 新手,如果能得到一点指导,我们将不胜感激。谢谢你:)

【问题讨论】:

    标签: firebase flutter


    【解决方案1】:

    late 意味着你应该第一次初始化 late。但是你的代码你没有初始化它。否则,请不要使用late

    来自

    late Stream chatRoomStream;
    

    Stream chatRoomStream;
    

    并查看此链接更多关于 lazy initialization

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-27
      • 2021-12-29
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      相关资源
      最近更新 更多