我目前正在尝试使用firebase_admob插件中的横幅广告.显示和处理它们的过程非常简单,我在initState()和dispose()中进行.
创建和显示添加的代码如下所示:
_bannerAd = createBannerAd();
_bannerAd
..load().then((loaded) {
if (loaded) {
_bannerAd..show();
}
});
Run Code Online (Sandbox Code Playgroud)
但是,由于我正在异步调用show(),因此在显示广告时(即通过快速单击后退按钮)视图可能已经关闭.在这种情况下,将永远不会调用dispose()方法,并且广告将"卡在"屏幕底部.
我怎么解决这个问题?我是否使用横幅广告错误,或者是否可以检测视图是否已更改?我尝试使用州的"已安装"属性,但它似乎不起作用.
我目前正在尝试解析一个简单的配方列表,其中包含对食材的引用。
数据布局如下所示:
type Ingredient {
name: String!
amount: Int!
unit: Unit!
recipe: Recipe
}
type Recipe {
id: Int!
name: String!
ingredients: [Ingredient]!
steps: [String]!
pictureUrl: String!
}
Run Code Online (Sandbox Code Playgroud)
据我了解,我的解析器应如下所示:第一个解析食谱,第二个解析食谱中的成分字段。根据我的理解,它可以使用配方提供的参数。在我的配方对象中,该成分由id(int)引用,因此这应该是参数(至少我是这样认为的)。
var root = {
recipe: (argument) => {
return recipeList;
},
Recipe: {
ingredients: (obj, args, context) => {
//resolve ingredients
}
},
Run Code Online (Sandbox Code Playgroud)
这些解析器通过以下方式传递到应用程序:
app.use('/graphql', graphqlHTTP({
schema: schema,
graphiql: true,
rootValue: root,
}));
Run Code Online (Sandbox Code Playgroud)
但是,我的解析器似乎没有被调用。我希望在查询中即时查询所有成分。
该端点有效,但是一旦我查询成分,"message": "Cannot return null for non-nullable field Ingredient.name.",
就会返回此消息的错误。
当尝试在解析器中记录传入的参数时,我可以看到它从未执行过。不幸的是,我找不到像我一样使用express-graphql时如何使用它的示例。
如何在express-graphQL中为嵌套类型编写单独的解析器?
我想在Flutter中创建一个ListView,在新数据到达时更新.我正在使用RefreshIndicator来触发列表加载以进行测试.对于我的列表,我使用ListBuilder将我的对象映射到视图对象.
据我所知,setState()应该触发对我的列表的更新,但事实并非如此.
调试显示,在调用setState()回调之后,我的_listContent实际上填充了72个项目.为什么我的列表不会自动更新?我错过了什么吗?
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
List<Manga> _listContent = new List<Manga>();
void _addMangas(List<Manga> mangas) {
setState(() {
_listContent.addAll(mangas);
print('Cleared list');
});
}
Future<Null> _onRefresh() {
Completer<Null> completer = new Completer<Null>();
loadMangaItems().then((mangas) => _addMangas(mangas));
completer.complete();
return completer.future;
}
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: new RefreshIndicator(
child: new …
Run Code Online (Sandbox Code Playgroud)