该应用程序是一个简单的新闻阅读器,它显示 WordPress 帖子,没什么特别的,不使用 BLOC、继承的 Widget、Firebase。我希望它即使在用户离线时也能显示缓存的数据(这是最新的 10 个帖子)。
所以如果用户离线显示缓存数据;或者以某种方式默认数据是缓存数据。
从 WP REST API 获取 firstPost[Id] 如果缓存的 Json 文件包含 Post[id],则显示缓存的数据;否则 getPosts(); 并显示加载指示器。还请更新本地 JSON 文件。
获取JSON数据的代码:
// Function to fetch list of posts
Future<String> getPosts() async {
var res = await http
.get(Uri.encodeFull(apiUrl + "posts?_embed&per_page=10"), //TODO make it unlimited
headers: {"Accept": "application/json"});
setState(() {
var resBody = json.decode(res.body);
posts = resBody;
});
return "Success!";
}
Run Code Online (Sandbox Code Playgroud)
获取帖子并显示加载指示器的未来:
body: FutureBuilder<List<String>>(
future: getPosts(),
builder: (context, snapshot) {
if (snapshot.hasError) print(snapshot.error);
return snapshot.hasData
? ListViewPosts(posts: snapshot.data)
: …Run Code Online (Sandbox Code Playgroud) 我正在尝试将嵌套的 JSON 映射到模型对象,问题是当它返回 null 时,它会破坏所有代码,我想检查 null 是否执行某些操作但不破坏应用程序。
JSON 文件:
[
{
"id": 53,
"date": "2018-12-28T08:51:11",
"title": {
"rendered": "this is for featured"
},
"content": {
"rendered": "\n<p><g class=\"gr_ gr_3 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling\" id=\"3\" data-gr-id=\"3\">sdafkj</g> <g class=\"gr_ gr_10 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling ins-del multiReplace\" id=\"10\" data-gr-id=\"10\">kj</g> <g class=\"gr_ gr_16 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling ins-del multiReplace\" id=\"16\" data-gr-id=\"16\">asd</g> <g class=\"gr_ gr_18 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling\" id=\"18\" data-gr-id=\"18\">kadjsfk</g> kljadfklj sd</p>\n",
"protected": false
},
"excerpt": {
"rendered": "<p>sdafkj kj …Run Code Online (Sandbox Code Playgroud) 我们刚刚启动了一个使用 Flutter 和 Firebase 服务的项目:Auth、Firestore、Functions。我们刚刚发现 Firebase 不适用于华为手机。Flutter中使用哪个后端服务来迁移整个项目最快、最可靠?
在为我的桌面应用程序编写了 2 周的 UI 代码后,我发现 firebase 不支持 flutter 桌面,Sqflite 也不支持。那么我如何访问flutter桌面的任何类型的数据库呢?我已经尝试过 Sqflite 和 Firebase,而 Rest API 还不够。
当我不使用 Flutter 中的 ListView.builder 构造函数时,单个项目按预期从 JSON API 中显示:
当我使用 ListView.builder 时,什么也没有显示。没有错误!
我还尝试了一个仅包含文本的列表视图,但似乎也不起作用。这是代码:
@override
Widget build(BuildContext context) {
return Container(
child: new Scaffold(
appBar: AppBar(
title: Text("the title"),//TODO edit this
backgroundColor: Colors.blueAccent),
body:
Column(
children: <Widget>[
FutureBuilder<List<dynamic>>(
future: getPosts2(),
builder: (context, snapshot) {
if (snapshot.hasError) print(snapshot.error);
return snapshot.hasData
? ListViewPosts(postsFrom: snapshot.data)
: Center(child: CircularProgressIndicator());
},
),
],
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
这是 ListViewPosts 无状态小部件:
class ListViewPosts extends
StatelessWidget {
final List<dynamic> postsFrom;
ListViewPosts({Key key,
this.postsFrom}) : super(key: key);
@override
Widget …Run Code Online (Sandbox Code Playgroud)