Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

StringScanner.scan will stack overflow #14

Open
Nealyang opened this issue Jan 30, 2019 · 2 comments
Open

StringScanner.scan will stack overflow #14

Nealyang opened this issue Jan 30, 2019 · 2 comments

Comments

@Nealyang
Copy link

here is my code

class _MyHomePageState extends State<MyHomePage> {
  StringScanner _scanner = StringScanner(testStr);
  @override
  Widget build(BuildContext context) {
    print('$_scanner');
    print('${_scanner.scan(RegExp(r'/\*(.|\n)*\*/'))}');
    return Container(
      child: Text('test'),
    );
  }
}

It works great on the emulator, but when I package the release version, it will cause a stack overflow.

Complete code here:Github code

and I build release apk

apk

img

@zoechi
Copy link

zoechi commented Jan 30, 2019

What makes you think the code posted above causes the stack overflow?

What value is passed to testStr when the exception happens?

@Nealyang
Copy link
Author

Nealyang commented Jan 30, 2019

What makes you think the code posted above causes the stack overflow?

What value is passed to testStr when the exception happens?

I made one of the simplest projects. In my project, only this line of code, deleted this line of code, it is normal.

The value of this string may be a bit long

const testStr = '''
/**
 * Created with Android Studio.
 * User: 一晟
 * Date: 2018/11/22
 * Time: 上午12:03
 * email: [email protected]
 * tartget: FlatButton 的示例
 */
import 'dart:math';
import 'package:flutter/material.dart';

// FlatButton 默认按钮的实例
// isDisabled:是否是禁用,isDisabled 默认为true
class FlatButtonDefault extends StatelessWidget {
  final bool isDisabled;

  const FlatButtonDefault([ this.isDisabled = true])
      : assert(isDisabled != null),
        super();

  @override
  Widget build(BuildContext context) {
    return FlatButton(
      // 文本内容
        child: const Text('默认按钮', semanticsLabel: 'FLAT BUTTON 1'),
        onPressed: isDisabled ? () {} : null);
  }
}


// FlatButton.icon 默认按钮的实例
// * Create a text button from a pair of widgets that serve as the button's icon and label
// * isDisabled:是否是禁用
class FlatButtonIconDefault extends StatelessWidget {
  final bool isDisabled;
  final IconData icon;

  const FlatButtonIconDefault(
      [ this.isDisabled = true,  this.icon = Icons.add_circle])
      : super();

  Color _randomColor() {
    var red = Random.secure().nextInt(255);
    var greed = Random.secure().nextInt(255);
    var blue = Random.secure().nextInt(255);
    return Color.fromARGB(255, red, greed, blue);
  }

  @override
  Widget build(BuildContext context) {
    return FlatButton.icon(
      // 文本内容
        icon: Icon(icon, size: 25.0, color: _randomColor()),
        label: Text('默认按钮', semanticsLabel: 'FLAT BUTTON 2'),
        onPressed: isDisabled
            ? () {
          //_showMessage('点击了 FLAT BUTTON ', context);
        }
            : null);
  }
}


// FlatButton 自定义的实例

class FlatButtonCustom extends StatelessWidget {
  final String txt;
  final Color color;
  final ShapeBorder shape;
  final VoidCallback onPressed;

  const FlatButtonCustom([
     this.txt = '自定义按钮',
     this.color = Colors.blueAccent,
     this.shape,
     this.onPressed
  ]) :super();

  @override
  Widget build(BuildContext context) {
    final _onPressed = onPressed;
    return FlatButton(
      // 文本内容
        child: Text(txt, semanticsLabel: 'FLAT BUTTON 2'),
        // 按钮颜色
        color: color,
        // 按钮亮度
        colorBrightness: Brightness.dark,
        // 高亮时的背景色
        //highlightColor: Colors.yellow,
        // 失效时的背景色
        disabledColor: Colors.grey,
        // 该按钮上的文字颜色,但是前提是不设置字体自身的颜色时才会起作用
        textColor: Colors.white,
        // 按钮失效时的文字颜色,同样的不能使用文本自己的样式或者颜色时才会起作用
        disabledTextColor: Colors.grey,
        // 按钮主题,主要用于与ButtonTheme和ButtonThemeData一起使用来定义按钮的基色,RaisedButton,FlatButton,OutlineButton,它们是基于环境ButtonTheme配置的
        //ButtonTextTheme.accent,使用模版颜色的;ButtonTextTheme.normal,按钮文本是黑色或白色取决于。ThemeData.brightness;ButtonTextTheme.primary,按钮文本基于。ThemeData.primaryColor.
        textTheme: ButtonTextTheme.normal,
        // 按钮内部,墨汁飞溅的颜色,点击按钮时的渐变背景色,当你不设置高亮背景时才会看的更清楚
        splashColor: Colors.deepPurple,
        // 抗锯齿能力,抗锯齿等级依次递增,none(默认),hardEdge,antiAliasWithSaveLayer,antiAlias
        clipBehavior: Clip.antiAlias,
        padding: new EdgeInsets.only(
            bottom: 5.0, top: 5.0, left: 30.0, right: 30.0),
        shape: (shape is ShapeBorder) ? shape : new Border.all(
          // 设置边框样式
          color: Colors.grey,
          width: 2.0,
          style: BorderStyle.solid,
        ),
        // FlatButton 的点击事件
        onPressed: () {
          // Perform some action
          if (_onPressed is VoidCallback) {
            _onPressed();
          }
        },
        // 改变高亮颜色回掉函数,一个按钮会触发两次,按下后改变时触发一次,松手后恢复原始颜色触发一次
        // 参数 bool,按下后true,恢复false
        onHighlightChanged: (isClick) {
          print(isClick);
        }
    );
  }
}


''';

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants