Я использую пакет flutter_blo c.
У меня есть страница с панелью вкладок. Страница создает блок blo c и предоставляет его виджетам, которые используются в качестве содержимого вкладки.
class _MyScreenState extends State<MyScreen> {
MyBloc _myBloc;
...
Widget _buildTabBar() {
...
var children = [
_buildFirstTab()
_buildSecondTab(),
];
return WillPopScope(
onWillPop: _onWillPop,
child: DefaultTabController(
length: children.length,
child: Scaffold(
appBar: PreferredSize(
preferredSize: Size.fromHeight(75.0),
child: AppBar(
bottom: TabBar(isScrollable: true, tabs: tabs),
)),
body: TabBarView(
children: children,
),
),
),
);
}
..
}
Widget _buildSecondTab() {
if (_myBloc == null) {
_myBloc = MyBloc(<..initialdata..>);
}
_myBloc.add(LoadServerDataEvent());
return BlocProvider<MyBloc>(create: (_) => _myBloc, child: SecondTab());
}
Виджет на второй вкладке получает блок blo c от BlocProvider и использует его.
class _SecondTabState extends State<SecondTab> {
MyBloc _myBloc;
@override
void initState() {
_myBloc = BlocProvider.of<MyBloc>(context);
super.initState();
}
Моя проблема в том, что блок автоматически закрывается, когда я переключаюсь между вкладками.
Это немного странно, потому что блок все еще используется на странице.