Flutter 在performLayout()期间引发了以下断言:
我是一个新手,我正在学习这门课程,但当我在windows机器上的Android模拟器上运行应用程序时,我遇到了这个错误,它会在整个屏幕上显示按钮 这个应用程序很简单,我只是想从用户那里获取数据,将其存储在s文件中,然后在控制台中打印出来 预期结果 我的代码:- 主飞镖Flutter 在performLayout()期间引发了以下断言:,flutter,Flutter,我是一个新手,我正在学习这门课程,但当我在windows机器上的Android模拟器上运行应用程序时,我遇到了这个错误,它会在整个屏幕上显示按钮 这个应用程序很简单,我只是想从用户那里获取数据,将其存储在s文件中,然后在控制台中打印出来 预期结果 我的代码:- 主飞镖 import 'dart:async'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:path_provider/pat
import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
void main() async{
var data = await readData();
if(data != null){
print(data);
}
runApp(
MaterialApp(
title: "IO",
home: Home(),
)
);
}
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
var _enterDataField = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Read/Write"),
centerTitle: true,
backgroundColor: Colors.greenAccent,
),
body: new Container(
padding: EdgeInsets.all(13.4),
alignment: Alignment.topCenter,
child: ListTile(
title: TextField(
controller: _enterDataField,
decoration: InputDecoration(
labelText: "Input Something"
),
),
subtitle: FlatButton(
color: Colors.redAccent,
onPressed: (){
print("Flat button");
writeData(_enterDataField.text);
},
child: new Column(
children: <Widget>[
Text("Save Data"),
Padding(padding: EdgeInsets.all(14.5)),
Text("Save data goes all"),
],
),
),
),
),
);
}
}
Future<String> get _localPath async {
final directory = await getApplicationDocumentsDirectory();
return directory.path; // /home/directory/
}
Future<File> get _localFile async {
final path = await _localPath;
return File("$path/data.txt"); // /home/directory/data.txt
}
Future<File> writeData(String message) async {
final file = await _localFile;
return file.writeAsString("$message");
}
Future<String> readData() async{
try{
final file = await _localFile;
String data = await file.readAsString();
return data;
}catch(e){
return "Nothing has been saved yet!";
}
}
导入'dart:async';
导入“dart:io”;
进口“包装:颤振/材料.省道”;
导入“package:path_provider/path_provider.dart”;
void main()异步{
var data=wait readData();
如果(数据!=null){
打印(数据);
}
runApp(
材料聚丙烯(
标题:“IO”,
home:home(),
)
);
}
类Home扩展了StatefulWidget{
@凌驾
_HomeState createState()=>\u HomeState();
}
类(HomeState扩展状态){
var_enterDataField=TextEditingController();
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“读/写”),
标题:对,
背景颜色:Colors.greenAccent,
),
主体:新容器(
填充:所有边缘设置(13.4),
对齐:alignment.topCenter,
孩子:ListTile(
标题:文本字段(
控制器:\输入数据字段,
装饰:输入装饰(
labelText:“输入内容”
),
),
字幕:扁平按钮(
颜色:Colors.redAccent,
已按下:(){
打印(“平面按钮”);
writeData(_enterDataField.text);
},
子:新列(
儿童:[
文本(“保存数据”),
填充(填充:所有边集(14.5)),
文本(“保存所有数据”),
],
),
),
),
),
);
}
}
未来获取\u本地路径异步{
最终目录=等待getApplicationDocumentsDirectory();
return directory.path;///home/directory/
}
未来获取\u本地文件异步{
最终路径=等待_localPath;
返回文件(“$path/data.txt”);///home/directory/data.txt
}
未来写入数据(字符串消息)异步{
final file=wait\u localFile;
返回文件.writeAsString($message”);
}
Future readData()异步{
试一试{
final file=wait\u localFile;
String data=wait file.readAsString();
返回数据;
}捕获(e){
return“尚未保存任何内容!”;
}
}
公开发行
version: 1.0.0+1
environment:
sdk: ">=2.1.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.2
path_provider: ^1.1.0
版本:1.0.0+1
环境:
sdk:“>=2.1.0
用这个
Widget _myWidget() {
return Padding(
padding: const EdgeInsets.all(24.0),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
TextField(decoration: InputDecoration(hintText: "Write Something")),
Container(
color: Colors.red,
width: 200,
height: 100,
child: Column(children: <Widget>[
Text("Save Data"),
Spacer(),
Text("Save Data goes here"),
],),
),
],
),
);
}
Widget\u myWidget(){
返回填充(
填充:常数边集全部(24.0),
子:列(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
TextField(装饰:输入装饰(hintText:“写东西”),
容器(
颜色:颜色,红色,
宽度:200,
身高:100,
子项:列(子项:[
文本(“保存数据”),
垫片(),
文本(“此处保存数据”),
],),
),
],
),
);
}
用这个
Widget _myWidget() {
return Padding(
padding: const EdgeInsets.all(24.0),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
TextField(decoration: InputDecoration(hintText: "Write Something")),
Container(
color: Colors.red,
width: 200,
height: 100,
child: Column(children: <Widget>[
Text("Save Data"),
Spacer(),
Text("Save Data goes here"),
],),
),
],
),
);
}
Widget\u myWidget(){
返回填充(
填充:常数边集全部(24.0),
子:列(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
TextField(装饰:输入装饰(hintText:“写东西”),
容器(
颜色:颜色,红色,
宽度:200,
身高:100,
子项:列(子项:[
文本(“保存数据”),
垫片(),
文本(“此处保存数据”),
],),
),
],
),
);
}
为了工作,我不得不将代码编辑成这样
FlatButton(
color: Colors.redAccent,
onPressed: (){
print("Flat button ${_enterDataField.text}");
writeData(_enterDataField.text.toString());
},
child: new Column(
children: <Widget>[
Text("Save Data"),
Padding(padding: EdgeInsets.all(14.5)),
FutureBuilder(
future: readData(),
builder: (BuildContext context, AsyncSnapshot<String> data){
if(data.hasData != null){
return Text(
data.data.toString(),
style: TextStyle(
color: Colors.white70,
),
);
}else{
return Text("No data has been saved");
}
},
),
],
),
)
FlatButton(
颜色:Colors.redAccent,
已按下:(){
打印(“平面按钮${u enterDataField.text}”);
writeData(_enterDataField.text.toString());
},
子:新列(
儿童:[
文本(“保存数据”),
填充(填充:所有边集(14.5)),
未来建设者(
future:readData(),
生成器:(BuildContext上下文,异步快照数据){
if(data.hasData!=null){
返回文本(
data.data.toString(),
样式:TextStyle(
颜色:颜色。白色70,
),
);
}否则{
返回文本(“未保存任何数据”);
}
},
),
],
),
)
为了工作,我不得不将代码编辑成这样
FlatButton(
color: Colors.redAccent,
onPressed: (){
print("Flat button ${_enterDataField.text}");
writeData(_enterDataField.text.toString());
},
child: new Column(
children: <Widget>[
Text("Save Data"),
Padding(padding: EdgeInsets.all(14.5)),
FutureBuilder(
future: readData(),
builder: (BuildContext context, AsyncSnapshot<String> data){
if(data.hasData != null){
return Text(
data.data.toString(),
style: TextStyle(
color: Colors.white70,
),
);
}else{
return Text("No data has been saved");
}
},
),
],
),
)
FlatButton(
颜色:Colors.redAccent,
已按下:(){
打印(“平面按钮${u enterDataField.text}”);
writeData(_enterDataField.text.toString());
},
子:新列(
儿童:[
文本(“保存数据”),
填充(填充:所有边集(14.5)),
未来建设者(
future:readData(),
生成器:(BuildContext上下文,异步快照数据){
if(data.hasData!=null){
返回文本(
data.data.toString(),
样式:TextStyle(
颜色:颜色。白色70,
),
);
}否则{
返回文本(“未保存任何数据”);
}
},
),
],
),
)
您介意现在接受答案吗?可以吗