class MyPage extends StatelessWidget { @override Widget build(BuildContext context) { return DefaultTabController( length: 2, child: new Scaffold( appBar: TabBar( tabs: [ Tab(child: Text("MY INFORMATION",style: TextStyle(color: Colors.black54),)), Tab(child: Text("WEB CALENDER",style: TextStyle(color: Colors.black54),)), ], ), body:PersonalInformationBlocProvider( movieBloc: PersonalInformationBloc(), child: TabBarView( children: [ MyInformation(), new SmallCalendarExample(), ], ), ), ), ); } } class MyInformation extends StatelessWidget{ // TODO: implement build var deviceSize; //Column1 Widget profileColumn(PersonalInformation snapshot) => Container( height: deviceSize.height * 0.24, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: <Widget>[ Container( decoration: BoxDecoration( borderRadius: new BorderRadius.all(new Radius.circular(50.0)), border: new Border.all( color: Colors.black, width: 4.0, ), ), child: CircleAvatar( backgroundImage: NetworkImage( "http://www.binaythapa.com.np/img/me.jpg"), foregroundColor: Colors.white, backgroundColor: Colors.white, radius: 40.0, ), ), ProfileTile( title: snapshot.firstName, subtitle: "Developer", ), SizedBox( height: 10.0, ), ], ) ], ), ); Widget bodyData(PersonalInformation snapshot) { return SingleChildScrollView( child: Column( children: <Widget>[ profileColumn(snapshot) ], ), ); } @override Widget build(BuildContext context) { final personalInformationBloc = PersonalInformationBlocProvider.of(context); deviceSize = MediaQuery.of(context).size; return StreamBuilder( stream: personalInformationBloc.results, builder: (context,snapshot){ if (!snapshot.hasData) return Center( child: CircularProgressIndicator(), ); return bodyData(snapshot.data); } ); } }
我正在使用Bloc Pattern从Rest API检索数据(仅从JSON调用整个对象,并且仅解析用户名)。该页面包含两个选项卡MyIformation和SmallCalendar。当应用程序运行时,将正确提取数据,一切正常。当我转到选项卡二并返回到选项卡一时,选项卡一的整个屏幕变为红色,显示错误: Bad state: Stream has already been listened to.
Bad state: Stream has already been listened to.
问题是由于未将控制器放置在整体中。
void dispose() { monthChangedController.close(); dayPressedController.close(); resultController.close(); }