这是我的前端代码。我对这里可能发生的事情感到非常沮丧。
我想从服务器端php代码收集数据到flutter应用程序。
负责此连接的函数在MyScaffold类的Future _getPosts()函数中。
class MyScaffold extends StatelessWidget{
@override
Widget build(BuildContext context){
return Scaffold(
appBar: AppBar(
title: Text("ENPOWER DISCUSSION"),
backgroundColor: Colors.green,
),
drawer: Drawer(
child: ListView(
children: <Widget>[
ListTile(
title: Text("GENERAL FEEDS"),
onTap:(){
Navigator.of(context).pop(); //
}
),
ListTile(
title: Text("ENROLLMENT"),
onTap:(){
Navigator.of(context).pop(); // Close Navigator
//Call a new function here
Navigator.push(
context,
MaterialPageRoute(builder: (context) => EnrollmentPage()),
);
}
),
ListTile(
title: Text("PAYMENT"),
onTap:(){
Navigator.of(context).pop(); // Close Navigator
//Call a new function here
Navigator.push(
context,
MaterialPageRoute(builder: (context) => PaymentPage()),
);
}
),
ListTile(
title: Text("FAQ"),
onTap:(){
Navigator.of(context).pop(); // Close Navigator
//Call a new function here
Navigator.push(
context,
MaterialPageRoute(builder: (context) => FaqPage()),
);
}
),
],
),
),
body: Container(
child: FutureBuilder(
future: _getPosts(),
builder: (BuildContext context, AsyncSnapshot snapshot){
print(snapshot.data);
if(snapshot.data == null){
return Container(
child: Center(child: Text("Processing..."),),
);
}else{
return ListView.builder(itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index){
return ListTile(
title: Text(snapshot.data[index].postTitle),
);
},
);
}
},
),
),
);
}
Future<List<Post>> _getPosts() async{
var data = await http.get("www.empowermentopportunities.com/xxyyzz/admin_panel/backend/api_connector.php");
var jsonData = json.decode(data.body);
List<Post> posts = [];
for(var p in jsonData){
Post post = Post(p["post_id"], p["post_title"], p["post_content"], p["post_image_url"], p["post_date"]);
posts.add(post);
}
print(posts.length);
return posts;
}
}
class Post{
final int postId;
final String postTitle;
final String postContent;
final String postImageurl;
final String postDate;
Post(this.postId, this.postTitle, this.postContent, this.postImageurl, this.postDate);
}
void main(){
runApp(MaterialApp(
title: 'My app',
home: MyScaffold(),
));
}
这是服务器端php代码,其作用是从数据库中收集数据,然后将其压缩为JSON,然后再将其发送给前端调用者。
function fetch_gen_data($offset, $total){
include "../db/connection.php";
$data = array();
$query = mysqli_query($con, "SELECT * FROM posts ORDER BY post_id DESC LIMIT $total OFFSET $offset")or die(mysqli_error($con));
if(mysqli_num_rows($query)>0){
while($row = mysqli_fetch_assoc($query)){
$data[] = $row;
}
}
return json_encode(json_encode($data));
}
然后我从另一个函数调用该函数
echo fetch_gen_data(0, 10);
答案 0 :(得分:0)
我认为问题是后端中的双重json编码。如果您看到响应是一个字符串而不是一个json。
只需通过浏览器转到http://www.empowermentopportunities.com/xxyyzz/admin_panel/backend/api_connector.php,您就会看到。
返回应为return json_encode($data);