gpt4 book ai didi

php - 从mysql获取数据到StreamBuilder Flutter

转载 作者:行者123 更新时间:2023-12-04 02:36:47 26 4
gpt4 key购买 nike

我有一个任务,我必须从 mysql 服务器获取数据并将其传递给 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)] 未处理的异常:FormatException:意外字符(字符 1)
E/flutter (10194): 已连接{"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...');
},
),
);
}
}

关于php - 从mysql获取数据到StreamBuilder Flutter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61419688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com