我想我现在至少有一个模糊的想法,
如何在我的应用程序中使用BLoC,Stream Builder
和继承的小部件(或模型)
(没有什么特别的,但对我来说需要时间),
但玩Scoped模型
我有一个存在的危机:
我觉得他们大多数可以做同样的事情,或者
至少我可以
用它们中的任何一个获得相同的明显效果,
但我没有能力去理解
何时 以及为什么一个比另一个好.
我故意保持开放的问题不要因为我而讨厌我,
但我希望能更好地理解我正在做的事情
以及使用这一个或另一个事件在幕后发生的事情.
谢谢你的耐心等待.弗朗切斯科
Ps:我不能添加'范围模型'标签,如果可以的话,
它可能与像我这样的新手有关
我确定这是一个新手错误,但我似乎无法弄清楚这一点。在下面的应用程序中,当单击第二条路线中的文本字段时,键盘会打开并立即关闭。经过仔细调查,似乎每当它获得焦点时就会重新构建小部件,从而导致路线重置,使用户无法输入文本。
当我从表单中删除“密钥”时,问题不会发生。这不是一个长期修复,因为我需要“密钥”以便我可以验证表单。
有任何想法吗?
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) 我想为重新创建活动编写测试.执行旋转是可选的.
我希望测试能够被谷歌"祝福"的测试框架的最新版本编写.我是编写测试的新手,所以我想学习基本的,主流的,支持良好的工具.当我掌握基础知识时,任何第三方测试框架都会没问题.而且由于我想测试非常基本的,经常出现的场景,基本工具应该足够了,对吧?
最小测试代码:
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) 我正在尝试在视图中创建一个可滚动的文本:
// 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. 知道我做错了什么吗?
在 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) 我是一名 android 开发人员,并且是 flutter 的新手。
我想创建一个GridView与wrap 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) 如何在 Dart 中保存两位数的整数?
int i = 3;
String s = i.toString();
print(s);
Run Code Online (Sandbox Code Playgroud)
结果应该是03而不是3
我试过这样的事情:
@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) 有没有一种方法可以从Android Studio中为Flutter构建APK。
我看过以下指南:https : //flutter.dev/docs/deployment/android
但是这里flutter控制台用于构建apk。
我正在使用 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