Ошибка 'Получатель' signUpBlo c 'был вызван нулем. Получатель: null Пробный вызов: signUpBlo c 'при использовании searchdelegate на флаттере - PullRequest
1 голос
/ 20 января 2020

Мне не терпится взять некоторую информацию через поисковый делегат и поместить ее в блок c, который содержит всю информацию о пользователях, но я получаю сообщение об ошибке "Получатель 'signUpBlo c' был вызван нулевым значением. Receiver: null. Пробный вызов: signUpBlo c ", например, blo c никогда не инициализируется, но я знаю, как не вызывать null, поскольку информация выбирается из делегата поиска.

Это Код провайдера

import 'package:flutter/material.dart';

import 'package:auth_test1/src/blocs/signup_bloc.dart';
export 'package:auth_test1/src/blocs/signup_bloc.dart';

class Provider extends InheritedWidget {

  final signUpBloc = SignUpBloc();

  Provider({Key key, Widget child})
    : super(key:key, child: child);

  @override
  bool updateShouldNotify( InheritedWidget oldWidget )=> true;


  static SignUpBloc of ( BuildContext context ){

    return ( context.dependOnInheritedWidgetOfExactType(aspect: Provider) as Provider ).signUpBloc;
  }

}

Кажется, что первая ошибка в этом стеке

return ( context.dependOnInheritedWidgetOfExactType(aspect: Provider) as Provider ).signUpBloc;

, а вторая ошибка в этом стеке в коде делегата поиска

@override
  Widget buildResults(BuildContext context) {
final bloc = Provider.of(context);

и это код searchDelegate

    import 'package:flutter/material.dart';

    import 'package:auth_test1/src/providers/provider.dart';

    class SchoolSearch extends SearchDelegate {
      String seleccion= '';


      final colegios = [
        'Gimnasio La Montaña',
        'Gimnasio del Norte',
        'Gimnasio Tilatá',
        'Gimnasio Campestre',
        'Colegio Nueva Granada',
        'Gimnasio Los Portales',
        'Gimnasio Vermont',
        'Gimnasio Moderno',
        'Gimnasio Femenino',
        'Gimnasio Marymount',
        'Colegio los Nogales',
      ];


      @override
      List<Widget> buildActions(BuildContext context) {
        // acciones de la barra de busqueda
        return [
          IconButton(
            icon: Icon(Icons.clear),
            onPressed: (){
              query = '';
            },
          )
        ];
      }

      @override
      Widget buildLeading(BuildContext context) {
        // icono a la izquierda de la barra de busqueda
        return IconButton(
          icon: AnimatedIcon(
            icon: AnimatedIcons.menu_arrow,
            progress: transitionAnimation,
          ),
          onPressed: (){
            close(context, null);
          },
        );
      }

      @override
      Widget buildResults(BuildContext context) {
        final bloc = Provider.of(context);
        //Crea los resultados de la busqueda 

        return Center(
          child: Card(
            shape: RoundedRectangleBorder(
              side: BorderSide(color: Colors.white),
              borderRadius: BorderRadius.circular(20.0)
            ),
            elevation: 25.0,
            child: Container(                                        
              height: 150.0,
              width: 200.0,
              decoration: BoxDecoration(

              ),
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: <Widget>[
                  Text('Haz seleccionado el $seleccion', style: TextStyle(fontSize: 15.0 ,color: Colors.black54), textAlign: TextAlign.center,),
                  SizedBox(height: 10.0,),
                  RaisedButton(
                    color: Color.fromRGBO(0, 148, 152, 1),
                    shape: RoundedRectangleBorder(
                      side: BorderSide(color: Colors.white),
                      borderRadius: BorderRadius.circular(15.0)
                    ),
                    elevation: 0.0,
                    child: Container(
                      color: Colors.transparent,
                      padding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 5),
                      child: Text('Confirmar',style: TextStyle(fontSize: 18.0 ,color: Colors.white,)),
                    ),
                    onPressed: () {
                      if(seleccion.isNotEmpty){
                        bloc.changeColegio(seleccion);
                      }
                    },
                  ),
                ],
              ) 
            ),
          ),
        );

      }

      @override
      Widget buildSuggestions(BuildContext context) {
        // Sugerencias a medida que escribe 
        final listaSugerida = (query.isEmpty) 
                              ? colegios
                              : colegios.where(
                                (c)=>c.toLowerCase().startsWith(query.toLowerCase())
                              ).toList();

        return ListView.builder(
          itemCount: listaSugerida.length,
          itemBuilder: (context, i){
            return ListTile(
              leading: Icon(Icons.school),
              title: Text(listaSugerida[i]),
              onTap: (){
                seleccion=listaSugerida[i];
                showResults(context);
              },
            );
          },
        );
      }

    }

Можете ли вы помочь мне выяснить, что делать, чтобы это исправить?

...