从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

回到顶部