1

Flutter: パラメーターに渡された値は、最初は 2 ページ目で null です。ホット リロードを実行すると、この値は null ではありません。

TabBar のせいかもしれませんが、TabBar を使用しているときに初めて実際の値を取得するにはどうすればよいですか?

私の問題の解決策を見つけるのを手伝ってください

先頭ページ。ここではidBouはnullではありません

class BoutiquePage extends StatefulWidget {
  int idboutique;

  BoutiquePage({this.idboutique});

  @override
  _BoutiquePageState createState() => _BoutiquePageState();
}

class _BoutiquePageState extends State<BoutiquePage> {

  SharedPreferences sharedPreferences;
 
  
  final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();

  String idBou ;
  String nomAbon ;
  String prenomAbon ;
  String telAbon ;
  String addAbon;
  String nomBou;
  String ville;
  String pays;

  String lien_photo_bout;


  bool _isLoading = false;


  String _errorText;

  get article_afficher333 => article_afficher333;

  @override
  void initState() { 
    setState((){ 
      getShaerInstance();
    }); 
    super.initState();
  }
  getShaerInstance() async {
    sharedPreferences = await SharedPreferences.getInstance(); 
  }


    Future<Map<String, dynamic>> getAllStoreInfoData2(int idboutique) async {
      final response = await http.get(http://xxxxxx.com+"boutique/home?id_bout="+idboutique.toString()); 
      if (response.statusCode == 200) {
        final jsonResponse = json.decode(response.body);
        BoutiqueData myData = new BoutiqueData.fromJson(jsonResponse);
        
        Map<String, dynamic> boutiqueinfodata = Map();
        boutiqueinfodata["boutiqueType"] = myData.v_boutique.typeBoutique; 
        return boutiqueinfodata;

      } else {
        throw Exception("Failed to load Data");
      }
    }

   
  //SharedPreferences

  @override
  Widget build(BuildContext context) {

    Widget myboutiqueinfodata = FutureBuilder(
      future: getAllStoreInfoData2(widget.idboutique),
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          Map<String, dynamic> alldata = snapshot.data;          
          typeBoutique = alldata["boutiqueType"];        
          List<ListeInfoBoutique> boutiqueInfoData = alldata["boutiqueInfoData"];   
           
            for (var i = 0; i < boutiqueInfoData.length; i++) {
              idBou = boutiqueInfoData[i].idBou;
              nomAbon = boutiqueInfoData[i].nomAbon;
              prenomAbon = boutiqueInfoData[i].prenomAbon;
              telAbon = boutiqueInfoData[i].telAbon;
              addAbon = boutiqueInfoData[i].addAbon; 
            }

            return   Scaffold(
                body: ListView(
                  children: <Widget>[
                     
                  ],
                ),
              );



        }else if (snapshot.hasError) {
          return Container(
            child: Center(
              child: Text(AppLocalizations.of(context)
                      .translate('_MSG_ER_CONNEXION_CHARGE_DATA'), 
                                  style: TextStyle(
                                    fontSize: 18,
                                    fontFamily: 'Questrial'
                                  ),),
            ),
          );
        }
        return new Center(
          child: CircularProgressIndicator(),
        );
      });

    return DefaultTabController(
      length: 5,
      child: Scaffold(
        key: _scaffoldKey,
        appBar: AppBar(
            title: Text(AppLocalizations.of(context)
                        .translate('_MY_STORE'), style: TextStyle(color: Colors.white, fontFamily: "Questrial"),),
            iconTheme: new IconThemeData(color: Color(0xFFFFFFFF)),
            actions: <Widget>[

              //
            ],
            bottom: TabBar(
              isScrollable: true,
              indicatorColor: Colors.white,
              indicatorWeight: 5.0,
              //onTap: (){},
              tabs: <Widget>[
                Tab(
                  child: Container(
                    child: Text(AppLocalizations.of(context)
                        .translate('_STORE_INFO'), style: TextStyle(color: Colors.white, fontSize: 18.0, fontFamily: 'Questrial'),),
                  ),
                ),
                Tab(
                  child: Container(
                    child: Text(AppLocalizations.of(context)
                        .translate('_MY_ARTICLES'), style: TextStyle(color: Colors.white, fontSize: 18.0, fontFamily: 'Questrial'),),
                  ),
                ),
              ],
            ),
        ),
        body: TabBarView(
          children: <Widget>[
                myboutiqueinfodata, 
                MesArticles(idboutique: idBou),
              ],
            ),
          ),
        );
      }

    }

最初に null を出力し、ホット リロード後に null 以外になる Secode ページ


class MesArticles extends StatefulWidget {
  final String idboutique;
  const MesArticles({Key key, this.idboutique}) : super(key: key);

  @override
  _MesArticleState createState() => _MesArticleState();
}

class _MesArticleState extends State<MesArticles> {

  @override
  Widget build(BuildContext context) {
   print(widget.idboutique.toString()); // it print null for fist time. After hot reload it become not null
    return Scaffold(
      body: Text(widget.idboutique.toString()), //<== it print null for fist time.
    );
  }
}
4

1 に答える 1