我真的不明白是如何@required工作的。例如,我见过这个代码:
class Test{
final String x;
Test({
@required this.x
});
factory Test.initial(){
return Test(x: "");
}
}
Run Code Online (Sandbox Code Playgroud)
但是@required这里应该怎么做呢?似乎它使可选参数成为非可选参数。
我有这个验证功能:
class FormFieldValidator{
static String validate(String value, String message){
return (value.isEmpty || (value.contains(**SPECIAL CHARACTERS**))) ? message : null;
}
}
Run Code Online (Sandbox Code Playgroud)
我想表明不必包含特殊字符,但我该怎么说呢?
我想知道何时应该使用将来的构建器。例如,如果我要发出http请求并在列表视图中显示结果,则一旦打开视图,我是否必须使用future构建器或仅构建ListViewBuilder类似的构建器:
new ListView.builder(
itemCount: _features.length,
itemBuilder: (BuildContext context, int position) {
...stuff here...
}
Run Code Online (Sandbox Code Playgroud)
而且,如果我不想构建列表视图,而是想要构建一些更复杂的东西(例如圆形图表),是否应该使用Future Builder?
希望它足够清楚!
我试图为我的文本字段构建边框,例如:
return TextField(
...
border: OutlineInputBorder(
borderSide: BorderSide(
color: Colors.red,
width: 5.0),
)
)
)
Run Code Online (Sandbox Code Playgroud)
但它总是返回宽度为1.0的黑色边框。我发现改变颜色的唯一方法是创建一个ThemeData,在其中指定提示颜色,但是找不到改变宽度的方法。
在登录视图中,如果用户在没有插入凭据的情况下点击登录按钮,则 LoginFailState 为 yield 并且视图对其做出反应。如果他再次点击,这个 LoginFailstate 又是 yield ,但视图不会对它做出反应。那么,有没有办法在相同的状态下产生更多倍的结果?
有一些代码可以更好地解释我的情况:
class LoginBloc extends Bloc<LoginEvent, LoginState> {
@override
LoginState get initialState => LoginUninitialized();
@override
Stream<LoginState> mapEventToState(LoginEvent event) {
if (event is loginButtonPressed) {
yield LoginFailState();
}
}
Run Code Online (Sandbox Code Playgroud)
看法:
@override
Widget build(BuildContext context) {
return BlocBuilder(
bloc: _loginBloc,
builder: (BuildContext context, LoginState state) {
if (state is LoginFail) {
print ('Login fail');
}
return Column(
...
)
Run Code Online (Sandbox Code Playgroud) 这是我第一次使用詹金斯。我创建了一个只有一个文件的新文件夹,并在其中创建了一个 git 存储库。然后我使用该存储库设置 Jenkins。
我现在得到的是这个错误:
错误:Git 远程“path\hello”的签出已中止,因为它引用了本地目录,这可能不安全。无论如何,您可以通过将系统属性“hudson.plugins.git.GitSCM.ALLOW_LOCAL_CHECKOUT”设置为 true 来允许本地签出。完成:失败
我尝试使用以下命令启动詹金斯:
C:\Users\userName\.jdks\zulu11.56.19-ca-jdk11.0.15-win_x64\bin\java.exe -jar jenkins.war hudson.plugins.git.GitSCM.ALLOW_LOCAL_CHECKOUT=true
Run Code Online (Sandbox Code Playgroud)
但这没有用。如何将“允许本地结帐”设置为 true?
我有这个功能:
Future<String> load(SharedPreferences prefs, String fileName) async {
prefs = await SharedPreferences.getInstance();
String jsonString = prefs.getString(fileName) ?? "";
if (jsonString.isNotEmpty) {
return jsonString;
}else{
return ...
}
}
Run Code Online (Sandbox Code Playgroud)
在其他情况下我应该返回什么?我试过""但它不起作用.
我是集团模式和流媒体方面的新手。我想在按下按钮时显示一个警报对话框,但找不到解决方法。实际上我的代码是:
Widget button() {
return RaisedButton(
child: Text('Show alert'),
color: Colors.blue[700],
textColor: Colors.white,
onPressed: () {
bloc.submit();
});
}
return Scaffold(
appBar: AppBar(
title: Text("Title"),
),
body: StreamBuilder(
stream: bloc.getAlert,
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text("I have Dataaaaaa ${snapshot.data}");
} else
return ListView(
children: <Widget>[
Container(
button()
)
...
Run Code Online (Sandbox Code Playgroud)
而BLoC:
final _submissionController = StreamController();
Stream get submissionStream=> _submissionController.stream;
Sink get submissionSink=> _submissionController.sink;
Run Code Online (Sandbox Code Playgroud)
我试图做类似的事情:
Widget button() {
return StreamBuilder(
stream: submissionStream
builder: (context, snapshot){
if (snapshot.hasData){
return showDialog(...) …Run Code Online (Sandbox Code Playgroud) 我想模拟我的集团以测试我的观点。
例如,这是我的 Bloc:
class SearchBloc extends Bloc<SearchEvent, SearchState> {
@override
// TODO: implement initialState
SearchState get initialState => SearchStateUninitialized();
@override
Stream<SearchState> mapEventToState(SearchState currentState, SearchEvent event) async* {
if (event is UserWrites) {
yield (SearchStateInitialized.success(objects);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是观点:
class _SearchViewState extends State<SearchView> {
final TextEditingController _filterController = new TextEditingController();
@override
void initState() {
_filterController.addListener(() {
widget._searchBloc.dispatch(FetchByName(_filterController.text));
}
}
TextField buildAppBarTitle(BuildContext context) {
return new TextField(
key: Key("AppBarTextField"),
controller: _filterController,
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: …Run Code Online (Sandbox Code Playgroud) 我有一个以 ScrollController 作为控制器的 ListView.builder:
_buildListView(state) => ListView.builder(
itemBuilder: (_, int index) => _draw(index, state),
itemCount: state.count
controller: _scrollController,
);
Run Code Online (Sandbox Code Playgroud)
我向控制器添加了一个侦听器:
View() {
_scrollController.addListener(_onScroll);
}
Run Code Online (Sandbox Code Playgroud)
我想测试 _onScroll 函数:
void _onScroll() {
final maxScroll = _scrollController.position.maxScrollExtent;
final currentScroll = _scrollController.position.pixels;
if (maxScroll - currentScroll <= _scrollThreshold) {
_bloc.dispatch(Fetch());
}
}
Run Code Online (Sandbox Code Playgroud)
但我不知道我如何测试它。这是我到目前为止尝试过的:
testWidgets('Should test the scroll',
(WidgetTester tester) async {
await tester.pumpWidget(generateApp());
await tester.pump();
await tester.drag(find.byType(ListView), const Offset(0.0, -300));
await tester.pump();
...
)}
Run Code Online (Sandbox Code Playgroud)
但它根本不调用那个函数。