升级 flutter(主版本和稳定版本)和 dart 后,我收到一个错误,提示我在项目中使用的各种 for-loops 没有启用实验 --flow-control-collections。我尝试使用此条目修复它,但这只会让事情变得更奇怪。所以,现在我有以下错误,告诉我我需要启用控制流集合实验,同时告诉我不再需要它。
我使用的每个 for 循环都会出现此错误。
这是我的 flutter --version 结果:
Stable:
Flutter 1.12.13+hotfix.5 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 27321ebbad (13 days ago) • 2019-12-10 18:15:01 -0800
Engine • revision 2994f7e1e6
Tools • Dart 2.7.0
Master:
Flutter 1.13.6-pre.16 • channel master • https://github.com/flutter/flutter.git
Framework • revision fcaf9c4070 (2 days ago) • 2019-12-21 14:03:01 -0800
Engine • revision 33813929e3
Tools • Dart 2.8.0 (build 2.8.0-dev.0.0 886615d0f9)
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决这个问题?
我正在开发一个 iOS/Android/Web 应用程序,在这里我使用 pdf 插件根据用户输入生成 PDF:https : //pub.dev/packages/pdf。在iOS和Android上,我可以访问文件系统,所以我可以先保存生成的pdf,然后用任何pdf显示插件打开它。
但是,对于 Flutter web,据我所知,无法访问任何类型的文件系统。我见过的所有 pdf 渲染插件都假设 pdf 文件要么存储在文件中,要么存储在网络上。我在看:
如何在flutter web上显示这个应用程序生成的pdf?有没有办法将 Uint8List 数据欺骗为文件,或者可能是另一种方法来解决这个问题?(我能想到的唯一解决方法是在生成文件后将文件上传到网络以显示它,但这似乎有点过分了。)
我正在尝试在初始应用程序启动时显示启动画面,直到正确检索到所有数据。检索由名为“ProductData”的类完成。一旦准备就绪,我想从启动页面导航到应用程序的主屏幕。
不幸的是,我找不到触发运行这种导航并侦听提供者的方法的好方法。
这是我用来测试这个想法的代码。具体来说,我想运行命令 Navigator.pushNamed(context, 'home'); 当变量 shouldProceed 变为真时。不幸的是,下面的代码给了我错误,“在构建过程中调用了 setState() 或 markNeedsBuild()”。
import 'package:catalogo/firebase/ProductData.dart';
import 'package:flutter/material.dart';=
import 'package:provider/provider.dart';
class RouteSplash extends StatefulWidget {
@override
_RouteSplashState createState() => _RouteSplashState();
}
class _RouteSplashState extends State<RouteSplash> {
bool shouldProceed = false;
@override
Widget build(BuildContext context) {
shouldProceed =
Provider.of<ProductData>(context, listen: true).shouldProceed;
if (shouldProceed) {
Navigator.pushNamed(context, 'home'); <-- The error occurs when this line is hit.
} else {
return Scaffold(
body: Center(
child: CircularProgressIndicator(),
),
);
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法可以根据提供者的结果来导航到页面?
我试图在颤动中的 DataTable() 的 DataColumn() 行中有多个居中的行。不过,似乎不支持居中或多行。
我的数据表代码看起来像这样:
class TestDayData extends StatelessWidget {
final List<String> timesList = [
"This is",
"a bunch",
"of strings",
];
final String day;
TestDayData({Key key, this.day}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
child: DataTable(
showCheckboxColumn: false,
columns: [
DataColumn(
label: Center(child: Text(day)),
numeric: false,
),
],
rows: timesList
.map(
(times) => DataRow(cells: [
DataCell(
Text(times.toString()),
),
]),
)
.toList(),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里制作了一个 dartpad 文件,以便在更大的上下文中显示上述代码。(我将多个 DataTable 放入 Row 小部件中,而不是在所有日子中使用一个 DataTable 的原因是因为我计划将它们中的每一个放入 Stack …
我正在尝试在事件类中组织一些站点类数据,但我收到“可选参数的默认值必须是常量”的消息,并且我已经为此苦苦挣扎了一段时间。
我发现:可选参数的默认值必须是常量,但我很难将该示例的具体细节与我的代码联系起来。
我的目的是使用 Site 类在 Site 构造函数中查找所有相关的站点数据(地址、电话等),然后将其存储在 Event 类中作为它自己的参数......但我不是当然是最好的方法。
这是代码:
class Event {
// passed
final TimeOfDay earliestTime;
final DateTime startTime;
final String siteName;
Site siteInfo;
Event(
{
@required this.earliestTime,
@required this.startTime,
@required this.siteName,
this.siteInfo = Site(siteName)} //<-- "Site(siteName) is underlined in red with the
// non_constant_default_value error
) { }
}
class Site {
String siteName;
Site(String siteName) {
this.siteName = "Site 1"; //<-- my attempt at a default value
int index = sites.indexOf(siteName);
phone = phones[index]; …Run Code Online (Sandbox Code Playgroud) 我正在为 PaginatoredDataTable 编写代码,但是当我尝试使用 showDialog() 时我迷失了方向。我想要的是当用户按下数据表中的一行时,会出现一个对话框,其中包含该行包含的信息。我遇到的问题是对话框的上下文,因为它需要上下文,而 DataRow 类本身没有上下文。
为了识别已选择一行,您必须在 DataRow 类中使用 onSelectChanged()。在这里,我尝试调用该对话框,但我必须使用全局导航键。
class CalendarResultsDataSource extends DataTableSource {
final List<CalendarResult> _calendarResults;
CalendarResultsDataSource(this._calendarResults);
@override
DataRow getRow(int index) {
assert(index >= 0);
if (index >= _calendarResults.length) return null;
final CalendarResult calendarResult = _calendarResults[index];
return DataRow.byIndex(
index: index,
selected: calendarResult.selected,
onSelectChanged: (bool value) {
print(value);
print(calendarResult.agency);
Dialogs.showAuditInfo(
navigatorKey.currentState.overlay.context, calendarResult); //<-- this feels hacky
},
cells: <DataCell>[
DataCell(Container(
height: double.infinity,
width: double.infinity,
color: index.isEven
? ColorDefs.colorAlternatingDark
: ColorDefs.colorDarkBackground,
child: Padding(
padding: const EdgeInsets.fromLTRB(6.0, 4.0, 4.0, 4.0), …Run Code Online (Sandbox Code Playgroud) 我试图在初始应用程序启动时显示启动屏幕,直到正确检索到所有数据为止。一旦出现,我想导航到应用程序的主屏幕。
不幸的是,我找不到触发运行此类导航的方法的好方法。
这是我用来测试这个想法的代码。Navigator.pushNamed(context, 'home');具体来说,我想在变量变为 true 时运行命令shouldProceed。现在,我能想到的唯一方法是显示一个按钮,我需要按下该按钮来触发导航代码:
import 'package:flutter/material.dart';
import 'package:catalogo/src/navigationPage.dart';
class RouteSplash extends StatefulWidget {
@override
_RouteSplashState createState() => _RouteSplashState();
}
class _RouteSplashState extends State<RouteSplash> {
ValueNotifier<bool> buttonTrigger;
bool shouldProceed = false;
_fetchPrefs() async { //this simulates the asynchronous function
await Future.delayed(Duration(
seconds:
1)); // dummy code showing the wait period while getting the preferences
setState(() {
shouldProceed = true; //got the prefs; ready to navigate to next page.
});
}
@override
void initState() {
super.initState(); …Run Code Online (Sandbox Code Playgroud) 我很快就要为客户发布一个应用程序,我担心随着时间的推移支持该产品,并且我希望获得一些在操作期间记录异常和一般信息的方法。
我正在考虑使用 F_Logs 包https://pub.dev/packages/f_logs在设备上存储数据,直到我接到有关问题的电话。然后,我会让用户(大约有 30 个左右)按下按钮将文件上传到我的服务器上的端点以读取他们拥有的内容。
这个常用吗?有更好的选择或最佳实践吗?
我正在尝试使用嵌套类的一个版本在 Flutter 中的整个应用程序中创建常量字符串树。我希望它们能够嵌套,以便随着应用程序的增长快速找到 const 字符串,但仍然具有使用 Text() 小部件的 const 关键字的额外“速度”。
但是,我很难尝试在 const Text() 小部件中使用它们。
这是一个示例:
class Strings {
static const String ok = 'OK';
static TechnicianStrings technicianStrings = TechnicianStrings();
}
class TechnicianStrings {
TechnicianStrings();
final String createTech = 'Create Technician';
final String technician = 'Technician';
}
Run Code Online (Sandbox Code Playgroud)
在整个应用程序中,我想像这样使用这些常量字符串:
const Text(Strings.ok), // <-- this works
const Text(Strings.technicianStrings.technician), //<-- only works without 'const'
const Text(Strings.technicianStrings.createTech), //<-- only works without 'const'
Run Code Online (Sandbox Code Playgroud)
但是,当我对文本小部件使用 const 关键字时,出现“常量创建的参数必须是常量表达式”的错误。
我尝试对 TechnicianStrings 的成员使用不同的“const 和 static”名称,但出现诸如文本小部件“无效常量”之类的错误。我还将 TechnicianStrings 定义为 static const,并收到以下行的错误:“常量变量必须使用常量值进行初始化”:
static const …Run Code Online (Sandbox Code Playgroud) 我创建了一个应用程序,可以下载大量信息以供离线使用,其中大部分是照片。在应用程序中,我想使用一个小部件,它允许我具有平移/缩放效果,但我发现的那些似乎不能很好地与 Image.file() 一起使用,而是使用 ImageProviders。
例如,Photo_View只接受 AssetImage 和 NetworkImage 图像,它们都继承自 ImageProvider,而 Image.file() 继承自 Diagnosticable。我见过的所有软件包都以基本相同的方式运行。
所以,我的问题是如何将 Image.file() 数据转换为 ImageProvider 格式。
我正在为 flutter web 编写一个“蛇”视频游戏。我想使用箭头键四处移动,但无法使用 RawKeyboardListener 捕获按键。我相信这是因为我没有关注正确的节点。此时,我只是想打印出我收到的击键。
这是我的测试代码:
Scaffold(
appBar: AppBar(),
body: RawKeyboardListener(
focusNode: FocusNode(), //<-- I'm not sure what to put here... and it's required.
onKey: (RawKeyEvent event) {
print(event.data.logicalKey.keyId);
},
child: GridView.builder(
itemCount: 300,
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 30),
itemBuilder: (BuildContext context, int index) {
return Container(
padding: EdgeInsets.all(5.0),
color: Colors.grey,
child: getPixels(index));
},
),
),
);
Run Code Online (Sandbox Code Playgroud)