我有一个 GitHub 工作流程,可以为我的 Flutter 应用程序创建 APK。直到最近这一切都很好,我似乎已经耗尽了某种配额。现在,当工作流程运行时,我收到此错误:
Create Artifact Container failed: Artifact storage quota has been hit. Unable to upload any new artifacts
Run Code Online (Sandbox Code Playgroud)
我认为删除所有工件会再次释放空间,因此我使用了另一个工作流程来实现此目的:
name: 'Delete old artifacts'
on:
push:
branches:
- master
- develop
pull_request:
branches:
- master
- develop
jobs:
delete-artifacts:
runs-on: ubuntu-latest
steps:
- uses: kolpav/purge-artifacts-action@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
expire-in: 0days
Run Code Online (Sandbox Code Playgroud)
新的工作流程似乎正在运行,我不再在 GitHub UI 中看到旧文件。但是,在尝试运行 APK 工作流程时我仍然收到错误。有什么想法如何修复这个错误吗?
更新:
我正在开发一个使用 MVVM 架构的 Android 应用程序。我的问题是我的存储库(负责从 Web 获取 JSON)需要访问上下文。
我已经阅读了有关 StackOverflow 的一些建议。到目前为止,我收集到的最合理的选择如下:
使用 Dagger 2 以某种方式注入上下文。
让我ViewModel从扩展AndroidViewModel中获取应用程序上下文并将其传递给存储库。
截至目前,我有一个ViewModel和一个Repo
RoomFragmentViewModel.java:
public class MyViewModel extends ViewModel {
private MutableLiveData<List<JSONObject>> rooms;
private Repository repository;
public void init(){
if(rooms != null){
return;
}
repository = repository.getInstance();
rooms = repository.getRooms();
}
Run Code Online (Sandbox Code Playgroud)
存储库.java:
public class Repository {
private static Repository instance;
private ArrayList<JSONObject> actualRooms = new ArrayList<>();
public static Repository getInstance() {
if (instance == null) {
instance = new …Run Code Online (Sandbox Code Playgroud) 我发布这个问题是为了帮助未来的读者。升级到后,Flutter 2.8在尝试运行我的应用程序时突然出现此错误:
Flutter: A value of type 'ListTileThemeData' can't be assigned to a variable of type 'ListTileTheme'.
Run Code Online (Sandbox Code Playgroud)
我是如何解决这个问题的?
在使用 Fluttershttp请求库时,我想知道是否有一种简单的方法可以检查请求是否成功,而无需检查状态代码。
我看到的大多数代码示例(包括官方代码示例)都会执行以下操作:
http.Response response = await http.Client().get(...);
if (response.statusCode == 200) {
...
}
Run Code Online (Sandbox Code Playgroud)
然而,这些示例忽略了这样一个事实:所有以 开头的 HTTP 状态代码都2XX被认为是成功的。例如201代表201 Created.
我知道 pythonhttp库有一个简单的ok标志,所以在 python 中可以做这样的事情:
if response.ok:
...
Run Code Online (Sandbox Code Playgroud)
flutter/dart 中是否有类似的功能,或者我是否必须实施手动检查?
我知道您可以ThemeData使用自己的字体定义一个新对象,如下所示:
ThemeData(fontFamily: 'Roboto')
Run Code Online (Sandbox Code Playgroud)
但是,我想ThemeData使用以下copyWith方法复制现有的:
ThemeData.dark().copyWith(...)
Run Code Online (Sandbox Code Playgroud)
fontFamiliy可悲的是,中没有任何争论copyWith。我只想更改 fontFamily 而不是定义一个全新的TextTheme.
如何复制现有字体ThemeData并更改其字体系列?
我有一个如下所示的应用栏:
用户可以更改应用栏中的文本。但是,太长的文本会导致溢出错误:
我认为将特定内容包装Text在Flexible小部件内可以解决此问题,但在使用该方法时出现无法修复的错误Flexible:
RenderBox was not laid out: RenderFlex#0ac34 relayoutBoundary=up5 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
这是屏幕截图中的工作代码:
PreferredSize(
preferredSize: const Size.fromHeight(kToolbarHeight + 60),
child: Container(
color: getAppBarColor(),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
children: [
Padding(
padding: const EdgeInsets.all(16.0),
child: Row(
children: [
Visibility(
visible: hasBack,
child: IconButton(
onPressed: () {
Navigator.pop(context);
},
icon: Icon(Icons.arrow_back_ios,
color: getContentColor()),
),
),
Text(
title,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: fontSize,
color: getContentColor(),
fontWeight: FontWeight.w600,
),
)
],
), …Run Code Online (Sandbox Code Playgroud) 我正在使用内置的 Flutters,themes如下所示:
return MaterialApp(
theme: ThemeData.light().copyWith(
primaryColor: const Color(0xFF5E975A),
bottomAppBarColor: const Color(0xff282828),
// ... And so on
),
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我正在修改现有theme的copyWith. 现在假设我希望某个按钮始终具有Color(0xFFFF0000). 有没有办法向现有主题添加新键?
像这样的东西:
ThemeData.light().copyWith(
...
).addKey(myCustomColor: const Color(0xFFFF0000))
Run Code Online (Sandbox Code Playgroud)
如果没有,定义自定义颜色的最佳实践方法是什么?我觉得仅仅声明一个全局静态变量并不是实现这个的预期方法。
我知道这个问题听起来很困惑。让我澄清一下。
class Car ...
class Mercedes extends Car ...
class Porsche extends Car ...
class Warehouse{
Car car;
}
class WarehouseX extends Warehouse{
public static void main(){
((Mercedes) super.car).doMercedesStuff();
}
}
Run Code Online (Sandbox Code Playgroud)
看一下这个虚构的例子。梅赛德斯和保时捷都是汽车。每个仓库都拥有一辆汽车。现在,WarehouseX有一个奔驰。但是,WarehouseX从Warehouse继承了通用汽车。在这辆车上调用特定梅赛德斯方法的最佳方法是什么。一种方法是将其投放到梅赛德斯奔驰,但这对我来说似乎很丑。有没有更好的方法可以做到这一点?