Мне не терпится взять некоторую информацию через поисковый делегат и поместить ее в блок 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);
},
);
},
);
}
}
Можете ли вы помочь мне выяснить, что делать, чтобы это исправить?