从图像选择器(画廊/相机)中选择图像后,我成功地将图像旋转为横向/纵向。
这工作正常,并将继续将新图像设置为我想要的方向..
但是,我尝试使用相同的方法来旋转已选择/设置的图像,但它不起作用..
这是我正在使用的逻辑:
import 'package:image/image.dart' as img;
void _rotateImage(File file) async {
print('>>> rotating image');
try {
List<int> imageBytes = await file.readAsBytes();
final originalImage = img.decodeImage(imageBytes);
print('>>> original width: ${originalImage.width}');
img.Image fixedImage;
fixedImage = img.copyRotate(originalImage, 90);
print('>>> fixed width: ${fixedImage.width}');
final fixedFile = await file.writeAsBytes(img.encodeJpg(fixedImage));
setState(() {
print('>>> setting state');
_image = fixedFile;
});
} catch (e) {
print(e);
}
}
Run Code Online (Sandbox Code Playgroud)
我什至可以看到图像在设置状态之前正在旋转,但它仍然没有在屏幕上更新(这显示了两次尝试,而不是多次尝试)
I/flutter (18314): >>> rotating image
I/flutter (18314): >>> original width: 450
I/flutter (18314): >>> fixed width: 360 …Run Code Online (Sandbox Code Playgroud) 我很难理解为什么在移动可拖动小部件后,它会被放置到比我放置它的位置低的另一个位置...我唯一能想到的是它增加了和...100px的高度Appbarstatus bar
我认为我做错了什么,所以我决定创建尽可能简单的示例,但它仍然在做同样的事情。
只是为了确认,我不想使用拖动目标或类似的东西......我只是希望可拖动的小部件准确地落在我放置该东西的位置。但是,我确实需要它在堆栈中
[编辑] 似乎删除AppBar可以让 Draggable 准确地落在您放置它的位置。但是,我不希望可拖动小部件位于状态栏后面,因此在添加 a 之后,SafeArea我遇到了类似的问题。[/编辑]
import 'package:flutter/material.dart';
class DraggableTest extends StatefulWidget {
static const routeName = '/draggable-test';
@override
_DraggableTestState createState() => _DraggableTestState();
}
class _DraggableTestState extends State<DraggableTest> {
Offset _dragOffset = Offset(0, 0);
Widget _dragWidget() {
return Positioned(
left: _dragOffset.dx,
top: _dragOffset.dy,
child: Draggable(
child: Container(
height: 120,
width: 90,
color: Colors.black,
),
childWhenDragging: Container(
height: 120,
width: 90,
color: Colors.grey,
),
feedback: Container(
height: 120,
width: …Run Code Online (Sandbox Code Playgroud) 谁能帮我吗?
我正在努力弄清楚如何让彩色容器延伸以匹配其行中最高的容器的高度。
目前,它们没有固定的高度/宽度,并被包裹在扩展小部件中以获得动态大小。
如果可能的话,我想保持它们的响应大小。我已经有一种方法可以在屏幕足够小时切换到列而不是行。一旦进入一列,我就可以使用,width: double.infinity因为没有水平滚动。
这是所使用的代码的示例(抱歉有这么多!):
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Scrollbar(
child: CustomScrollView(
slivers: <Widget>[
SliverNavBar(),
SliverList(
delegate: SliverChildListDelegate(
[
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: _homePageContent(),
);
Footer()
],
),
),
],
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
_homePageContent() {
return <Widget>[
_HomePageInfoBox(
backgroundColor: accentColor,
title: 'THIS IS A TITLE',
body:
'Lorem ipsum...',
),
_HomePageInfoBox(
backgroundColor: primaryColorDark,
title: 'THIS IS A TITLE',
body:
'Lorem ipsum....',
),
_HomePageInfoBox(
backgroundColor: primaryColor,
title: 'THIS …Run Code Online (Sandbox Code Playgroud) 我已经设法让视频在 flutter-web 上播放,但是,当我滚动 ListView 中的视频时,视频将重建/重新加载。
当我滚动时,如何阻止视频播放器(在 ListView 中)被重建?
抱歉冗长的代码示例..我不知道如何进一步压缩它
任何帮助都会很棒!谢谢
import 'package:flutter/material.dart';
import '../../widgets/video/chewie_video.dart';
import 'package:video_player/video_player.dart';
class TestPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: ListView(
children: <Widget>[
Container(height: 1000),
Center(
child: ChewieVideo(
videoPlayerController:
VideoPlayerController.asset('assets/video.mp4'),
),
),
Container(height: 1000),
],
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
import 'package:chewie/chewie.dart';
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
class ChewieVideo extends StatefulWidget {
final VideoPlayerController videoPlayerController;
final bool looping;
ChewieVideo({
@required this.videoPlayerController,
this.looping,
Key key,
}) : super(key: key);
@override
_ChewieVideoState createState() => _ChewieVideoState(); …Run Code Online (Sandbox Code Playgroud) 我试图找到一种在输入TextFormField.
不久前我找到了一种方法来执行此操作,但现在无论我在 Google 上还是在 StackOverflow 上搜索什么都找不到。
基本上,我希望把从文本框显示的文本000011112222333来0000 1111 2222 3333
我猜我需要RegExp在 a 的onChanged函数中使用一些检查TextFormField并使用它来更改TextEditingController's.text
有谁知道我需要做什么才能在我的 Flutter 网站加载后自动播放我的视频?
到目前为止,我唯一管理的就是如果我手动刷新页面,让它们播放/循环。
我确定这很简单,但是在完全没有编码的 3 个月之后,我有点生疏了......
目前我正在调用_videoPlayerController.play()内部FutureBuilder
class VideoWithChild extends StatefulWidget {
final String videoSource;
final FractionalOffset alignment;
final TextAlign textAlign;
final Widget child;
const VideoWithChild(
{Key key, this.videoSource, this.alignment, this.textAlign, this.child})
: super(key: key);
@override
_VideoWithChildState createState() =>
_VideoWithChildState(videoSource, alignment, textAlign, child);
}
class _VideoWithChildState extends State<VideoWithChild> {
final String videoSource;
final TextAlign textAlign;
final Widget child;
final FractionalOffset alignment;
VideoPlayerController _videoPlayerController;
Future<void> _initializeVideoPlayerFuture;
VoidCallback listener;
_VideoWithChildState(
this.videoSource, this.alignment, this.textAlign, this.child);
@override
void initState() { …Run Code Online (Sandbox Code Playgroud) 如何在创建用户帐户的同时设置用户的显示名称?
我正在使用 createUserWithEmailAndPassword 方法并尝试从同一表单中的 3 个不同 TextFormFields 获取信息。
下面是我正在尝试做的一个非常简单的例子......希望有人能够帮助......
谢谢
这是我的注册方法:
import 'package:firebase_auth/firebase_auth.dart';
class AuthService {
FirebaseAuth auth = FirebaseAuth.instance;
//Create user with email and password (+ displayName)
signUp({String email, String password, String name}) async {
await FirebaseAuth.instance
.createUserWithEmailAndPassword(email: email, password: password);
// I'd like to create/update the new user's displayName here, using the String value (name) being passed into this function.
}
}
Run Code Online (Sandbox Code Playgroud)
这是数据来自何处的示例:
class SignUpForm extends StatelessWidget {
final GlobalKey<FormState> _formKey = GlobalKey();
String name;
String email;
String …Run Code Online (Sandbox Code Playgroud)