简体   繁体   中英

Flutter Firestore error with BLoC pattern

A newbie in flutter has a lot of stuff that is just starting to figure out now it's BLoC pattern and now I ran into a problem I can not understand how to fix this error, seems to have written everything correctly Here generic Interface for all BLoCs

abstract class BlocBase {
  void dispose();
}

class BlocProvider<T extends BlocBase> extends StatefulWidget {
  BlocProvider({
    Key key,
    @required this.child,
    @required this.bloc,
  }) : super(key: key);

  final T bloc;
  final Widget child;

  @override
  _BlocProviderState<T> createState() => _BlocProviderState<T>();

  static T of<T extends BlocBase>(BuildContext context) {
    final type = _typeOf<BlocProvider<T>>();
    BlocProvider<T> provider = context.ancestorWidgetOfExactType(type);
    return provider.bloc;
  }

  static Type _typeOf<T>() => T;
}

class _BlocProviderState<T> extends State<BlocProvider<BlocBase>> {
  @override 
  void dispose() {
    widget.bloc.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return widget.child;
  }
}

Here is the second file in which I use BLoC and where it gives an error Here I use function validateAndCreateData through which I add Tickets

@override
  Widget build(BuildContext context) {
    final bloc = BlocProvider.of<TicketsBloc>(context);
    return Scaffold(
        drawer: MyDrawer(),
        appBar: AppBar(
            title: Text('Sports'),
            backgroundColor: Colors.blueGrey[900],
            // automaticallyImplyLeading: false,
            actions: <Widget>[
              IconButton(
                  icon: Icon(Icons.share),
                  tooltip: 'Share',
                  onPressed: () {
                    Navigator.of(context).pushNamed('/second_screen');
                  }),
              IconButton(
                  icon: Icon(Icons.account_circle),
                  tooltip: 'Your account',
                  onPressed: () {
                    Navigator.of(context)
                        .pushReplacementNamed('/account_screen');
                  }),
              IconButton(
                icon: Icon(Icons.add),
                tooltip: 'Add Tickets',
                onPressed: () => validateAndCreateData(bloc),
              )
            ]),
        body: MyTab(),
    );
  }
void validateAndCreateData(TicketsBloc bloc) async {
      bloc.createData(description, image, name, price);

  }

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

Your error mean you don't have access to the bloc. You must wrap your app with the provider. If not you cannot inherited from this.

return BlocProvider(
    child: MaterialApp(
      title: 'My App',
      home: HomeScreen(),
  ),
);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM