Виджет Scaffold не найден при использовании BottomSheet - PullRequest
0 голосов
/ 02 мая 2020

Я только изучаю Flutter и застрял на этой ошибке:

No Scaffold widget found.

Home widgets require a Scaffold widget ancestor.
The specific widget that could not find a Scaffold ancestor was: Home
The ancestors of this widget were

, но, как вы можете видеть из моего кода, у меня есть Scaffold, и я поиграл, добавляя его везде, где мог, но не сделал т работать.

Что может быть причиной того, что я сделал или не заметил там?

import 'package:firebase_redux_app/services/firebase.auth.dart';
import 'package:flutter/material.dart';
// import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_redux_app/services/firestore.dart';
import 'package:provider/provider.dart';
import 'package:firebase_redux_app/screens/home/brewList.dart';
import 'package:firebase_redux_app/models/brew.dart';

class Home extends StatelessWidget {
  final AuthService _auth = AuthService();

  @override
  Widget build(BuildContext context) {
    void _showSettingsPanel() {
      showBottomSheet(
          context: context,
          builder: (context) {
            return Container(
              padding: EdgeInsets.symmetric(vertical: 20.0, horizontal: 60.0),
              child: Text('bottom sheet'),
            );
          });
    }

    return StreamProvider<List<Brew>>.value(
      value: DBFirestore().brews,
      child: Scaffold(
        backgroundColor: Colors.brown[50],
        appBar: AppBar(
          title: Text('Brew Crew'),
          backgroundColor: Colors.brown[400],
          elevation: 0.0,
          actions: <Widget>[
            FlatButton.icon(
                onPressed: () async {
                  await _auth.signOut();
                },
                icon: Icon(Icons.person),
                label: Text('Log Out')),
            FlatButton.icon(
              icon: Icon(Icons.settings),
              label: Text('settings'),
              onPressed: () => _showSettingsPanel(),
            )
          ],
        ),
        body: BrewList(),
      ),
    );
  }
}

1 Ответ

1 голос
/ 02 мая 2020

Эта ошибка вызвана из-за области действия вашего _showSettingsPanel метода

Есть 2 вещи, которые вы можете сделать

1. Сделайте _showSettingsPanel метод в классе Home и разрешите ему принимать контекст в качестве параметра. Следовательно, оберните ваши настройки FlatButton в Builder и передайте context методу _showSettingsPanel.

Вот так

class Home extends StatelessWidget {

  void _showSettingsPanel(context) {
    showBottomSheet(
        context: context,
        builder: (context) {
          return Container(
            padding: EdgeInsets.symmetric(vertical: 20.0, horizontal: 60.0),
            child: Text('bottom sheet'),
          );
        });
  }

  @override
  Widget build(BuildContext context) {
    return StreamProvider<List<Brew>>(
      value: DBFireStore().brews
      child: Scaffold(
        backgroundColor: Colors.brown[50],
        appBar: AppBar(
          title: Text('Brew Crew'),
          backgroundColor: Colors.brown[400],
          elevation: 0.0,
          actions: <Widget>[
            FlatButton.icon(
                onPressed: () async {
                },
                icon: Icon(Icons.person),
                label: Text('Log Out')),
            Builder(
              builder: (context) {
                return FlatButton.icon(
                  icon: Icon(Icons.settings),
                  label: Text('settings'),
                  onPressed: () => _showSettingsPanel(context),
                );
              }
            )
          ],
        ),
        body: BrewList(),
      ),
    );
  }
}

2. Оберните виджет Home в Scaffold везде, где вы его используете, вместо использования Home

Как это

Scaffold(body: Home())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...