小编Jan*_*Jan的帖子

是否可以扩展 StatefulWidget,在其构建方法上提供额外的参数?

我想创建一个像这样的 BaseScreen Widget 以在我的应用程序中重用:

class BaseScreen extends StatelessWidget {
  final Widget child;

  BaseScreen({this.child});

  @override
  Widget build(BuildContext context) {
    var safePadding = MediaQuery.of(context).padding.top +
        MediaQuery.of(context).padding.bottom;

    return Scaffold(
      body: LayoutBuilder(
        builder: (context, constraint) {
          return SingleChildScrollView(
            child: SafeArea(
              child: ConstrainedBox(
                constraints: BoxConstraints(
                    minHeight: constraint.maxHeight - safePadding),
                child: IntrinsicHeight(
                  child: child,
                ),
              ),
            ),
          );
        },
      ),
    );
  }
}

Run Code Online (Sandbox Code Playgroud)

但我看到的问题是我还想重用此类子级中提供的constraint属性。LayoutBuilder

目前,我需要在子级中创建一个新的 LayoutBuilder,这听起来像是对引擎进行更多处理,以及更多样板代码。

如果我可以以某种方式扩展这个小部件,以便在孩子中我可以拥有这个:

  @override
  Widget build(BuildContext context, BoxConstraints constraints) {
  }
Run Code Online (Sandbox Code Playgroud)

那太好了。我知道 Flutter 也鼓励组合而不是继承,所以如果我能以其他方式解决它,我也会很感激。

谢谢你!

flutter statefulwidget

4
推荐指数
1
解决办法
4589
查看次数

如何从NSUserDefaults初始化时降低高圈复杂度

我有一个对象的初始化器:

-(id)init
{
    self = [super init];
    if (self) {
        if([[NSUserDefaults standardUserDefaults] objectForKey:kTermsAccepted] != nil){
            _termsAccepted = [[NSUserDefaults standardUserDefaults] boolForKey:kTermsAccepted];
        }
        if([[NSUserDefaults standardUserDefaults] objectForKey:kInitialSetupCompleted] != nil){
            _initialSetupCompleted = [[NSUserDefaults standardUserDefaults] boolForKey:kInitialSetupCompleted];
        }
        if([[NSUserDefaults standardUserDefaults] objectForKey:kDashboardMessage] != nil){
            _dashboardMessage = [[NSUserDefaults standardUserDefaults] objectForKey:kDashboardMessage];
        } else{
            _dashboardMessage = [[NSBundle mainBundle] localizedStringForKey:kDMDefaultDashboardMessage value:kDMDefaultDashboardMessage table:nil];
        }
        //50 other if statements
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

什么是更好的方法这样做,所以我在进行OCLint分析时没有得到这些警告?

谢谢!

optimization static-analysis lint objective-c oclint

3
推荐指数
1
解决办法
99
查看次数

如何在 Swift 中遵守 Strideable 协议?

我正在尝试从 For 循环内的数组中删除项目。为此,我按照此处的建议向后循环,如下所示:

for (index, bullet:Bullet) in stride(from: bullets!.count - 1, through: 0, by: -1) {
    if(currentTime - bullet.life! > bullet.maxLife){
        bullet.removeFromParent()
        bullets?.removeAtIndex(index)
    }
}
Run Code Online (Sandbox Code Playgroud)

但我收到错误

Type '($T12, Bullet)' does not conform to protocol 'Strideable'
Run Code Online (Sandbox Code Playgroud)

更新

这是子弹的类。这是一个 Cocos2D 应用程序,因此是 CCDrawNode 类型。

import Foundation

  class Bullet: CCDrawNode {
  var speed:CGPoint?
  var maxSpeed:CGFloat?
  var angle:CGFloat?
  var life:CGFloat?
  var maxLife:CGFloat = 0.5

  init(angle: CGFloat){
    super.init()
    self.drawDot(ccp(0,0), radius: 2, color: CCColor.whiteColor());

    self.contentSize = CGSize(width: 4, height: 4)
    self.angle = angle
    maxSpeed = …
Run Code Online (Sandbox Code Playgroud)

xcode protocols ios swift

2
推荐指数
1
解决办法
4393
查看次数

'CLLocationManager'没有可见的@interface声明选择器'requestAlwaysAuthorization'

我们正在制作一个与iOS 8兼容的应用程序,但与此同时,我们的一些开发人员还没有Xcode 6,因此他们在尝试调用时遇到此错误

[self.locationManager requestAlwaysAuthorization];
Run Code Online (Sandbox Code Playgroud)

即使它在if里面

if(floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_7_1) {
    [self.locationManager requestAlwaysAuthorization];
}
Run Code Online (Sandbox Code Playgroud)

我们怎么解决这个问题才能在Xcode 5上编译?

objective-c cllocationmanager ios ios8

1
推荐指数
1
解决办法
2687
查看次数