RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-392336

Александр Инженер's questions

Martin Hope
Александр Инженер
Asked: 2021-11-30 05:02:26 +0000 UTC

Flutter ListView key 有什么区别:UniqueKey() 和 GlobalKey()

  • 1

ListView 传递了一个列表。有必要通过点击从这个 ListView 中删除一个元素。当 ListView builder 的参数没有指定key:或指定时,GlobalKey()那么当 list 元素被删除时,元素的编号飞快,列表在视觉上正确显示,但是如果你尝试编辑某些元素,那么这样的元素会有不正确的数据。例如,如果在 ListView 构建器中指定了某些唯一标识符,key: UniqueKey()则 ListView 元素的行为变得正确且可预测,但在删除任何元素后,列表将自动滚动到最开始,到它的第一个元素。我想从 ListView 中删除一个元素,以便之后它的行为是正确的,并且 ListView 本身不会滚动到最开始。

在这里,我存储了一个列表,我将其传递给 ListView

List<Channel> _editorChannels;

这就是我删除元素的方式。我通过唯一 ID 在列表中查找它并将其删除。

onDelete(Channel c) {
    final f = _editorChannels.firstWhere((element) => element.Id == c.Id,
        orElse: () => null);
    if (f != null) setState(() => _editorChannels.remove(f));
  }

这就是 ListView 的样子,它位于 DefaultTabController 选项卡之一中,我将仅简要显示一个选项卡的代码,以免代码过多。

      Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              Expanded(
                child: Scaffold(
                  body: ListView.builder(
                      key: UniqueKey(),
                      itemCount: _editorChannels == null
                          ? 0
                          : _editorChannels.length,
                      itemBuilder: (context, index) {
                        final item = _editorChannels[index];
                        return Card(
                          shadowColor: Colors.black26,
                          margin: EdgeInsets.all(3.0),
                          clipBehavior: Clip.antiAlias,
                          shape: RoundedRectangleBorder(
                            borderRadius: BorderRadius.circular(2),
                          ),
                          child: ListTile(
                              title: Container(
                                  child: Text(
                                item.Name != null ? item.Name : '',
                                style: new TextStyle(
                                    fontWeight: FontWeight.bold,
                                    fontSize: 16.0),
                              )),
                              subtitle: Text(item.Url),
                              onTap: () => {
                                    Navigator.push(
                                      context,
                                      MaterialPageRoute(
                                          builder: (context) =>
                                              ChewieDemo(channel: item)),
                                    )
                                  },
                              isThreeLine: false,
                              leading: getIconbyId(item.Status),
                              trailing: PopMenuWidget(
                                channel: item,
                                onDelete: () => onDelete(item),
                                onUpdate: (item) => onUpdate(item),
                              )),
                        );
                      }),
                ),
              )
            ],
          ),
listview
  • 1 个回答
  • 10 Views
Martin Hope
Александр Инженер
Asked: 2021-11-26 21:50:13 +0000 UTC

Flutter为什么在创建小部件时调用回调函数?

  • 1

我第一次看到颤振中的回调,我不明白它们是如何实现的。我有一个回调,它将传递给它的所有内容打印到控制台

onDelete(dynamic val) {
print(val);
}

我将它传递给小部件

trailing: PopMenuWidget(                          
 onDelete: onDelete(item),
)),

创建 PopMenuWidget 时,会onDelete自动触发回调。并且连续几次。国内这种行为并没有什么特别可怕的,但是我的回调是正常的,但是如果我将 setState() 传递给它,那么小部件会在创建时崩溃error setState() or markNeedsBuild called during build。

flutter
  • 1 个回答
  • 10 Views
Martin Hope
Александр Инженер
Asked: 2020-07-17 05:18:40 +0000 UTC

FutureBuilder 和 ListView 在达到屏幕长度的 80% 时的颤动滚动事件?

  • 0

我有一个 REST 应用程序,它从站点获取逐页信息并将其转换为 ListView 列表。当到达滚动结束时触发需要接收新部分数据的事件,看起来像这样

_controller.addListener(() {

   //При достижении конца прокрутки
    if (_controller.position.atEdge) {

        //Запрашиваю новую порцию  данных
    }
});

我希望数据不是在屏幕的最后被请求,而是更早一点,这样用户就不必等待新的数据部分加载,它们会在后台被抽出。为此,我尝试了此选项

 _controller.addListener(() {

    //Сравниваю текущую позицию скролинга списка с максимальной минус какоё-то значение, что-бы  срабатывало заранее
    if (_controller.position.pixels >=  _controller.position.maxScrollExtent-200) {
     
       //Запрашиваю новую порцию  данных

     }
 });

也就是说,它确定了当前的滚动位置,并将其与最大的位置进行比较,但要早一点,相差 200 像素。这个选项不起作用,因为返回JSON数据的函数是异步工作的,并且事件触发多次,你在几秒钟内得到10-15个请求,这些请求是随机处理的,不严格的顺序,并且数据是混合的因为这

我尝试了该选项_controller.position.pixels == _controller.position.maxScrollExtent-200,但它根本不起作用,因为当前位置的滚动非常准确,根本不可能进入这个值,事件根本不起作用。有没有办法让事件在列表的某个部分提前触发一次,在它完成之前,一种延迟加载?

listview
  • 1 个回答
  • 10 Views
Martin Hope
Александр Инженер
Asked: 2020-07-06 22:50:38 +0000 UTC

Flutter 如何减少使用 Zip 归档器打包的项目大小?

  • 0

为了备份一个颤振项目,我将它打包到一个带有时间戳的 Zip 存档中。但由于某种原因,这样一个包含简单程序代码的存档的最终大小约为 300mb。如果您采用相同的 androyd naitive 项目,例如,对于 Kotlin,那么在归档期间只需要 ~ 30mb。告诉我可以从项目中丢弃什么以减少归档后的大小。

flutter
  • 1 个回答
  • 10 Views
Martin Hope
Александр Инженер
Asked: 2020-06-16 02:19:22 +0000 UTC

Android LiveData MVVM 返回发射并使用 DAO 添加到数据库

  • 2

在 ViewModel 内部,使用改造,我以标准方式获取数据

fun getUsers() = liveData(Dispatchers.IO) {
    emit(Resource.loading(data = null))
    try {
        emit(Resource.success(data = nalRepository.getNal()))
    } catch (exception: Exception) {
        emit(Resource.error(data = null, message = exception.message ?: "Error      Occurred!"))
    }
}

是否可以在将这些数据返回到 liveData 之前将其保存到数据库中

private val db = AppDatabase.getInstance(getApplication())
private val dao = db!!.CurrencyDao()
private val service = Executors.newFixedThreadPool(1)

fun addListBook(list: List<Currency>)
{
    service.submit {
        dao.insertList(list)
    }
   service.shutdown()
}

我addListBook()在订阅 liveData 时已经保存在 Fragment 中,但是直接在 ViewModel 中执行会更合乎逻辑,但不清楚如何爬emit(Resource.success(data = nalRepository.getNal()))取并将其发送到数据库。也就是说,它不起作用

 //Получить данные
 var list = emit(Resource.success(data = nalRepository.getNal()))
 //Сохранить в базу
 addListBook(list)
android
  • 2 个回答
  • 10 Views
Martin Hope
Александр Инженер
Asked: 2020-06-14 00:36:35 +0000 UTC

Android kotlin 前台服务如何实现?

  • 1

有一个TextView,其中 DateUtils.getRelativeTimeSpanString最后一次更新数据库的时间“3 秒前”、“2 小时前”等在帮助中显示。如何实现一个允许每 5 秒查看一次数据库最后更新时间并将其显示在 TextView 中的进程。后台工作人员在后台按计划工作,但仅限于 15 分钟的间隔,您可以通过哪些现代方式实现这样的功能,尽管 API23 和更高版本的前台服务间隔为 5-10 秒?

android
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5