イメージピッカーを使用しました。追加後にプロフィール写真を割り当てる必要があります。前回 setState() を使用しましたが、機能しませんでした。
私のブロッククラスは次のようになります。
class ImageBloc {
final _loadingController = StreamController<String>();
Stream<String> get loadingStream => _loadingController.stream;
void setIsLoading(String image) => _loadingController.add(image);
dispose() {
_loadingController.close();
}
}
Player クラス このクラスは StatefullWidget です
class _PlayersState extends State<Players> {
ImageBloc bloc;
...
drawer: drawer(context, onProfilePictureChanged,bloc),
}
drawerこれは一般的な引き出しです。私は他のクラスでこのメソッドを使用しました。他のクラスでは、ブロック パラメータに null を渡しました
Widget drawer(BuildContext context, onProfilePictureChanged,ImageBloc bloc) {
return Drawer(
child: Container(child:
//I checked bloc null or not because others class I passed null value to bloc
bloc == null ? Text("null value",
style: TextStyle(
color: Colors.white,
fontSize: 13.0,
fontWeight: FontWeight.w500,
)):
//Player class only I passed bloc
StreamBuilder<String>(
stream: bloc.loadingStream,
initialData: "bloc value",
builder: (context,snapshot){
return Text(snapshot.data,
style: TextStyle(
color: Colors.white,
fontSize: 13.0,
fontWeight: FontWeight.w500,
));
}),))
設定値のブロックをシンクに渡しました..
await showDialog(
context: context,
builder: (BuildContext context) {
return ProfilePop(bloc:bloc);
});
ProfilePop クラス
class ProfilePop extends StatefulWidget {
const ProfilePop({Key key, @required this.bloc}) : super(key: key);
final ImageBloc bloc;
}
class ProfilePopState extends State<ProfilePop>{
upload(File imageFile) async {
...
setState(() {
global.profileImage = uploadedImage["Photo"];
widget.bloc.setIsLoading(uploadedImage["Photo"]);
});
...
@override
Widget build(BuildContext context) {
void onCancelPressed() {
Navigator.pop(context);
}
return new AlertDialog(
title:global.image == null
? profile
: new Container(
...
),
),
),);}
});}}