小编Min*_*sky的帖子

Flutter/Dart 中的 TDD。如何减少启动时间

我尝试在 Dart 中为 Flutter 应用程序的业务逻辑进行测试驱动开发(TDD)。对于快速 TDD 周期,运行测试的启动时间感觉有点慢。在我的机器上大约是 4-5 秒。

我正在使用package:test/test.dart,因此无需将应用程序部署到设备上,并且测试可以在 Dart VM 上本地运行。测试本身运行得很快。

使用 Java 的 JUnit 和本地 Java VM 开发 Android 本机应用程序时,启动时间要快得多 < 1 秒。

有没有办法让 Dart 中的单元测试的启动时间也那么快?(无需购买速度更快的物理机)。

编辑: 我的 Dart 版本:

  • 颤振医生 -v: 2.0.0-dev.54.0.flutter-46ab040e58
  • Dart 插件使用:2.0.0-edge.c080951d45e79cd25df98036c4be835b284a269c 并且在我的颤振安装中:C:\flutter\bin\cache\dart-sdk

Dart 测试在 Flutter 项目中。我通过右键单击带有测试的文件或仅使用 IDE 中的“>”运行测试按钮,在 Android Studio 中启动 Dart 测试。然后 Android Studio 会生成一个运行配置,因此我可以使用键盘快捷键快速启动它。

在此处输入图片说明

tdd unit-testing dart flutter

23
推荐指数
1
解决办法
2700
查看次数

工具栏中的SearchView的Android数据绑定查询属性

我想通过老式的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)

android searchview android-databinding

6
推荐指数
1
解决办法
2027
查看次数

BottomNavigationBar 中的 Flutter 滑块不更新

使用颤振。我在 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\n
import \'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)

slider flutter

5
推荐指数
1
解决办法
2601
查看次数

Google PlayStore 在分阶段推出时对先前版本进行热修复

我们计划将应用程序部署到 Google Playstore 中的不寻常的顺序。

设置: 我们确实向美国和英国的所有客户推出了版本 V1.0,然后又推出了 V2.0。我们对美国的后端进行了重大改变。并在美国分阶段推出了 V2.5。V2.5 在英国无法使用,但我们很快就会推出。现在我们在英国发生了一起事件,需要在那里发布修补程序版本 V2.0.1。

目标: 英国客户确实获得 V2.0.1。而美国客户保留 V2.5 版本。

我们尝试了:

  • 仅在英国推出 2.0.1。这对美国和收到 V1.0 的美国客户禁用了 V2.5(因为 V2.0.1 仅在英国推出,V2.5 已被 V2.0.1 覆盖)

下一个想法:

  1. 向英国和美国的每位客户推出 V2.0.1
  2. 等待 Google PlayStore 批准
  3. 批准后立即再次向美国推出V2.5

问题:以上想法可行吗?从技术上讲,首次展示是在商店中设置的。这就是任何修补程序的工作方式,对吗?但实际上每个英国客户都会获得 V2.0.1,而阶段性的 V2.5 仅在美国推出。另一个风险是,V2.5 在美国的推出获得批准可能需要几天时间。

android google-play google-play-console

5
推荐指数
1
解决办法
749
查看次数

如何做Android数据绑定从BaseAdapter for Spinner继承的CustomAdapter?

我在使用带有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)

android android-databinding

3
推荐指数
1
解决办法
2127
查看次数