0

イメージピッカーを使用しました。追加後にプロフィール写真を割り当てる必要があります。前回 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(
                       ...
                      ),
        ),
      ),);}
});}}
4

1 に答える 1