我遇到了计时问题,我从api获取数据,然后从JSON创建一个列表.我想在结果列表视图中使用结果列表的长度作为项目计数.但是它会在itemcount上抛出null错误,然后完成处理并显示listview.我试图找到时间问题的位置以及如何处理项目和小部件,以便我可以避免错误.如果有人有任何想法我的代码存在缺陷,我的代码如下.
class Specialty extends StatefulWidget {
Specialty({Key key, this.title}) : super(key: key);
final String title;
@override
_SpecialtyState createState() => new _SpecialtyState();
}
class _SpecialtyState extends State<Specialty> {
bool _dataReceived = false;
bool _authenticated = false;
SharedPreferences prefs;
List mylist;
@override
void initState() {
super.initState();
_getPrefs();
_getSpecialty();
}
_getPrefs() async {
prefs = await SharedPreferences.getInstance();
_authenticated = prefs.getBool('authenticated');
print('AUTH2: ' + _authenticated.toString());
print('AUTHCODE2: ' + prefs.getString('authcode'));
}
_getSpecialty() async {
var _url = 'http://$baseurl:8080/support/specialty';
var http = createHttpClient();
var response = …Run Code Online (Sandbox Code Playgroud) 我查看并找到了几种解决方案,但似乎都不适合我的配置,需要一些帮助。我将所有代码放在这里,看看是否有人知道在哪里应用ScrollController。我已经尝试了原始ListView,但是我从futureResponse在ListView构建器中动态构建了其他项。
import 'dart:async';
import 'dart:io';
import 'dart:typed_data';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:intl/intl.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:cswauthapp/models.dart';
import 'package:cswauthapp/ChatConvoDetail.dart';
import 'package:cswauthapp/Settings.dart' as Admin;
import 'package:cswauthapp/HomePage.dart' as HomePage;
import 'package:cswauthapp/main.dart' as MyHomePage;
import 'package:cswauthapp/PostAuthHome.dart' as PostAuthHome;
import 'package:image_picker/image_picker.dart';
import 'package:cswauthapp/ShowPic.dart';
import 'package:path/path.dart' as path;
import 'package:video_player/video_player.dart';
import 'package:cswauthapp/vplayer.dart' as vplayer;
class ChatDivided extends StatefulWidget {
ChatDivided({Key key, this.title, this.mychat}) : super(key: key);
static const String routeName = "/ChatDivided";
final ChatList mychat;
final String title;
@override …Run Code Online (Sandbox Code Playgroud) 在平台通道上使用Flutter与Android指纹认证集成时,我正在寻找一些指导。我有android部分正在工作,而flutter应用程序具有调用方法,但我似乎无法像我在swift中那样仅获得指纹身份验证的弹出窗口,在同一flutter应用程序中它可以正常工作,以便于将结果传递给flutter应用程序,然后继续运行flutter应用程序。如果有人有任何示例或指导,将不胜感激。
寻找有关title在后续页面上更改AppBar的帮助,所以我是制表符,而有些则不是。 MyApp在我的应用程序的身份验证页面上定义。然后我转到保存的标签一个新的页面,然后我还有其他的网页了一些标签页中,我希望能够做的是,而不是把另一AppBar下的主要原因之一,我只是想改变title的AppBar我在其他任何页面上时都处于主要状态。
关于如何执行此操作的任何想法,我看到一个不合适的示例,因为我的选项卡设置不同并且无法使其合适,我想也许有一种最初定义标题的方法,以便我可以更改状态或其他内容并更改标题。
有任何想法或想法吗?
更新 这是 StreamBuilder 代码:我当前正在尝试使用运行 Stream.fromFuture 的计时器进行更新,该计时器更新数据,但闪烁和滚动很奇怪。
new StreamBuilder(
initialData: myInitialData,
stream: msgstream,
builder: (BuildContext context, AsyncSnapshot<List<Map>> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return new Text('Waiting to start');
case ConnectionState.waiting:
return new Text('');
default:
if (snapshot.hasError) {
return new Text('Error: ${snapshot.error}');
} else {
myInitialData = snapshot.data;
return new RefreshIndicator(
child: new ListView.builder(
itemBuilder: (context, index) {
Stream<List<Map>> msgstream2;
Future<List<Map>> _responseDate = ChatDB.instance.getMessagesByDate(snapshot.data[index]['msgkey'], snapshot.data[index]['msgdate']);
msgstream2 = new Stream.fromFuture(_responseDate);
return new StreamBuilder(
initialData: myInitialData2,
stream: msgstream2,
builder: (BuildContext context, AsyncSnapshot<List<Map>> snapshot) …Run Code Online (Sandbox Code Playgroud) 我有一个可点击图像的Livtview,当点击一个图像时,它呈现另一个页面,原始图像上方有一个文本,我试图在图像之后添加一个列表视图,也可以作为第一个列表滚动,但没有顶部图像移动或此时任何一种方式都可以.我尝试在第一页上构建列表视图并且它一直给出一个视口错误,所以我将shrinkwrap添加到listview中,现在我在屏幕底部出现了一个红色条,它不会滚动到可查看的内容上屏幕.
以下是第二个listview所在的一些代码.
@override
Widget build(BuildContext context) {
var _children = <Widget>[
new Center(
child: new Text(widget.spec.name,
style: new TextStyle(fontSize: 30.0, fontWeight: FontWeight.bold),
),
),
new Center(
child: new Container(
padding: new EdgeInsets.only(
left: 10.0, right: 10.0, top: 20.0, bottom: 10.0),
child: new Image.asset(widget.spec.pic.assetName),
)
),
new Center(
child: new Container(
padding: new EdgeInsets.only(
left: 10.0, right: 10.0, top: 20.0, bottom: 10.0),
child: new Text('Facilities for Specialty',
style: new TextStyle(fontSize: 30.0),
textAlign: TextAlign.center,
),
),
),
new RefreshIndicator(
child: new ListView.builder( …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取从 rest api 返回的 JSON 并填充下拉菜单,我需要具有与子值不同的值。有没有人做过这个或有一个例子或建议。我使用的是基本示例,似乎找不到使用 JSON 而不是静态列表的方法。以下是我尝试过的,但仍然没有找到价值。我不断收到飞镖空错误。任何帮助都会很棒。我已经更新了我如何获取 JSON 和解码。我已经尝试了几件事。这也是错误,但我在调试中确认该值永远不会为空,因此它必须与 JSON 相关。我尝试过使用静态列表,并且可以正常工作。
'package:flutter/src/material/dropdown.dart': Failed assertion: line 433 pos 15: 'value == null
String _referPractice = '<New>';
Run Code Online (Sandbox Code Playgroud)
JSON 看起来像这样:
[{"id":0,"name":"<New>"},{"id":1,"name":"Test Practice"}]
var http = createHttpClient();
var response = await http.get(_url);
var practices = await jsonCodec.decode(response.body);
practicelist = await practices.toList();
new DropdownButton<String>(
value: _referPractice,
isDense: true,
onChanged: (String newValue) {
setState(() {
_referPractice = newValue;
});
},
items: practicelist.map((value) {
return new DropdownMenuItem<String>(
value: value['id'].toString(),
child: new Text(value['name']),
);
}).toList(),
),
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个用于文本字段的 inputformatter 示例,它将是日期 mm/dd/yyyy,当用户键入更新格式时,我正在尝试执行的操作。例如用户开始输入mm并输入/,然后当输入dd时输入/。
有没有人做过这个或者有一个例子?我已经用其他语言完成了,但在 flutter/dart 中找不到类似的方法。
这是我迄今为止尝试过的,但无法使逻辑正确。有任何想法吗?
class _DateFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue,
TextEditingValue newValue
) {
final int newTextLength = newValue.text.length;
int selectionIndex = newValue.selection.end;
int usedSubstringIndex = 0;
final StringBuffer newText = new StringBuffer();
if (newTextLength == 2) {
newText.write(newValue.text.substring(0, 2) + '/ ');
if (newValue.selection.end == 3)
selectionIndex+=3;
}
if (newTextLength == 5) {
newText.write(newValue.text.substring(0, 5) + '/ ');
if (newValue.selection.end == 6)
selectionIndex += 6;
}
// Dump the rest.
if …Run Code Online (Sandbox Code Playgroud) 我有一个工作页面,它是使用 Listview.builder 的动态消息列表视图。itembuilder 调用创建卡片的小部件。我想要做的是将第一个列表更改为一个分隔符,它将是一个日期,然后将在该日期之前调用一个项目列表。正在创建所有数据调用和列表,但不断获取 hasSize 不是真正的错误,并且看不到大小有问题的地方,我只是使用了正在工作的相同布局。
不确定要显示哪些代码以获得一些帮助,所以如果您有想法以及可能需要查看哪些代码,请告诉我。
这是在更改之前有效的开始:
var _children = <Widget>[
new Expanded(
child: new RefreshIndicator(
child: new ListView.builder(
itemBuilder: _divBuilder,
itemCount: listcount,
),
onRefresh: _onRefresh,
),
),
new Stack(
alignment: Alignment.centerRight,
children: <Widget>[
new TextField(
decoration: const InputDecoration(
hintText: 'Chat Reply',
labelText: 'Chat Reply:',
),
autofocus: false,
focusNode: _focusnode,
maxLines: 2,
controller: _newreplycontroller,
keyboardType: TextInputType.url,
),
new IconButton(
icon: new Icon(Icons.send),
onPressed: _sendReply,
alignment: Alignment.centerRight,
)
],
),
];
return new Scaffold(
appBar: new AppBar(
title: mytitle,
actions: …Run Code Online (Sandbox Code Playgroud) 更新 我已更改为使用小部件,并在下面将所有有状态小部件的代码。
有很多代码,我更改为使用带有Widget loadingIndicator的堆栈,但是仍然无法调用它。我的堆栈围绕着将来的响应,指示器位于底部,然后我通过单击按钮使用onPress来调用更改状态的方法,然后调用另一个进程来运行。指示器仍然没有任何反应。
class ChatServerDivided extends StatefulWidget {
ChatServerDivided({Key key, this.title, this.mychat}) : super(key: key);
static const String routeName = "/ChatServerDivided";
final ChatServerList mychat;
final String title;
@override
_ChatServerDividedState createState() => new _ChatServerDividedState();
}
class _ChatServerDividedState extends State<ChatServerDivided> {
SharedPreferences prefs;
int oid = 0;
int pid = 0;
int authlevel = 0;
bool admin = false;
int type = 0;
String msgid = '';
List chatlist;
int listcount = 0;
bool grpmsg = true;
String sender = ''; …Run Code Online (Sandbox Code Playgroud)