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