Исключение, обнаруженное библиотекой рендеринга, Рендерфлекс переполнен 98349 пикселями справа. Соответствующим виджетом, вызывающим ошибки, была панель приложений

#flutter

Вопрос:

[здравствуйте, я делаю этот сайт и непрактично, что происходит, все идет, кроме панели приложений (из-за другой ошибки, индекс которой находится вне диапазона, индекс равен 0) этот сайт подключен к firebase, проблема, я думаю, в том, что я просто не знаю, как ее решить, в основном потому, что я много раз смотрел, что коллекции на firebase имели правильные имена, но все еще не идут, у кого-нибудь есть решение?]

 CollectionReference userCollectionReference =
    FirebaseFirestore.instance.collection('users');
CollectionReference bookCollectionReference =
    FirebaseFirestore.instance.collection('books');

return Scaffold(
  appBar: AppBar(
    backgroundColor: Colors.white24,
    elevation: 0.0,
    toolbarHeight: 77,
    centerTitle: false,
    title: Row(
      children: [
        Text(
          'A.Reader',
          style: Theme.of(context).textTheme.headline6.copyWith(
              color: Colors.redAccent, fontWeight: FontWeight.bold),
        ),
      ],
    ),
    actions: [
      StreamBuilder<QuerySnapshot>(
        stream: userCollectionReference.snapshots(),
        builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return Center(
              child: CircularProgressIndicator(),
            );
          }

          final userListStream = snapshot.data.docs.map((user) {
            return MUser.fromDocument(user);
          }).where((user) {
            return (user.uid == FirebaseAuth.instance.currentUser.uid);
          }).toList(); //[user]

          MUser curUser = userListStream[0];
          print(userListStream);

          return Column(
            children: [
              SizedBox(
                height: 40,
                width: 40,
                child: InkWell(
                  child: CircleAvatar(
                    radius: 60,
                    backgroundImage: NetworkImage(
                        /* curUser.avatarUrl != null
                        ? curUser.avatarUrl
                        :  */
                        'https://i.pravatar.cc/300'),
                    backgroundColor: Colors.white,
                    child: Text(''),
                  ),
                  onTap: () {
                    showDialog(
                      context: context,
                      builder: (context) {
                        // return createProfileMobile(context, userListStream,
                        //     FirebaseAuth.instance.currentUser, null);
                        return createProfileDialog(context, curUser);
                      },
                    );
                  },
                ),
              ),
              Text(
                curUser.displayName.toUpperCase(),
                overflow: TextOverflow.ellipsis,
                style: TextStyle(color: Colors.black),
              )
            ],
          );
        },
      ),
      TextButton.icon(
          onPressed: () {
            FirebaseAuth.instance.signOut().then((value) {
              return Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) => LoginPage(),
                  ));
            });
          },
          icon: Icon(Icons.logout),
          label: Text(''))
    ],
  ),
  floatingActionButton: FloatingActionButton(
    onPressed: () {
      Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => BookSearchPage(),
          ));
    },
    child: Icon(Icons.add),
    backgroundColor: Colors.redAccent,
  ),
 

//ошибка:

пакеты/флаттер/src/виджеты/асинхронность.сборка dart 124:48 …

Исключение, обнаруженное библиотекой рендеринга, Рендерфлекс переполнен 98349 пикселями справа. Соответствующим виджетом, вызывающим ошибки, была панель приложений libscreensmain_screen.dart:26

Комментарии:

1. Я думаю, что вы пишете весь свой код в виджете панели приложений в действии[]

2. да и что мне делать?

Ответ №1:

Я думаю, вам следует написать неправильное форматирование кода, попробуйте свой код, как показано ниже:

     return Scaffold(
  appBar: AppBar(
    backgroundColor: Colors.white24,
    elevation: 0.0,
    toolbarHeight: 77,
    centerTitle: false,
    title: Text(
      'A.Reader',
      style: Theme.of(context).textTheme.headline6.copyWith(
          color: Colors.redAccent, fontWeight: FontWeight.bold),
    ),
   
  ),
  body:StreamBuilder<QuerySnapshot>(
        stream: userCollectionReference.snapshots(),
        builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return Center(
              child: CircularProgressIndicator(),
            );
          }

          final userListStream = snapshot.data.docs.map((user) {
            return MUser.fromDocument(user);
          }).where((user) {
            return (user.uid == FirebaseAuth.instance.currentUser.uid);
          }).toList(); //[user]

          MUser curUser = userListStream[0];
          print(userListStream);

          return Column(
            children: [
              SizedBox(
                height: 40,
                width: 40,
                child: InkWell(
                  child: CircleAvatar(
                    radius: 60,
                    backgroundImage: NetworkImage(
                        /* curUser.avatarUrl != null
                        ? curUser.avatarUrl
                        :  */
                        'https://i.pravatar.cc/300'),
                    backgroundColor: Colors.white,
                    child: Text(''),
                  ),
                  onTap: () {
                    showDialog(
                      context: context,
                      builder: (context) {
                        // return createProfileMobile(context, userListStream,
                        //     FirebaseAuth.instance.currentUser, null);
                        return createProfileDialog(context, curUser);
                      },
                    );
                  },
                ),
              ),
              Text(
                curUser.displayName.toUpperCase(),
                overflow: TextOverflow.ellipsis,
                style: TextStyle(color: Colors.black),
              )
            ],
          );
        },
      ),
      TextButton(
          onPressed: () {
            FirebaseAuth.instance.signOut().then((value) {
              return Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) => LoginPage(),
                  ));
            });
          },
          icon: Icon(Icons.logout),
          label: Text(''))
  floatingActionButton: FloatingActionButton(
    onPressed: () {
      Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => BookSearchPage(),
          ));
    },
    child: Icon(Icons.add),
    backgroundColor: Colors.redAccent,
  ));
 

удалите свой StreamBuilder внутри действия[] панели приложений и добавьте его в тело scaffold

Комментарии:

1. если я поставлю его перед действием, текст будет весь красный

2. Я думаю, что вы не написали правильный код, можете ли вы отправить мне весь код