如何在Flutter中显示initState上的数据?
How to display data on initState in Flutter?
我是新手,谁能回答我的问题。
我正在通过从 Java 到 Flutter 的跨平台从蓝牙获取数据。
我遇到的问题是,当我单击某个按钮时,我只会获取数据并显示在 flutter UI 中,但我必须在初始状态下显示数据。
在页面加载时发生了什么或我应该如何获取数据。
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'dart:convert';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
static const recvMsg = const MethodChannel('simpleReceiveChannel');
String fromBle = "waiting for message";
String _receivedMsg = "waiting to receive....";
Future<void> receivingMsg() async {
try {
var result = await recvMsg.invokeMethod('receiveMsgFunction');
_receivedMsg = result;
print("Result of Receiving: $result");
} on PlatformException catch (e) {
print("error + '${e.message}' ");
}
setState(() {
fromBle = _receivedMsg;
});
}
@override
void initState() {
super.initState();
receivingMsg();
}
@override
Widget build(BuildContext context) {
return Center(
child: Column(
children: [
ElevatedButton(
child: Text('Refresh'),
onPressed: () {
receivingMsg();
},
),
Text(fromBle),
],
));
}
}
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
//import 'dart:convert';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
static const recvMsg = const MethodChannel('simpleReceiveChannel');
String fromBle = "waiting for message from Bluetooth";
//String _receivedMsg = "waiting to receive....";
bool isData = false;
Future<void> receivingMsg() async {
try {
var result = await recvMsg.invokeMethod('receiveMsgFunction');
if (result == null) {
isData = false;
} else {
isData = true;
}
// _receivedMsg = result;
fromBle = result;
print("Result of Receiving: $result");
} on PlatformException catch (e) {
print("error + '${e.message}' ");
}
setState(() {
isData = true;
// fromBle = _receivedMsg;
});
}
@override
void initState() {
super.initState();
receivingMsg();
}
Widget noDataScreen() {
return Text("Data yet to receive");
}
Widget dataScreen() {
return FutureBuilder(
future: receivingMsg(),
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
return Center(
child: Column(
children: [
ElevatedButton(
child: Text('Refresh'),
onPressed: () {
receivingMsg();
},
),
Text(fromBle),
],
));
},
);
}
@override
Widget build(BuildContext context) {
return isData ? dataScreen() : noDataScreen();
}
}
使用未来的构建器将您的中心小部件包装在构建方法中,并在未来调用该方法而不是单击按钮。
喜欢
FutureBuilder(
future: receivingMsg(),
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
return Center(
child: Column(
children: [
ElevatedButton(
child: Text('Refresh'),
onPressed: () {
receivingMsg();
},
),
Text(fromBle),
],
));
},);
我是新手,谁能回答我的问题。 我正在通过从 Java 到 Flutter 的跨平台从蓝牙获取数据。 我遇到的问题是,当我单击某个按钮时,我只会获取数据并显示在 flutter UI 中,但我必须在初始状态下显示数据。 在页面加载时发生了什么或我应该如何获取数据。
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'dart:convert';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
static const recvMsg = const MethodChannel('simpleReceiveChannel');
String fromBle = "waiting for message";
String _receivedMsg = "waiting to receive....";
Future<void> receivingMsg() async {
try {
var result = await recvMsg.invokeMethod('receiveMsgFunction');
_receivedMsg = result;
print("Result of Receiving: $result");
} on PlatformException catch (e) {
print("error + '${e.message}' ");
}
setState(() {
fromBle = _receivedMsg;
});
}
@override
void initState() {
super.initState();
receivingMsg();
}
@override
Widget build(BuildContext context) {
return Center(
child: Column(
children: [
ElevatedButton(
child: Text('Refresh'),
onPressed: () {
receivingMsg();
},
),
Text(fromBle),
],
));
}
}
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
//import 'dart:convert';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
static const recvMsg = const MethodChannel('simpleReceiveChannel');
String fromBle = "waiting for message from Bluetooth";
//String _receivedMsg = "waiting to receive....";
bool isData = false;
Future<void> receivingMsg() async {
try {
var result = await recvMsg.invokeMethod('receiveMsgFunction');
if (result == null) {
isData = false;
} else {
isData = true;
}
// _receivedMsg = result;
fromBle = result;
print("Result of Receiving: $result");
} on PlatformException catch (e) {
print("error + '${e.message}' ");
}
setState(() {
isData = true;
// fromBle = _receivedMsg;
});
}
@override
void initState() {
super.initState();
receivingMsg();
}
Widget noDataScreen() {
return Text("Data yet to receive");
}
Widget dataScreen() {
return FutureBuilder(
future: receivingMsg(),
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
return Center(
child: Column(
children: [
ElevatedButton(
child: Text('Refresh'),
onPressed: () {
receivingMsg();
},
),
Text(fromBle),
],
));
},
);
}
@override
Widget build(BuildContext context) {
return isData ? dataScreen() : noDataScreen();
}
}
使用未来的构建器将您的中心小部件包装在构建方法中,并在未来调用该方法而不是单击按钮。
喜欢
FutureBuilder(
future: receivingMsg(),
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
return Center(
child: Column(
children: [
ElevatedButton(
child: Text('Refresh'),
onPressed: () {
receivingMsg();
},
),
Text(fromBle),
],
));
},);