我正在制作一个音乐应用程序,并希望当前播放状态显示在大多数页面的底部。我通过bottomNavigationBar: const NowPlayingBar()在每个需要该杆的脚手架上使用来完成此操作。这有 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) 我正在尝试制作一个小部件,可以通过滑动来更改播放列表中当前播放的歌曲。我试图模仿其他应用程序的做法,让用户滑开当前曲目并进入下一曲目。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) 我有一个用户表,想使用 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) 我习惯了提供程序Provider.of()调用以从小部件树中的其他位置获取提供程序,但我发现的每个 Riverpod 资源都依赖于已经访问提供程序变量(通过将两个小部件放在同一个文件中)。对于仅通过两个小部件访问的提供程序,传递此变量非常简单,但我认为这对于访问在小部件树的高层创建的提供程序来说不可行。有没有合适的方法来获得提供商?
我正在尝试通过 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) 我这样做是为了对高分的列表进行排序:
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)
我究竟做错了什么?提前致谢 :)