我尝试在 Dart 中为 Flutter 应用程序的业务逻辑进行测试驱动开发(TDD)。对于快速 TDD 周期,运行测试的启动时间感觉有点慢。在我的机器上大约是 4-5 秒。
我正在使用package:test/test.dart,因此无需将应用程序部署到设备上,并且测试可以在 Dart VM 上本地运行。测试本身运行得很快。
使用 Java 的 JUnit 和本地 Java VM 开发 Android 本机应用程序时,启动时间要快得多 < 1 秒。
有没有办法让 Dart 中的单元测试的启动时间也那么快?(无需购买速度更快的物理机)。
编辑: 我的 Dart 版本:
Dart 测试在 Flutter 项目中。我通过右键单击带有测试的文件或仅使用 IDE 中的“>”运行测试按钮,在 Android Studio 中启动 Dart 测试。然后 Android Studio 会生成一个运行配置,因此我可以使用键盘快捷键快速启动它。
我想通过老式的ViewModel(而不是来自Google新的Architecture Components)中的Androids数据绑定功能来更改SearchView的查询参数。SearchView驻留在工具栏中。
在ViewModel我要调用setQuery(String)和onSubmit查询我想用它来处理。在当前实现中(请参见下面的代码部分),SearchViews查询值保持为空。这很清楚,因为没有在BindingAdapter for附近使用字段查询SearchView.setQuery()。但是我不知道如何从代码更改其查询值。setQuery(SearchView, String)不能调用BindingAdapter ,因为中没有SearchView,因此ViewModel不应为MVVM架构保持其清洁。
绑定SearchView的其他直接可用属性,例如:QueryHint和queryTextListener可以正常工作。尽管查询属性SearchView具有设置器(SearchView.setQuery(String)),但不能直接在中使用。
我能做什么?
XML部分和相应的MainViewModel看起来像这样:
<data>
<variable
name="vm"
type="com.example.MainViewModel"/>
</data>
<android.support.v7.widget.Toolbar
android:id="@+id/activity_toolbar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="0dp"
android:layout_marginRight="0dp"
android:layout_marginTop="0dp"
android:background="@color/colorPrimary"
android:title="@string/app_name"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:subtitleTextColor="@color/white"
app:title="@string/app_name"
app:titleTextColor="@color/white" >
<android.support.v7.widget.SearchView
android:id="@+id/searchView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:iconifiedByDefault="false"
android:queryHint="@{vm.queryHint}"
app:iconifiedByDefault="false"
app:queryTextListener="@{vm.onQueryTextListener}"
app:query="@{vm.query}" />
</android.support.v7.widget.Toolbar>
Run Code Online (Sandbox Code Playgroud)
ViewModel:
public class MainViewModel extends BaseObservable {
private doSomething() {
setQueryHint("TheHintText")
setQuery("MyQuery");
}
private void setQueryHint(String queryHint) {
this.queryHint = queryHint;
notifyPropertyChanged(BR._all); …Run Code Online (Sandbox Code Playgroud) 使用颤振。我在 BottomNavigationBar-Widget 的子级中创建了一个 Slider Widget。定义了 onChanged 函数,该函数应该更改 Slider 的值。
\n\n如果我将滑块放在一个简单的脚手架小部件中,它就可以正常工作。
\n\n如何在 BottomNavigationBar 中实现此功能?\n是否缺少任何内容(侦听器/回调或其他内容),我必须在 BottomNavigationBar-Widget 中声明?
\n\n我正在使用 Android Studio 3.1.4 的 Flutter 稳定通道。
\n\n它遵循非工作代码。还有一个没有 BottomNavigationBar 的小部件,其中滑块按预期工作。
\n\nimport \'package:flutter/material.dart\';\n\nvoid main() => runApp(new MyApp());\n\nclass MyApp extends StatelessWidget {\n @override\n Widget build(BuildContext context) {\n return new MaterialApp(\n title: \'Flutter Issue Slider in BottomNavigationBar\',\n theme: new ThemeData(\n primarySwatch: Colors.blue,\n ),\n home: new SliderInNavigationBar(),\n // home: new MyHomePage(),\n );\n }\n}\n\nclass SliderInNavigationBar extends StatefulWidget {\n @override\n State<StatefulWidget> createState() {\n return new _SliderInNavigationBarScreenState();\n …Run Code Online (Sandbox Code Playgroud) 我们计划将应用程序部署到 Google Playstore 中的不寻常的顺序。
设置: 我们确实向美国和英国的所有客户推出了版本 V1.0,然后又推出了 V2.0。我们对美国的后端进行了重大改变。并在美国分阶段推出了 V2.5。V2.5 在英国无法使用,但我们很快就会推出。现在我们在英国发生了一起事件,需要在那里发布修补程序版本 V2.0.1。
目标: 英国客户确实获得 V2.0.1。而美国客户保留 V2.5 版本。
我们尝试了:
下一个想法:
问题:以上想法可行吗?从技术上讲,首次展示是在商店中设置的。这就是任何修补程序的工作方式,对吗?但实际上每个英国客户都会获得 V2.0.1,而阶段性的 V2.5 仅在美国推出。另一个风险是,V2.5 在美国的推出获得批准可能需要几天时间。
我在使用带有BaseAdapter的Android DataBinding为Spinner实现CustomAdapter时遇到问题.
数据有两个值.我想使用两个TextView.CustomAdapter必须从BaseAdapter继承,ArrayAdapter的简单变体仅支持一个TextView.从长远来看,第二个TextView可能是一个ImageView,因此将两个值合并为一个String以便能够使用ArrayAdapter仍然无济于事.
我也尝试过:为了确保这个想法和Spinner正常工作,我实现了一个没有DataBinding的版本我在chrislizh项目的https://github.com/chrislizh/SpinnerTwoWayDataBindingDemo上实现了我的数据绑定实现,它正在使用ArrayAdapter.我也尝试调用:binding.executePendingBindings(),并试图不使用ViewHolder模式.
问题导致细节:该项目是关于行星.旋转器允许选择行星.每个行星都有一个名字和一个距离.将显示这两个值.我实现CustomAdapter的结果,名为PlanetAdapter,DataBinding在选择后显示第一个项目两次.查看截图.选择除第一个项目之外的任何其他行星,使用选择"切换"其位置,并继续显示两次.这样,显示的列表中始终缺少一个行星.
PlanetAdapter的代码以及在MainActivty的onCreate方法中创建它的调用:
PlanetAdapter
public class PlanetAdapter extends BaseAdapter
{
private int itemLayoutResourceId;
private final List<Planet> planets;
private LayoutInflater inflater;
public PlanetAdapter(@NonNull Context context, @LayoutRes int itemLayoutResourceId, List<Planet> planets)
{
inflater = LayoutInflater.from(context);
this.itemLayoutResourceId = itemLayoutResourceId;
this.planets = planets;
}
@Override
public int getCount()
{
return planets.size();
}
@Override
public Object getItem(int position)
{
return planets.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView, …Run Code Online (Sandbox Code Playgroud)