【发布时间】:2021-03-09 04:06:17
【问题描述】:
我有一个用于获取 gmys 并将结果加载到颤振应用程序的 api。我希望颤振应用程序加载数据并存储在缓存中。当用户访问页面时,flutter应用程序要检查是否有网络连接,如果有,则从在线api加载数据,如果没有网络连接,则从缓存json文件中加载。
目前该应用程序仅在有互联网时才从在线 api 获取。 下面是我的代码:
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
class GymList extends StatelessWidget {
final String apiUrl ="apitogetgyms";
Future<List<dynamic>> fetchGyms() async {
var result = await http.get(apiUrl);
return json.decode(result.body)['gyms'];
}
String _name(dynamic gyms) {
return gyms['name'];
}
String _location(dynamic gyms) {
return gyms['location'];
}
String _phone(dynamic gyms) {
return gyms['phone'];
}
String _email(dynamic gyms) {
return gyms['email'];
}
String _img(dynamic gyms){
return gyms['img'];
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Gyms List'),
),
body: Container(
child: FutureBuilder<List<dynamic>>(
future: fetchGyms(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
//print(_name(snapshot.data[]));
return ListView.builder(
padding: EdgeInsets.all(8),
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
return Card(
child: Column(
children: <Widget>[
ListTile(
leading: CircleAvatar(
radius: 30,
backgroundImage:
NetworkImage(snapshot.data[index]['img'])),
title: Text(_name(snapshot.data[index])),
subtitle: Text(_location(snapshot.data[index])),
trailing: Text(_email(snapshot.data[index])),
)
],
),
);
});
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
} else {
return Center(child: CircularProgressIndicator());
}
},
),
),
);
}
}
【问题讨论】:
标签: flutter