如果json文件中没有小部件的内容,有没有办法隐藏它?

如果json文件中没有小部件的内容,有没有办法隐藏它?,json,flutter,Json,Flutter,我已经通过一个教程制作了一个测验应用程序,但问题是在那个教程中,这个家伙使用了同一个小部件的4个实例来显示问题的选项。由于有些问题有5个选项可供选择,我硬编码了另一个choicebutton,但当没有“e”选项时,它显示为空 将来,当我获得更多的知识时,我会假装以更动态的方式重写整个代码,但现在我只想在json文件中没有内容时隐藏最后一个选项 我的代码乱七八糟,别介意,我会改正的(很抱歉我的英语不好) 导入'dart:async'; 导入“包:firebase_admob/firebase_ad

我已经通过一个教程制作了一个测验应用程序,但问题是在那个教程中,这个家伙使用了同一个小部件的4个实例来显示问题的选项。由于有些问题有5个选项可供选择,我硬编码了另一个choicebutton,但当没有“e”选项时,它显示为空

将来,当我获得更多的知识时,我会假装以更动态的方式重写整个代码,但现在我只想在json文件中没有内容时隐藏最后一个选项

我的代码乱七八糟,别介意,我会改正的(很抱歉我的英语不好)

导入'dart:async';
导入“包:firebase_admob/firebase_admob.dart”;
进口“包装:颤振/材料.省道”;
导入“dart:convert”;
导入“包:flifter/services.dart”;
导入“package:queazybymtvr/resultpage.dart”;
导入“ad_manager.dart”;
输入“home.dart”;
导入“package:shared_preferences/shared_preferences.dart”;
类getjson扩展了无状态小部件{
绳垫;
getjson(this.mat);
串负载;
setasset(){
如果(材料==“lp”){
assettoload=“assets/lp.json”;
调试打印(assettoload);
}否则{
debugPrint(“não clicou em língua葡萄牙语”);
}
}
@凌驾
小部件构建(构建上下文){
setasset();
回归未来建设者(
未来:
DefaultAssetBundle.of(context).loadString(AssetLoad,缓存:false),
生成器:(上下文,快照){
var mydata=json.decode(snapshot.data.toString());
if(mydata==null){
返回脚手架(
正文:中(
子:文本(
“加载”,
),
),
);
}否则{
返回quizpage(mydata:mydata);
}
},
);
}
}
类quizpage扩展StatefulWidget{
var-mydata;
quizpage({Key-Key,@required this.mydata}):super(Key:Key);
@凌驾
_quizpageState createState()=>\u quizpageState(mydata);
}
类quizpageState扩展了状态{
bool_已准备就绪;
void_loadRewardedAd(){
RewardedVideoAd.instance.load(
targetingInfo:MobileAdTargetingInfo(),
adUnitId:AdManager.rewardedAdUnitId,
);
}
无效_onRewardedEvent(RewardedVideodEvent事件,
{字符串rewardType,int rewardAmount}){
开关(事件){
已加载的案例RewardedVideoAdEvent.loaded:
设置状态(){
_IsRewardedReady=真;
});
打破
案例RewardedVideoAdEvent.closed:
设置状态(){
_IsRewardedReady=假;
});
_loadewardedad();
打破
案例RewardedVideoAdEvent.failedToLoad:
设置状态(){
_IsRewardedReady=假;
});
打印('加载奖励广告失败');
打破
案例RewardedVideoAdEvent.rewarded:
设置状态(){
//待办事项:帕萨尔·帕拉·普罗西马·奎斯特
i++;
ultimaQuestao(i);
});
打破
违约:
//无所事事
}
}
共享引用\u首选项;
字符串_ultimaQuestao='ultimaQuestao';
字符串_marks='marks';
未来的ultimaQuestao(int q)异步{
final_preferences=wait SharedPreferences.getInstance();
设置状态(){
_参数设置(_ultimaQuestao,q);
_首选项.setInt(_标记,标记);
});
}
未来设置标记(整数标记)异步{
final_preferences=wait SharedPreferences.getInstance();
设置状态(){
_首选项.setInt(_标记,标记);
});
}
getUltimaQuestao()异步{
SharedReferences_preferences=等待SharedReferences.getInstance();
设置状态(){
if(_preferences.getInt(_ultimaQuestao)!=null){
i=_preferences.getInt(_ultimaQuestao);
debugPrint(“i.toString()=”+i.toString());
}否则{
i=1;
}
});
}
间质体_间质体;
班纳拉德(BannerAd);;
博伊西学院院长;
未来_initAdMob(){
返回FirebaseAdMob.instance.initialize(appId:AdManager.appId);
}
void_loadBannerAd(){
_班纳拉德
…加载()
…展示(
主持人偏移:0.0,
水平中心偏移:0.0,
anchorType:anchorType.bottom
);
}
void(lad){
_间隙载荷();
}
@凌驾
无效处置(){
RewardedVideoAd.instance.listener=null;
_bannerAd?.dispose();
_填隙物?.dispose();
super.dispose();
}
var-mydata;
_quizpageState(this.mydata);
Color colortoshow=Colors.indigoAccent;
Color right=Colors.green;
颜色错误=颜色。红色;
整数分=0;
未来uq;
int i=1;
//int定时器=30;
//字符串showtimer=“30”;
//int间隙_定时器=10;
映射btncolor={
“a”:颜色。靛蓝颜色,
“b”:颜色。靛蓝色,
“c”:颜色。靛蓝色,
“d”:颜色。靛蓝色,
“e”:颜色。靛蓝色
};
bool canceltimer=false;
@凌驾
void initState(){
_bannerAd=bannerAd(
adUnitId:AdManager.bannerAdUnitId,
大小:AdSize.banner,
);
_loadBannerAd();
_IsInterstitualADREADY=假;
_中间翼=中间翼(
adUnitId:AdManager.interstitularadunitid,
听众:_oninterstitualadevent,
);
//显示“间隙的”ad();
getUltimaQuestao();
_IsRewardedReady=假;
RewardedVideoAd.instance.listener=\u onRewardedDadEvent;
_loadewardedad();
//starttimer();
super.initState();
}
无效_onInterstitualadevent(MobileAdEvent事件){
开关(事件){
案例MobileAdEvent.loaded:
_IsInterstitualADREADY=真;
打破
案例MobileAdEvent.failedToLoad:
_IsInterstitualADREADY=假;
打印('未能加载填隙广告');
打破
案例MobileAdEvent.closed:
打破
违约:
//无所事事
}
}
/*void starttimer()异步{
const onesec=持续时间(秒:
import 'dart:async';
import 'package:firebase_admob/firebase_admob.dart';
import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:flutter/services.dart';
import 'package:queazybymtvr/resultpage.dart';
import 'ad_manager.dart';
import 'home.dart';
import 'package:shared_preferences/shared_preferences.dart';

class getjson extends StatelessWidget {

  String mat;
  getjson(this.mat);
  String assettoload;

  setasset() {
    if (mat == "lp") {
      assettoload = "assets/lp.json";
      debugPrint(assettoload);
    }else{
      debugPrint("não clicou em língua portuguesa");
    }
  }

  @override
  Widget build(BuildContext context) {
    setasset();
    return FutureBuilder(
      future:
      DefaultAssetBundle.of(context).loadString(assettoload, cache: false),
      builder: (context, snapshot){
        var mydata = json.decode(snapshot.data.toString());
        if(mydata == null){
          return Scaffold(
            body: Center(
              child: Text(
                "Loading",
              ),
            ),
          );
        }else{
          return quizpage(mydata : mydata);
        }
      },
    );
  }
}

class quizpage extends StatefulWidget {



  var mydata;

  quizpage({Key key, @required this.mydata}) : super(key : key);

  @override
  _quizpageState createState() => _quizpageState(mydata);
}

class _quizpageState extends State<quizpage> {

  bool _isRewardedAdReady;

  void _loadRewardedAd() {
    RewardedVideoAd.instance.load(
      targetingInfo: MobileAdTargetingInfo(),
      adUnitId: AdManager.rewardedAdUnitId,
    );
  }

  void _onRewardedAdEvent(RewardedVideoAdEvent event,
      {String rewardType, int rewardAmount}) {
    switch (event) {
      case RewardedVideoAdEvent.loaded:
        setState(() {
          _isRewardedAdReady = true;
        });
        break;
      case RewardedVideoAdEvent.closed:
        setState(() {
          _isRewardedAdReady = false;
        });
        _loadRewardedAd();
        break;
      case RewardedVideoAdEvent.failedToLoad:
        setState(() {
          _isRewardedAdReady = false;
        });
        print('Failed to load a rewarded ad');
        break;
      case RewardedVideoAdEvent.rewarded:
        setState(() {
          //TODO: passar para a próxima questão
          i++;
          ultimaQuestao(i);
        });

        break;
      default:
      // do nothing
    }
  }

  SharedPreferences _preferences;

  String _ultimaQuestao = 'ultimaQuestao';
  String _marks = 'marks';
  
  Future ultimaQuestao(int q) async {
    final _preferences = await SharedPreferences.getInstance();
    setState(() {
      _preferences.setInt(_ultimaQuestao, q);
      _preferences.setInt(_marks, marks);
    });
  }

  Future setMarks(int marks) async {
    final _preferences = await SharedPreferences.getInstance();
    setState(() {
      _preferences.setInt(_marks, marks);
    });
  }

  getUltimaQuestao() async {
    SharedPreferences _preferences = await SharedPreferences.getInstance();
    setState(() {
      if(_preferences.getInt(_ultimaQuestao) != null){
        i = _preferences.getInt(_ultimaQuestao);
        debugPrint("i.toString() = " + i.toString());
      }else{
        i =  1;
      }
    });


  }



  InterstitialAd _interstitialAd;
  BannerAd _bannerAd;
  bool _isInterstitialAdReady;

  Future<void> _initAdMob() {

    return FirebaseAdMob.instance.initialize(appId: AdManager.appId);
  }

  void _loadBannerAd() {
    _bannerAd
      ..load()
      ..show(
        anchorOffset: 0.0,
        horizontalCenterOffset: 0.0,
        anchorType: AnchorType.bottom
      );
  }

  void _loadInterstitialAd() {
    _interstitialAd.load();
  }

  @override
  void dispose() {

    RewardedVideoAd.instance.listener = null;

    _bannerAd?.dispose();

    _interstitialAd?.dispose();

    super.dispose();
  }

  var mydata;

  _quizpageState(this.mydata);

  Color colortoshow = Colors.indigoAccent;
  Color right = Colors.green;
  Color wrong = Colors.red;
  int marks = 0;
  Future<int> uq;
  int i = 1;
  //int timer = 30;
  //String showtimer = "30";
  //int interstitial_timer = 10;

  Map<String, Color> btncolor = {
    "a" : Colors.indigoAccent,
    "b" : Colors.indigoAccent,
    "c" : Colors.indigoAccent,
    "d" : Colors.indigoAccent,
    "e" : Colors.indigoAccent
  };

  bool canceltimer = false;

  @override
  void initState(){


    _bannerAd = BannerAd(
      adUnitId: AdManager.bannerAdUnitId,
      size: AdSize.banner,
    );


    _loadBannerAd();


    _isInterstitialAdReady = false;



    _interstitialAd = InterstitialAd(
      adUnitId: AdManager.interstitialAdUnitId,
      listener: _onInterstitialAdEvent,
    );

    //show_interstitial_ad();

    getUltimaQuestao();


    _isRewardedAdReady = false;

    RewardedVideoAd.instance.listener = _onRewardedAdEvent;

    _loadRewardedAd();

    //starttimer();




    super.initState();
  }





  void _onInterstitialAdEvent(MobileAdEvent event) {
    switch (event) {
      case MobileAdEvent.loaded:
        _isInterstitialAdReady = true;
        break;
      case MobileAdEvent.failedToLoad:
        _isInterstitialAdReady = false;
        print('Failed to load an interstitial ad');
        break;
      case MobileAdEvent.closed:

        break;
      default:
      // do nothing
    }
  }




  /*void starttimer() async{

    const onesec = Duration(seconds: 1);
    Timer.periodic(onesec, (Timer t) {
      setState(() {
        if(timer < 1) {
          t.cancel();
          nextquestion();
        }else if(canceltimer == true){
          t.cancel();
        }else{
          timer = timer - 1;

        }
        showtimer = timer.toString();
      });
    });
  }*/


  void show_interstitial_ad(){
    InterstitialAd interstitialAd = new InterstitialAd(
        adUnitId: InterstitialAd.testAdUnitId,
        listener: (MobileAdEvent e) {
          print("Mobile ad event => $e");
        });
    interstitialAd.load().then((val) {
      interstitialAd.show();
    });
  }

  void nextquestion(){

    _loadInterstitialAd();
    //canceltimer = false;
    //timer = 30;
    setState(() {
      if(i < 10){
        if(i % 5 == 0) {
          showDialog(
              context: context,
              builder: (context) =>
                  AlertDialog(
                    title: Text("Queazer by MTVR"),
                    content: Text(
                        "Assita uma propaganda para acessar mais 10 questões."),
                    actions: <Widget>[
                      FlatButton(
                        child: Text("Cancelar"),
                        onPressed: () {
                          Navigator.pop(context);
                        },
                      ),
                      FlatButton(
                        child: Text("OK"),
                        onPressed: () {
                          Navigator.pop(context);

                          RewardedVideoAd.instance.show();

                        },
                      )
                    ],
                  )
          );
        }else{
          i++;
          ultimaQuestao(i);

        }
        //show_interstitial_ad();
      }else{
        ultimaQuestao(1);
        Navigator.of(context).pushReplacement(MaterialPageRoute(
          builder: (context) => resultpage(marks : marks)
        ));
      }
      btncolor["a"] = Colors.indigoAccent;
      btncolor["b"] = Colors.indigoAccent;
      btncolor["c"] = Colors.indigoAccent;
      btncolor["d"] = Colors.indigoAccent;
      btncolor["e"] = Colors.indigoAccent;

    });
    //starttimer();


  }

  void checkanswer(String k){
    //if(mydata[2][i.toString()] == mydata[1][i.toString()][k]){
    if(k == mydata[2][i.toString()]){
      //marks = marks +5;
      colortoshow= right;
      //setMarks(marks);
    }else{
      colortoshow = wrong;
    }
    setState(() {
      btncolor[k] = colortoshow;
      canceltimer = true;
    });


    Timer(Duration(seconds: 1), nextquestion);
  }

  Widget choicebutton(String k){
    return Padding(
      padding: EdgeInsets.zero,
      child: MaterialButton(
        onPressed: (){
          checkanswer(k);
          debugPrint("k = " + k + " e i.toString() = " + i.toString());
          debugPrint("mydata[2][i.toString()] = " + mydata[2][i.toString()] + ", mydata[1][i.toString()][k] = " + mydata[1][i.toString()][k]);
        },
        child: Text(
          mydata[1][i.toString()][k],

          style: TextStyle(
            fontSize: 16.0,
            fontFamily: "Alike-Regular",
            color: Colors.white
          ),
          //maxLines: 1,
        ),
        color: btncolor[k],
        splashColor: Colors.indigo[700],
        highlightColor: Colors.indigo[700],
        minWidth: 200.0,
        height: 45.0,
        shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(5.0))
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitDown,
      DeviceOrientation.portraitUp
    ]);
    return WillPopScope(
      onWillPop: (){
        return showDialog(
          context: context,
          builder: (context) => AlertDialog(
            title: Text(
              "Queazy by MTVR",
            ),
            content: Text(
              "Deseja realmente sair?"
            ),
            actions: <Widget>[
              FlatButton(
                onPressed: (){
                  Navigator.of(context).pop();
                },
                child: Text("Cancelar"),
              ),
              FlatButton(
                onPressed: (){
                  Navigator.of(context).pushReplacement(MaterialPageRoute(
                      builder: (context) => homepage()));
                  //TODO: sair e destruir a tela

                },
                child: Text("Sair"),
              )
            ],
          )
        );
        //TODO: destruir a página

      },
        child: Scaffold(
          appBar: AppBar(
            title: Text("Língua Portuguesa"),
            centerTitle: true,
          ),
        body: ListView(
          children: <Widget>[
            Expanded(
              flex: 2,
              child: Container(
                padding: EdgeInsets.all(15.0),
                alignment: Alignment.bottomLeft,

                child: Text(
                  i.toString() + " - " + mydata[0][i.toString()],
                  style: TextStyle(
                      fontSize: 16.0,
                      fontFamily: "Quando"
                  ),
                ),
              ),
            ),
            Expanded(
              flex: 7,
              child: Container(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    choicebutton('a'),
                    choicebutton('b'),
                    choicebutton('c'),
                    choicebutton('d'),
                    choicebutton('e'),
                  ],
                ),
              ),
            ),
            Expanded(
              flex: 1,
              child: Padding(
                padding: EdgeInsets.only(bottom: 60.0),
                child: Container(
                  alignment: Alignment.topCenter,
                  child: Center(
                    child: Container(
                      ),
                    ),
                  ),
                ),
              ),
          ],
        ),
      )
    );
  }
}