我想在 a 中获取一种类型的所有跨度CharSequence并将它们转换为不同的类型。例如,将所有粗体跨度转换为下划线跨度:
我该怎么做?
(这是我今天面临的一个问题,既然我现在已经解决了,我在这里添加一个问答对。我的答案如下。)
我计划从 Android 和 iOS 开发切换到 Flutter。只需要维护一个代码库的想法非常令人兴奋。在这一点上,我仍然只是观察和学习。
不过,让我有点反感的一件事是创建小部件时代码缩进中的巨大山脉和山谷。这是从这个答案中获取的一个例子:
Widget build(BuildContext context) {
ThemeData themeData = Theme.of(context);
return new Scaffold(
body: new Padding(
padding: const EdgeInsets.all(10.0),
child:
new Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
new Row(
mainAxisAlignment: MainAxisAlignment.start,
children: icons.map((IconData iconData) {
return new Container(
margin: new EdgeInsets.all(10.0),
child: new IconButton(
icon: new Icon(iconData), onPressed: () {
// TODO: Implement
}),
);
}).toList(),
),
new Expanded(
child: new Align(
alignment: FractionalOffset.center,
child: new AspectRatio(
aspectRatio: 1.0,
child: new Stack(
children: <Widget>[ …Run Code Online (Sandbox Code Playgroud) 我想为Flutter项目创建一个空列表.
final prefs = await SharedPreferences.getInstance();
final myStringList = prefs.getStringList('my_string_list_key') ?? <empty list>;
Run Code Online (Sandbox Code Playgroud)
我似乎记得有多种方法,但一种推荐方式.我该怎么做?
这是我在Dart使用指南中找到答案后制作的Q&A风格的帖子.我的答案如下.
我试图像在Android中为RecyclerView适配器所做的那样,在AnimatedList上预生成所有更新操作。但是当我要清除所有数据时,我不知道该怎么做。
如果我这样做
setState(() {
_data.clear();
});
Run Code Online (Sandbox Code Playgroud)
然后清除了后备数据,但是GlobalKey的当前状态仍然不知道更改,并且没有任何clear()方法。
补充代码
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(title: Text('Update AnimatedList data')),
body: BodyWidget(),
),
);
}
}
class BodyWidget extends StatefulWidget {
@override
BodyWidgetState createState() {
return new BodyWidgetState();
}
}
class BodyWidgetState extends State<BodyWidget> {
// the GlobalKey is needed to animate the list
final GlobalKey<AnimatedListState> _listKey = GlobalKey();
// backing data
List<String> …Run Code Online (Sandbox Code Playgroud) 据我所知,Dart不支持字素簇,尽管有人说支持它:
在实施之前,通过字素簇进行迭代的选择有哪些?例如,如果我有这样的字符串:
String family = '\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F467}'; // ??
String myString = 'Let me introduce my $family to you.';
Run Code Online (Sandbox Code Playgroud)
在五个代码点的家庭表情符号后面有一个光标:
如何将光标向左移动一个用户可感知的字符?
(在这种特殊情况下,我知道了字素簇的大小,因此我可以做到,但是我真正要问的是找到任意长的字素簇的长度。)
更新资料
我从本文中看到,Swift使用了系统的ICU库。Flutter中可能有类似的可能。
对于那些想玩我上面的示例的人,这里是一个演示项目。按钮将光标向右或向左移动。当前需要按8个按钮才能将光标移到家庭表情符号上。
主镖
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Grapheme cluster testing')),
body: BodyWidget(),
),
);
}
}
class BodyWidget extends StatefulWidget {
@override
_BodyWidgetState createState() => _BodyWidgetState();
}
class _BodyWidgetState extends State<BodyWidget> {
TextEditingController …Run Code Online (Sandbox Code Playgroud) 在Android中,您可以使用与比例无关的像素(sp)来设置字体大小,以考虑在设置中选择的用户字体大小首选项。
android:textSize="26sp"
Run Code Online (Sandbox Code Playgroud)
在iOS中,您可以使用动态类型来实现类似目的。
label.font = UIFont.preferredFont(forTextStyle: .body)
label.adjustsFontForContentSizeCategory = true
Run Code Online (Sandbox Code Playgroud)
您如何在Flutter中做同样的事情?
我想获取任意字符串中的字节数。我可以这样做:
\n\nimport 'dart:convert';\nvoid main() {\n String str = '\xe4\xbd\xa0\xe5\xa5\xbd';\n final bytes = utf8.encode(str);\n print(str.length); // 2\n print(bytes.length); // 6\n}\nRun Code Online (Sandbox Code Playgroud)\n\n但是有没有一种更直接的方法来做到这一点,而不涉及进行转换?
\n如果我将主题添加到我的应用中,如下所示:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
primaryColor: Color(0xff393e46),
primaryColorDark: Color(0xff222831),
accentColor: Color(0xff00adb5),
backgroundColor: Color(0xffeeeeee),
buttonTheme: ButtonThemeData(
buttonColor: Color(0xff00adb5),
)
),
home: Scaffold(
body: MyHomePage(),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
如何更改按钮主题的文本颜色?
如何在 Dart 中检查字符串是否为“null”?(不是null物体)
是否有像 Java 那样的 Dart SDK API equals?
如果我运行以下代码:
Uint8List bytes = Uint8List.fromList([1, 0, 0, 128]);
ByteBuffer byteBuffer = bytes.buffer;
Uint16List sixteenBitList = byteBuffer.asUint16List();
print(sixteenBitList);
Run Code Online (Sandbox Code Playgroud)
我得到以下结果:
[1, 32768]
Run Code Online (Sandbox Code Playgroud)
由于原始值为
00000001 00000000 00000000 10000000
1 0 0 128
Run Code Online (Sandbox Code Playgroud)
我本以为它们会像这样组合起来:
0000000100000000 0000000010000000
256 128
Run Code Online (Sandbox Code Playgroud)
相反,我得到了这个:
0000000000000001 1000000000000000
1 32768
Run Code Online (Sandbox Code Playgroud)
那是小端,对吧?我正在我的 Mac 上运行这段代码。我得到上述结果的原因是因为我的 Mac 使用小端吗?如果我在大端计算机上运行相同的代码,它会给出不同的结果吗?(我在 DartPad 上得到了相同的结果,但我不知道 DartPad 运行在什么机器上。)