php接收flutter,来自Flutter中的PHP的API流(非Firebase)

小编典典

还有一个视频

完整的示例代码

import 'package:flutter/material.dart';

import 'package:http/http.dart' as http;

import 'dart:async';

import 'dart:convert';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {

@override

Widget build(BuildContext context) {

return new MaterialApp(

debugShowCheckedModeBanner: false,

title: 'Basic Project',

home: new MyHomePage(),

);

}

}

class MyHomePage extends StatefulWidget {

@override

_MyHomePageState createState() => new _MyHomePageState();

}

class _MyHomePageState extends State {

StreamController _postsController;

final GlobalKey scaffoldKey = new GlobalKey();

int count = 1;

Future fetchPost([howMany = 5]) async {

final response = await http.get(

'https://blog.khophi.co/wp-json/wp/v2/posts/?per_page=$howMany&context=embed');

if (response.statusCode == 200) {

return json.decode(response.body);

} else {

throw Exception('Failed to load post');

}

}

loadPosts() async {

fetchPost().then((res) async {

_postsController.add(res);

return res;

});

}

showSnack() {

return scaffoldKey.currentState.showSnackBar(

SnackBar(

content: Text('New content loaded'),

),

);

}

Future _handleRefresh() async {

count++;

print(count);

fetchPost(count * 5).then((res) async {

_postsController.add(res);

showSnack();

return null;

});

}

@override

void initState() {

_postsController = new StreamController();

loadPosts();

super.initState();

}

@override

Widget build(BuildContext context) {

return new Scaffold(

key: scaffoldKey,

appBar: new AppBar(

title: new Text('StreamBuilder'),

actions: [

IconButton(

tooltip: 'Refresh',

icon: Icon(Icons.refresh),

onPressed: _handleRefresh,

)

],

),

body: StreamBuilder(

stream: _postsController.stream,

builder: (BuildContext context, AsyncSnapshot snapshot) {

print('Has error: ${snapshot.hasError}');

print('Has data: ${snapshot.hasData}');

print('Snapshot Data ${snapshot.data}');

if (snapshot.hasError) {

return Text(snapshot.error);

}

if (snapshot.hasData) {

return Column(

children: [

Expanded(

child: Scrollbar(

child: RefreshIndicator(

onRefresh: _handleRefresh,

child: ListView.builder(

physics: const AlwaysScrollableScrollPhysics(),

itemCount: snapshot.data.length,

itemBuilder: (context, index) {

var post = snapshot.data[index];

return ListTile(

title: Text(post['title']['rendered']),

subtitle: Text(post['date']),

);

},

),

),

),

),

],

);

}

if (snapshot.connectionState != ConnectionState.done) {

return Center(

child: CircularProgressIndicator(),

);

}

if (!snapshot.hasData &&

snapshot.connectionState == ConnectionState.done) {

return Text('No Posts');

}

},

),

);

}

}

您的json类在PHP

// To parse this JSON data, do

//

// final payload = payloadFromJson(jsonString);

import 'dart:convert';

List payloadFromJson(String str) => new List.from(json.decode(str).map((x) => Payload.fromJson(x)));

String payloadToJson(List data) => json.encode(new List.from(data.map((x) => x.toJson())));

class Payload {

int userId;

int id;

String title;

String body;

Payload({

this.userId,

this.id,

this.title,

this.body,

});

factory Payload.fromJson(Map json) => new Payload(

userId: json["userId"],

id: json["id"],

title: json["title"],

body: json["body"],

);

Map toJson() => {

"userId": userId,

"id": id,

"title": title,

"body": body,

};

}

2020-08-13

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值