将flutter升级到最新版本后。我正面临这个问题,我为另一个具有早期版本 flutter 的应用程序使用了相同的代码,并且它工作正常。
使用新的 ListView 添加两个或更多子项。
向下滚动列表到第一个孩子完全离开屏幕的点。
一直向上滚动到初始位置。ListView 在屏幕上不显示任何内容(只有空白区域)。
附上最小的可重现代码:
import 'dart:async';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MYYApp(),
);
}
}
class MYYApp extends StatefulWidget {
@override
_MYYAppState createState() => _MYYAppState();
}
class _MYYAppState extends State<MYYApp> {
final list = [
'BMW',
'Fiat',
'Toyota',
'Fiat',
'Testa',
'Fiat',
'Ford',
'Fiat',
'BMW',
'Fiat',
'Toyota',
'Fiat',
'Testa',
'Fiat',
'Ford',
'Fiat'
];
@override
Widget build(BuildContext context) {
return Scaffold( …Run Code Online (Sandbox Code Playgroud) 这在 Android 设备中工作得很好,音频和视频都相应地播放。但就 iOS 而言,只有音频可以工作,没有视觉效果。我正在 iOS 模拟器中运行该应用程序。我还在 GitHub 上搜索了这个问题,人们建议它在真实设备上可以正常工作,但事实并非如此。
这是我播放视频的完整代码
class UiPathVideoPage extends StatefulWidget {
final String text;
UiPathVideoPage({Key key, @required this.text}) : super(key: key);
@override
_UiPathVideoPageState createState() => _UiPathVideoPageState();
}
class _UiPathVideoPageState extends State<UiPathVideoPage> {
VideoPlayerController _controller;
ProgressDialog pr;
@override void initState() {
// TODO: implement initState
super.initState();
if(widget.text == 'Telecom') {
_controller = VideoPlayerController.network(
'https://firebasestorage.googleapis.com/v0/b/recycler-view-8483d.appspot.com/04ea5f9ca1')
..initialize().then((_) {
// Ensure the first frame is shown after the video is initialized, even before the play button has been pressed.
setState(() …Run Code Online (Sandbox Code Playgroud)
下面是我的代码,我想添加一些高度为 50 的额外空间,它位于列表项的末尾。因为当我的第二个子堆栈出现时,它几乎与列表视图的最后一项重叠。我尝试用列包装 ListView.builder 并最后添加一个容器,但破坏了我的整个结构。对于这种情况,我必须将列包装成单个可滚动的,这将堆栈第二个小部件推到 ListItem 的末尾。(但我不希望堆栈第二个对象可滚动)。如您所见,我无法单击 HotDog。
body: Stack(
children: <Widget>[
ListView.builder(
itemCount: itemData.length,
shrinkWrap: true,
scrollDirection: Axis.vertical,
itemBuilder: (BuildContext context,int index){
return Text(data[index].name);
}
),
Padding(
padding: const EdgeInsets.all(10.0),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: Colors.cyan
),
padding: EdgeInsets.all(10),
height: 60,
),
)
],
),
Run Code Online (Sandbox Code Playgroud) 这是我的屏幕,带有TextField和Button。当有人单击“显示”按钮时,我希望它在按钮下方显示名称,如下图所示。
代码如下:
class Demo extends StatefulWidget {
@override
_DemoState createState() => _DemoState();
}
class _DemoState extends State<Demo> {
final name = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Column(
children: [
Row(
children: [
Text(
'Name'
),
TextField(
controller: name,
)
],
),
RaisedButton(
onPressed: (){
},
child: Text('Show'),
)
],
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud) 这是错误:
有问题的小部件是:FutureBuilder 构建函数绝不能返回 null。要返回导致建筑小部件填充可用空间的空白空间,请返回“Container()”。要返回占用尽可能少空间的空白空间,请返回“Container(width: 0.0, height: 0.0)”。
这是获取 Firebase 实时数据的函数:
Future<void> getCategoriesName() async {
await FirebaseDatabase.instance.reference().child('Categories').once()
.then((DataSnapshot dataSnapshot){
var key = dataSnapshot.value.keys;
for(var i in key)
{
CategoryItems categoryItems = new CategoryItems(
dataSnapshot.value[i]['CategoryName'],
dataSnapshot.value[i]['Counter']
);
categoryItemList.add(categoryItems);
}
setState(() {
print(categoryItemList.length);
});
});
}
Run Code Online (Sandbox Code Playgroud)
这是我的 Future Builder 功能:
Container(
margin: EdgeInsets.only(bottom: 50,top: 100),
child: FutureBuilder(
future: FirebaseDatabase.instance.reference().child('Categories').child(_userPin).once(),
// ignore: missing_return
builder: (context, snapshot) {
if(snapshot.hasData){
if (snapshot.data!=null) {
return Expanded();
}else{
return Loader();
}
}
}
),
),
Run Code Online (Sandbox Code Playgroud)
在 Expanded 内部我有 …
我想在我的 PDF 中打印印地语,我也尝试过使用 Google 的 Raleway-Regular.ttf 字体,但它也不起作用。
\nfinal font = await rootBundle.load("fonts/ARIAL.TTF");\nfinal ttf = pw.Font.ttf(font);\n\npdf.addPage(\n pw.MultiPage(\n pageFormat: PdfPageFormat.a4,\n margin: pw.EdgeInsets.all(32),\n build: (pw.Context context){\n return <pw.Widget>[\n pw.Center(\n child: pw.Text("\xe0\xa4\xae\xe0\xa5\x87\xe0\xa4\xa8",style: pw.TextStyle(fontSize: 16,font: ttf))\n ),\n pw.SizedBox(height: 20),\n pw.Center(\n child: pw.Text("ABC",style: pw.TextStyle(fontSize: 16))\n ),\n ),\n),\nRun Code Online (Sandbox Code Playgroud)\n我收到以下错误:
\n***I/flutter (24862): 无法将字符串解码为 Latin1。\nI/flutter (24862): 此字体不支持 Unicode 字符。\nI/flutter (24862): 如果您想使用拉丁语以外的字符串字符串,请改用 TrueType (TTF) 字体。\nI/flutter (24862):请参阅https://github.com/DavBfr/dart_pdf/wiki/Fonts-Management \nI/flutter (24862):----- ----------------------------------------------------\nE/flutter (24862): [错误:flutter/lib/ui/ui_dart_state.cc(177)] 未处理的异常:无效参数(字符串):包含无效字符。:“\xe0\xa4\xae\xe0\xa5\x87\xe0\xa4\xa8”
\n我是颤振新手,我对小部件的状态没有正确的了解。我正在创建一个应用程序,在其中从主屏幕向购物车添加一些商品,然后通过单击 Cartbutton 我打开 ModalBottomSheet,用户还可以在其中修改其购物车商品,以及当用户关闭 ModalBottomSheet 而不继续操作时我想要的内容查看。它还会刷新主屏幕上选定的项目。我正在计算列表中每个项目的加法和减法。一切工作正常,唯一不工作的是主屏幕项目不会自动更新,直到我单击该项目然后它们工作正常。
基本上我想问如何在关闭 BottomModalSheet 时更新其 Parent 的状态。
以下是我打开 BottomModalSheet 的 Parent 代码的一部分:
child: Material(
color: Colors.transparent,
child: InkWell(
splashColor: Colors.black12,
onTap: () async{
await scaffoldKey.currentState
.showBottomSheet((context) =>
StatefulBuilder(
builder: (BuildContext context,StateSetter setState){
return Container(
color: Colors.white,
height: MediaQuery.of(context).size.height,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
height: 200,
color: Colors.black,
),
Run Code Online (Sandbox Code Playgroud)
这是 BottomModalSheet 的一部分,我在其中设置状态:
InkWell(
onTap: (){
totalItems.remove(1);
totalPrice.remove(int.parse(categoryItemList[index].OurPrice));
cart.remove(categoryItemList[index]);
setState(() {<----------------------------------------Here I'm calling setState()
if(categoryItemList[index].Counter<2)
{
categoryItemList[index].ShouldVisible = !categoryItemList[index].ShouldVisible;
if(totalItems.length<1)
{
showCart = !showCart; …Run Code Online (Sandbox Code Playgroud)