как сделать blo c доступным для всех страниц приложения - PullRequest
0 голосов
/ 17 апреля 2020

Я использую blo c для управления состоянием своего приложения, я хочу предоставить blo c для всех страниц своего приложения, чтобы я вставил его в верхнюю часть дерева виджетов, чтобы я мог использовать его из любого места в дерево виджетов, я использовал его следующим образом:

1- главная страница

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return MyAppState();
  }}

  class MyAppState extends State<MyApp>{

  @override
  Widget build(BuildContext context) {
    return BlocProvider<MyBloc>(
      create: (BuildContext context) {
        return MyBloc();
      },
      child: MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: secondPage()),
    );
  }
}

2- секундная страница:

 class SecondPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return SecondPage State();
  }
}

class SecondPage State extends State<SecondPage > {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('secondPage')),

        body: BlocBuilder<CityBloc, CityState>(
          builder: (BuildContext context, CityState state) {            
             .......  
          },));}}

, но флаттер отображает ошибку, которая

BlocProvider.of() called with a context that does not contain a Bloc of type MyBloc

и это скриншот дерева виджетов приложения widget tree screenshot

, в чем ошибка, я хочу предоставить myblo c для всех widgets

примечание: приложение работает нормально, если я записываю класс MainPage и класс secondPage на одной странице, но когда я их разделяю, появляется ошибка

1 Ответ

0 голосов
/ 17 апреля 2020

Я был шокирован решением, проблема была только в импорте, я заменил

import '../blocs/blocs.dart';

на

import 'package: loony_trips / blocs / blocs.dart';

И все было исправлено, хотя два предложения были должен быть таким же

...