小编Man*_*nnu的帖子

Scoped Model,BLoC模式,StreamBuilder和Inherited Widget(或Model)我应该选择哪一个?为什么?

我想我现在至少有一个模糊的想法,
如何在我的应用程序中使用BLoC,Stream Builder
继承的小部件(或模型)
(没有什么特别的,但对我来说需要时间),
但玩Scoped模型
我有一个存在的危机:

我觉得他们大多数可以做同样的事情,或者
至少我可以
用它们中的任何一个获得相同的明显效果,
但我没有能力去理解
何时 以及为什么一个比另一个好.

我故意保持开放的问题不要因为我而讨厌我,
但我希望能更好地理解我正在做的事情
以及使用这一个或另一个事件在幕后发生的事情.

谢谢你的耐心等待.弗朗切斯科

Ps:我不能添加'范围模型'标签,如果可以的话,
它可能与像我这样的新手有关

flutter inherited-widget bloc stream-builder scoped-model

15
推荐指数
1
解决办法
1450
查看次数

单击 TextField 小部件时颤动小部件重建

我确定这是一个新手错误,但我似乎无法弄清楚这一点。在下面的应用程序中,当单击第二条路线中的文本字段时,键盘会打开并立即关闭。经过仔细调查,似乎每当它获得焦点时就会重新构建小部件,从而导致路线重置,使用户无法输入文本。

当我从表单中删除“密钥”时,问题不会发生。这不是一个长期修复,因为我需要“密钥”以便我可以验证表单。

有任何想法吗?

import 'package:flutter/material.dart';


void main() => runApp(MyApp());

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'My app',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.lightBlue,
        fontFamily: 'Nunito',
      ),
      home: LoginPage(),
    );
  }
}


class LoginPage extends StatefulWidget {

  @override
  LoginPageState createState() {
    return new LoginPageState();
  }
}

class LoginPageState extends State<LoginPage> {

  Widget build(BuildContext context) {

    final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();

    final registerButton = Padding(
      padding: EdgeInsets.symmetric(vertical: 16.0),
      child: RaisedButton(
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(24), …
Run Code Online (Sandbox Code Playgroud)

dart flutter

12
推荐指数
3
解决办法
7603
查看次数

使用检测和JUnit4测试重新创建Android Activity

我想为重新创建活动编写测试.执行旋转是可选的.

我希望测试能够被谷歌"祝福"的测试框架的最新版本编写.我是编写测试的新手,所以我想学习基本的,主流的,支持良好的工具.当我掌握基础知识时,任何第三方测试框架都会没问题.而且由于我想测试非常基本的,经常出现的场景,基本工具应该足够了,对吧?

最小测试代码:

public class MainActivity extends AppCompatActivity {

    static int creationCounter = 0;
    Integer instanceId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ++creationCounter;
        instanceId = new Integer(creationCounter);
        Log.d("TEST", "creating activity " + this + ", has id " + instanceId);
    }
}
Run Code Online (Sandbox Code Playgroud)

和测试类:

@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);

    @Test
    public void useAppContext() throws Exception {

        MainActivity activity1 = mActivityTestRule.getActivity();
        int act1 = activity1.instanceId.intValue();
        int counter1 = MainActivity.creationCounter;
        assertEquals(1, counter1);
        assertEquals(1, act1);


        Log.d("TEST", …
Run Code Online (Sandbox Code Playgroud)

java instrumentation android automated-tests android-junit

9
推荐指数
1
解决办法
1709
查看次数

在 Flutter 中的容器内制作可滚动文本

我正在尝试在视图中创建一个可滚动的文本:

// other widgets,

SingleChildScrollView(
  child: Container(
    height: 200,
    child: Text(
      "Long text here which is longer than the container height"))),

// other widgets
Run Code Online (Sandbox Code Playgroud)

文本比其父容器的高度长,但由于某种原因,尽管文本被包裹在SingleChildScrollView. 知道我做错了什么吗?

dart flutter flutter-layout

9
推荐指数
1
解决办法
2万
查看次数

即使FutureBuilder的底层未来没有改变,如何防止FutureBuilder的重建

在 Flutter 中,我得到了不需要的重建。在我的例子中,我使用 FutureBuilder 通过获取数据库结果来显示列表,这是一个未来并且依赖于查询参数。我试图使 FutureBuilder 的未来不会改变,如果查询参数不改变,但仍然每次都会调用 FutureBuilder 的构建器块。我怎样才能使 FutureBuilder 在其未来不改变的情况下不会重建自身。

下面是我的代码,每次构建 MusicList2 的父小部件时,MusicList2 都会重建,其 FutureBuilder 也会重建。

class MusicList2 extends StatefulWidget {
  final MusicRowActionCallback onTapItem;
  final MusicRowActionCallback onDoubleTap;
  final MusicRowActionCallback onLongPressed;
  final String facetName;
  final String facetValue;
  const MusicList2(
      {Key key,
        this.onTapItem,
        this.onDoubleTap,
        this.onLongPressed,
        this.facetName,
        this.facetValue}) : super(key: key);
  @override
  State<StatefulWidget> createState() {

    return _MusicList2State();
  }


}

class _MusicList2State extends State<MusicList2> {
  Future<List<Music>> loadMusicByFacet;
  @override
  Widget build(BuildContext context) {

    return FutureBuilder<List<Music>>(
      future:
        loadMusicByFacet,
      builder: (context, snapshot) {
        if (snapshot.data == …
Run Code Online (Sandbox Code Playgroud)

dart flutter

8
推荐指数
1
解决办法
5373
查看次数

Flutter GridView 项 wrap_content 高度

我是一名 android 开发人员,并且是 flutter 的新手。

我想创建一个GridViewwrap content项目高度(我的截图用钢笔绘制)。但是我已经尝试过以下代码,它只给了我方形网格项。我想知道如何获取高度环绕内容网格项,但我不知道也找不到如何获取它。请帮忙。谢谢你。

在此处输入图片说明

class CategoryItem extends StatelessWidget {
  final Category category;
  CategoryItem({Key key, @required this.category})
      : assert(category != null),
        super(key: key);

  @override
  Widget build(BuildContext context) {
    return Card(
      child: Text(
        category.name,
        style: TextStyle(fontSize: 34.0, fontWeight: FontWeight.bold),
      ),
      color: Colors.amberAccent,
    );
  }
}


class CategoryGrid extends StatefulWidget {

  final List<Category> items;

  const CategoryGrid({Key key, this.items}) : super(key: key);

  @override
  _CategoryGridState createState() => _CategoryGridState();
}

class _CategoryGridState extends State<CategoryGrid> {

  @override
  Widget build(BuildContext context) …
Run Code Online (Sandbox Code Playgroud)

flutter flutter-gridview

7
推荐指数
2
解决办法
1万
查看次数

如何在 Dart 中保存两位数的整数

如何在 Dart 中保存两位数的整数?

int i = 3;
String s = i.toString();
print(s);
Run Code Online (Sandbox Code Playgroud)

结果应该是03而不是3

dart

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

在 CupertinoNavigationBar 中,我如何在领先时显示后退按钮之外的按钮?

我试过这样的事情:

  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      navigationBar: CupertinoNavigationBar(
        middle: Text(widget.title),
      ),
      child: Center(
        child: Container(
          child: CupertinoButton.filled(
            child: const Text('Push screen'),
            onPressed: () {
              CupertinoNavigationBar navBar = CupertinoNavigationBar(
                leading: Row(children: <Widget>[
                  const CupertinoNavigationBarBackButton(),
                  CupertinoButton(
                    child: const Text('Button 2'),
                    padding: EdgeInsets.zero,
                    onPressed: () {},
                  ),
                ]),
              );
              Navigator.push(context, CupertinoPageRoute<CupertinoPageScaffold>(
                builder: (_) => CupertinoPageScaffold(
                  navigationBar: navBar,
                  child: Center(child: const Text('Content')),
                )
              ));
            },
          ),
        ),
      ),
    );
  }
Run Code Online (Sandbox Code Playgroud)

当点击按钮时,它失败了

I/flutter (30855): ??? EXCEPTION CAUGHT BY WIDGETS LIBRARY ????????????????????????????????????????????????????????????
I/flutter (30855): …
Run Code Online (Sandbox Code Playgroud)

dart flutter flutter-cupertino

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

如何从Android Studio中为Flutter构建签名的APK

有没有一种方法可以从Android Studio中为Flutter构建APK。

我看过以下指南:https : //flutter.dev/docs/deployment/android
但是这里flutter控制台用于构建apk。

android apk dart flutter

6
推荐指数
7
解决办法
8850
查看次数

如何解决 MacOS m1 上等待锁定文件的 gradle 超时?

我正在使用 Android Studio 2020.3.1 补丁 4(2022 年 1 月 19 日)、Gradle 7.0.2。Java 11 Kotlin 1.6.10、mac Pro 16 m1 arm64(2021)

我是 macOS 新手,从 Ubuntu 跳下来,发现了问题。我正在处理不同的项目,当我尝试切换到另一个项目时,我总是遇到下一个错误:

Gradle could not start your build.
Could not create service of type ResourceSnapshotterCacheService using 
GradleUserHomeServices.createResourceSnapshotterCacheService(). Timeout waiting to lock file hash cache
Run Code Online (Sandbox Code Playgroud)

当我尝试运行或同步同一项目时有时会发生这种情况。

解决方案find ~/.gradle -type f -name "*.lock" -delete 没有用,因为当我完成对 sdk 项目的更改并在另一个项目上测试它时,我一直运行它。相关解决方案kill也没有用

我希望有人能解决这个问题。谢谢 :)

错误文本:

Gradle 无法启动您的构建。

无法使用 GradleUserHomeServices.createResourceSnapshotterCacheService() 创建 ResourceSnapshotterCacheService 类型的服务。等待锁定文件哈希缓存超时(/Users/{user}/.gradle/caches/7.0.2/fileHashes)。它当前正被另一个 Gradle 实例使用。所有者PID:73387 我们的PID:73419 所有者操作:我们的操作:锁定文件:/Users/{user}/.gradle/caches/7.0.2/fileHashes/fileHashes.lock

macos android gradle android-studio apple-m1

6
推荐指数
0
解决办法
1502
查看次数