小编Uni*_*LSD的帖子

每个页面底部的持久小部件

我正在制作一个音乐应用程序,并希望当前播放状态显示在大多数页面的底部。我通过bottomNavigationBar: const NowPlayingBar()在每个需要该杆的脚手架上使用来完成此操作。这有 2 个问题:

  1. 从技术上讲,这为每条拥有导航栏的路线制作了多个导航栏副本
  2. 导航栏不会“停留在”页面转换之上(下面的视频)

我发现执行此操作的唯一真正方法是使用 permanent_bottom_nav_bar 包,但这似乎不允许自定义小部件(有这个NavBarStyle.custom似乎不存在)。有没有办法在所有页面上不断显示该栏?

这是显示问题 2 的视频:https://streamable.com/gxcswk

这是我现在正在播放的栏小部件(它基本上只是一个监听更改的列表图块):

import 'package:audio_service/audio_service.dart';
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';

import '../components/AlbumImage.dart';
import '../services/mediaStateStream.dart';
import '../services/FinampSettingsHelper.dart';
import '../services/processArtist.dart';
import '../services/MusicPlayerBackgroundTask.dart';

class NowPlayingBar extends StatelessWidget {
  const NowPlayingBar({
    Key? key,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    // BottomNavBar's default elevation is 8 (https://api.flutter.dev/flutter/material/BottomNavigationBar/elevation.html)
    const elevation = 8.0;
    final color = Theme.of(context).bottomNavigationBarTheme.backgroundColor;

    final audioHandler = GetIt.instance<MusicPlayerBackgroundTask>();

    return Material(
      color: color,
      elevation: elevation, …
Run Code Online (Sandbox Code Playgroud)

flutter

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

我可以在不实际关闭小部件的情况下使用 Dismissible 吗?

我正在尝试制作一个小部件,可以通过滑动来更改播放列表中当前播放的歌曲。我试图模仿其他应用程序的做法,让用户滑开当前曲目并进入下一曲目。Dismissible 非常接近我真正想要的。它有一个很好的动画,我可以轻松地使用 onDismissed 函数来处理逻辑。我的问题是 Dismissible 实际上想要从树中删除小部件,这是我不想要的。

当歌曲发生变化时,我正在滑动的小部件会使用 StreamBuilder 进行更新,因此能够将小部件滑动到新的小部件将是完美的。我可以这样做吗?或者有更好的小部件可以满足我的需求吗?

这是我正在开发的小部件:

class NowPlayingBar extends StatelessWidget {
  const NowPlayingBar({
    Key key,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return StreamBuilder<ScreenState>(
      stream: _screenStateStream,
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          final screenState = snapshot.data;
          final queue = screenState.queue;
          final mediaItem = screenState.mediaItem;
          final state = screenState.playbackState;
          final processingState =
              state?.processingState ?? AudioProcessingState.none;
          final playing = state?.playing ?? false;
          if (mediaItem != null) {
            return Container(
              width: MediaQuery.of(context).size.width,
              child: Dismissible(
                key: Key("NowPlayingBar"), …
Run Code Online (Sandbox Code Playgroud)

flutter flutter-layout

4
推荐指数
1
解决办法
1773
查看次数

如何使用 Diesel 主键以外的列查找值?

我有一个用户表,想使用 Diesel 执行搜索以确保用户名未被占用。我发现执行查询的唯一方法是使用该find()函数,该函数使用主键。是否有另一个函数可以使用其他字段进行搜索,类似于SELECT * FROM users WHERE username = foo

这是我的用户表:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE users (
    user_id uuid PRIMARY KEY DEFAULT uuid_generate_v4() NOT NULL UNIQUE,
    username VARCHAR(255) NOT NULL UNIQUE,
    password VARCHAR(60) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的 Rust 结构:

#[derive(Queryable, AsChangeset, Deserialize, Serialize)]
#[table_name = "users"]
pub struct User {
    pub user_id: uuid::Uuid,
    pub username: String,
    pub password: String,
}

#[derive(Insertable, Deserialize, Serialize)]
#[table_name = "users"]
pub struct InsertableUser {
    pub username: …
Run Code Online (Sandbox Code Playgroud)

rust rust-diesel

4
推荐指数
1
解决办法
1276
查看次数

我应该如何从不同的文件访问 Riverpod 提供程序?

我习惯了提供程序Provider.of()调用以从小部件树中的其他位置获取提供程序,但我发现的每个 Riverpod 资源都依赖于已经访问提供程序变量(通过将两个小部件放在同一个文件中)。对于仅通过两个小部件访问的提供程序,传递此变量非常简单,但我认为这对于访问在小部件树的高层创建的提供程序来说不可行。有没有合适的方法来获得提供商?

flutter riverpod

4
推荐指数
1
解决办法
2232
查看次数

如何从launch.json传递带有特殊字符的参数?

我正在尝试通过 launch.json 将参数传递给我的 Python 程序,我的参数之一需要特殊字符,因为它是密码(我计划添加更安全的方式来输入密码,但这不是重点)。

这是我的launch.json(密码已更改但仍带有特殊字符)

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "args": [
                "-u",
                "camera@iot-project.com",
                "-p",
                "Y^bKKiUPu!fM6!dBsvnALmuXbP6fqT$d"
            ],
            "console": "integratedTerminal"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

当我将密码参数设置为 时"'Y^bKKiUPu!fM6!dBsvnALmuXbP6fqT$d'",它实际上将单引号传递到 Python 程序中,这不是我想要的(在带有单引号的终端中运行程序有效)。

这是我的 Python 程序:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of …
Run Code Online (Sandbox Code Playgroud)

python visual-studio-code

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

对列表进行排序会给出错误的答案

我这样做是为了对高分的列表进行排序:

with open("scores.csv", "r") as x:
    reader = csv.DictReader(x)
    scores = []  # Makes an empty listto store the scores
    for row in reader:
        scores.append([row["Name"], row["Score"]])
    # Sorts the list by score
    scores.sort(reverse=True, key=lambda x: x[1])
Run Code Online (Sandbox Code Playgroud)

但这是输出:

[['AnotherUser', '3'], ['James', '15'], ['James', '13'], ['User2', '12'], ['James', '0']]
Run Code Online (Sandbox Code Playgroud)

显然,结果应该是这样的:

[['James', '15'], ['James', '13'], ['User2', '12'], ['AnotherUser', '3'], ['James', '0']]
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?提前致谢 :)

python sorting

0
推荐指数
1
解决办法
58
查看次数