从mysql获取数据到StreamBuilder Flutter
我有一个分配,我必须将数据从mysql服务器转移到flutter中,然后将其传递给StreamBuilder,我试图使用与我们在firebase中使用的相同的类,现在我在传递已经采用的数据时遇到了问题从服务器到StreamBuilder,我记得我必须使用其他类型的快照,任何帮助。
import 'package:flutter/material.dart';import 'package:http/http.dart' as http;
import 'dart:convert';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Server',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.pink,
),
home: MyHomePage(title: 'Flutter Server App'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
get documents => null;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
centerTitle: true,
),
);
}
Future getData() async{
var url = 'https://milk-white-reveille.000webhostapp.com/get.php';
http.Response response = await http.get(url);
var data = jsonDecode(response.body);
print(data.toString());
}
@override
void initState() {
getData();
}
}
class BookList extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new StreamBuilder(
stream: _MyHomePageState.getData().snapshot(),
builder: (BuildContext context, AsyncSnapshot<_MyHomePageState> snapshot) {
if (snapshot.hasData) return new Text('Loading...');
return new ListView(
children: snapshot.data.documents.map((document) {
return new ListTile(
title: new Text(document['title']),
subtitle: new Text(document['type']),
);
}).toList(),
);
},
);
}
}
新代码是这个
import 'package:flutter/material.dart';import 'package:http/http.dart' as http;
import 'dart:convert';
import 'dart:async';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Server',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.pink,
),
home: MyHomePage(title: 'Flutter Server App'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
StreamController _streamController = StreamController();
Timer _timer;
var data;
Future getData() async {
var url = 'https://milk-white-reveille.000webhostapp.com/get.php';
http.Response response = await http.get(url);
String jsonsDataString = response.body.toString(); // toString of Response's body is assigned to jsonDataString
data = jsonDecode(jsonsDataString);
print(data.toString());
//Add your data to stream
_streamController.add(data);
}
@override
void initState() {
getData();
//Check the server every 5 seconds
_timer = Timer.periodic(Duration(seconds: 5), (timer) => getData());
super.initState();
}
@override
void dispose() {
//cancel the timer
if (_timer.isActive) _timer.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Home"),
),
body: new _MySql()
);
}
}
class _MySql extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder(
stream: _MyHomePageState()._streamController.stream,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData)
return ListView(
children: snapshot.data((data) {
return ListTile(
title: Text(data['title']),
subtitle: Text(data['type']),
);
}).toList(),
);
return CircularProgressIndicator();
},
),
);
}
}
但是在手机屏幕上正在加载…从终端出现了这个 E/flutter (10194):
[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception:
FormatException: Unexpected character (at character 1) E/flutter (10194):
connected{"title":"maen","type":"dev"}
回答:
如果您想与StreamBuilder定期使用它;
import 'dart:async';import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Server',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.pink,
),
home: MyHomePage(title: 'Flutter Server App'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
StreamController _streamController = StreamController();
Timer _timer;
Future getData() async {
var url = 'https://milk-white-reveille.000webhostapp.com/get.php';
http.Response response = await http.get(url);
var data = jsonDecode(response.body);
//Add your data to stream
_streamController.add(data);
}
@override
void initState() {
getData();
//Check the server every 5 seconds
_timer = Timer.periodic(Duration(seconds: 5), (timer) => getData());
super.initState();
}
@override
void dispose() {
//cancel the timer
if (_timer.isActive) _timer.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
centerTitle: true,
),
body: StreamBuilder(
stream: _streamController.stream,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData)
return ListView(
children: snapshot.data.map((document) {
return ListTile(
title: Text(document['title']),
subtitle: Text(document['type']),
);
}).toList(),
);
return Text('Loading...');
},
),
);
}
}
以上是 从mysql获取数据到StreamBuilder Flutter 的全部内容, 来源链接: utcz.com/qa/398391.html