在Android中,如果我有想要在会话中持久保存的信息,我知道我可以使用SharedPreferences或创建SQLite数据库,甚至可以将文件写入设备并在以后阅读.
有没有办法只使用Flutter保存和恢复这样的数据?或者我是否需要为服务示例中的Android和iOS编写特定于设备的代码?
我有一个我的应用程序的页面,它只Card
包含一个Column
结尾的文件MaterialList
.即使我的列表只有一个或两个项目,卡片也会将其垂直空间扩展到屏幕底部,而不是停留在列表项目的末尾.该列的文件表明,这是正常的行为列("布局中的每个孩子一零或零弹性系数(例如,那些不展开)与无界垂直约束").我认为将列表包装在一个Flexible
可能达到我想要的效果但是当我尝试时我得到以下错误:
RenderFlex children have non-zero flex but incoming height constraints are unbounded.
I/flutter (11469): When a column is in a parent that does not provide a finite height constraint, for example if it is
I/flutter (11469): in a vertical scrollable, it will try to shrink-wrap its children along the vertical axis. Setting a
I/flutter (11469): flex on a child (e.g. using a Flexible) indicates that the child is to expand …
Run Code Online (Sandbox Code Playgroud) 我可能从根本上误解了它是如何工作的所以请纠正我错误的地方CustomPainter的paint方法文档说:"要在Canvas上绘制文本,使用TextPainter"所以在我的MyCustomPainter的绘制方法中我有以下内容:
TextSpan span = new TextSpan(text: 'Yrfc');
TextPainter tp = new TextPainter(text: span, textAlign: TextAlign.left);
tp.layout();
tp.paint(canvas, new Offset(5.0, 5.0));
Run Code Online (Sandbox Code Playgroud)
我尝试了各种偏移,(Offset.zero, Offset.infinite, new Offset(10.0, 10.0)
但我从来没有能够看到屏幕上画的文字.
该LinearProgressIndicator文档很有帮助显示valueColor财产的存在,甚至提到"要指定一个固定颜色的使用:新AlwaysStoppedAnimation(颜色)",但如果我尝试设置的颜色我得到LinearProgressIndicator有valueColor没有实例的setter错误并且类的构造函数只接受进度量的键和数值.
如果我想要一个具有自定义颜色的LinearProgressIndicator,我是否需要创建自己的类?真的没有办法指明这个吗?
我正在使用 Typescript、Redux 和 React,所有这些对我来说都是新的,所以这可能有一个我没有看到的简单修复。
我有一个 actions.ts 文件,其中包含一个像这样的枚举:
export enum AnimalTypes {
CAT = 'CAT',
DOG = 'DOG'
}
Run Code Online (Sandbox Code Playgroud)
我将它导入到我的 reducers.ts 文件中,并试图在这样的日志语句中使用它:
import {AnimalTypes} from './actions';
export function someFunction() {
// Print the word "CAT"
console.log(AnimalTypes[AnimalTypes.CAT]);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试启动我的网站时出现以下错误:
TypeError: Cannot read property 'CAT' of undefined
at someFunction (reducer.ts:5)
at combineReducers.js:20
etc.
Run Code Online (Sandbox Code Playgroud)
我的 IDE 没有给我任何错误,TSLint 也没有。我在网上阅读了一堆试图找到答案的文章,但最接近我的人是在他们的枚举中没有“export”关键字的人,而我有。
这里会发生什么?我会很感激任何帮助。
谢谢你。
编辑:这不是它有问题的反向映射,而是枚举的任何用法。这只是我能想到的最短用法。我实际上是在 switch 语句中使用它:
import {AnimalTypes} from './actions';
export function otherFunction(animal) {
switch (animal.type) {
case AnimalTypes.CAT:
// Do stuff
}
Run Code Online (Sandbox Code Playgroud)
当我构建上述代码时,出现此错误 Uncaught TypeError: Cannot …
我试图让我的UI显示两个按钮,一个略微重叠另一个,在一个全宽卡的中间.因为Stack只会和它的非定位子项一样宽,所以我添加了一个宽度为double.INIFINITY的SizedBox的非定位子项给自己一个画布来放置按钮,但我不知道放什么作为SizedBox的高度.理想情况下,我希望这个小部件能够适当地调整自己的大小,无论用户是在手机还是平板电脑上,所以我宁愿将SizedBox高度基于按钮的当前大小而不是仅对硬编码.
有没有办法找到给定现有小部件的大小?如果没有,那么确定需要在多种屏幕尺寸上看起来好的物体的高度的方法是什么?
示例代码:
new Card(
child: new Stack(
children: <Widget>[
new SizedBox(
width: double.INFINITY,
),
new Positioned(
left: 1.0,
child: getButtonOne(),
),
new Positioned(
right: 1.0,
child: getButtonTwo(),
),
],
),
),
Run Code Online (Sandbox Code Playgroud) 如您所见,右侧的人脸图标被剪掉了,我不知道为什么。
这是我的代码:
new Container(
padding: new EdgeInsets.fromLTRB(style.wideMargin, style.wideMargin * 2,
style.wideMargin, style.wideMargin),
decoration: new BoxDecoration(backgroundColor: Colors.white),
child: new Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
new Expanded(
child: new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
new PrecisionTextOverflow(
'Name of a thing',
lineWidth: style.longLineWrappingWidth,
mainTextStyle: style.blackParagraphText),
// Because PrecisionTextOverflow paints itself directly, the UI
// doesn't know its size so we use a blank Text object to make the
// column center itself correctly.
new Text(' '),
],
),
),
new Transform(
transform:
new …
Run Code Online (Sandbox Code Playgroud) 任何人都可以确认Flutter 的文档目录文件存储方法是否安全,或者 AppData 目录是否是 Android 存储其内部存储文件的位置/方式?
我正在考虑在设备上存储一些持久的本地数据,但我想确保我编写的数据不是纯文本或可供任何人/任何其他人访问。如果这是一个常规的 Android 应用程序,我会使用 Android 的内部存储,它表示存储的数据是“您的应用程序私有的,其他应用程序无法访问它们(用户也不能)。当用户卸载您的应用程序时,这些文件将被删除”。
Flutter 有自己的与平台无关的方式来读取和写入文件,其文档称将内容保存到其文档目录会存储“只有它可以访问的文件”。系统仅在删除应用程序时清除该目录。在 iOS 上,这对应于 NSDocumentsDirectory .在 Android 上,这是 AppData 目录。”
看起来这些都在谈论同一件事,因此符合我的安全标准,但这些是我不太熟悉的事情,我不想冒用户数据的风险。我尝试在 Google 上搜索 Android 上“AppData”目录中保存的内容,但大多数人都在谈论他们的 Android Studio 安装。
我有一个小部件,当点击它时,保存一个 ID 号,覆盖一个 CircularProgressIndicator 1000ms,然后弹出进度指示器并将用户路由到另一个页面。
这个带有 ProgressIndicator 和 Timer 的位是新的,它破坏了我的单元测试,现在给了我以下错误:
The following assertion was thrown running a test:
'package:flutter_test/src/binding.dart': Failed assertion: line 574 pos 12: '() {
'A Timer is still pending even after the widget tree was disposed.';
return _fakeAsync.nonPeriodicTimerCount == 0;
}': is not true.
Either the assertion indicates an error in the framework itself, or we should provide substantially
more information in this error message to help you determine and fix the underlying cause.
In either case, …
Run Code Online (Sandbox Code Playgroud) 我想在用户离开应用程序之前将其首选项写入文件,所以我在 Flutter 中寻找一些东西,比如 Android 的 onPause() 或 onStop() 方法。这是特定于平台的东西,以至于我需要为它编写服务并在这些情况下实际使用 Android/iOS 的特定方法,还是有办法只使用 Flutter/Dart 来做到这一点?
我有一个StatefulWidget(称为MyWidget
),其State(MyWidgetState
)具有一个myData
在initState()
以下期间初始化的字段:
void initState() {
super.initState();
myData = new myData(config.someField.getId());
}
Run Code Online (Sandbox Code Playgroud)
当用户按下按钮时,myData将添加到全局列表中或从全局列表中删除。
我正在尝试编写一个单元测试来测试此行为,但是我不知道如何访问MyWidgetState。我尝试将其包含在setup()中:
widget = MyWidget();
widgetState = widget.createState();
widgetState.init();
Run Code Online (Sandbox Code Playgroud)
但是它每次尝试进入initState()时都会崩溃,并抱怨“ someField在null上被调用”。没关系。我可能试图通过这种方式来作弊,我应该使用WidgetBuilder进行一些操作,或者使用MyWidget启动应用程序,然后在正确实例化树后在树中找到MyWidget。
如果做完所有这些,一旦完成,我如何访问该MyWidget的MyWidgetState以获取myData的副本并将其与全局列表进行比较?
当应用程序移到后台 (AppLifecycleState.paused) 时,我的应用程序将用户首选项写入本地文件,我想为此行为编写测试。
有没有办法在单元测试中模仿这一点?或者这是需要作为集成测试完成的事情吗?
现在看来,如果我将溢出设置为TextOverflow.ellipsis,它会切断第一行末尾的文本.我希望文本能够包装并填充第二行,但不能再进一步.如果内容超过第二行的长度,那么我希望它显示省略号.
有没有其他方法可以做到这一点?
flutter ×12
unit-testing ×2
android ×1
dart ×1
enums ×1
reactjs ×1
redux ×1
security ×1
typescript ×1