Как мне обрезать виджет или вырезать квадратную часть виджета этого определенного размера? - PullRequest
0 голосов
/ 24 марта 2019

Я хочу обрезать виджет CameraPreview, чтобы получить только точный размер и позицию , где я хочу его обрезать.

В настоящее время я могу обрезать его, используяClipRect, но я получаю эту черную область вокруг обрезанного виджета, которую я хочу удалить (см. Мою замену для хорошего рисунка ниже)

Допустим, у нас есть такой виджет

 --------------                       
|88888888888888|                               
|88888888888888|                   
|88888888888888|                     
|88888888888888|                      
|88888888888888|                     
|88888888888888|                     
 --------------  

Мне нужно обрезать виджет, (не клип)

 --------------                       
|              |                               
|              |                    
|         888  |                      -----
|         888  |                     | 888 | 
|         888  |                     | 888 | 
|              |                     | 888 |
 --------------                       -----
     CLIPPING                        CROPPING

Может кто-нибудь помочь мне обрезать виджет?

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Неважно, мне удалось решить это самостоятельно, Мне казалось, что флаттерная структура работает таинственными способами, пока я не понял это

return Container( // just a parent
      child: Align( // important
        alignment: Alignment.center,
        child: Container( // just a parent
          width: some_width,  
          height: some_height,  
          child: SizedBox(
            width: width,  // final width of cropped portion
            height: width,  // final height of cropped portion
            child: OverflowBox(
              alignment: Alignment(-1,-1), // gives you top left portion of the size above, (1,1) gives bottom right, right direction is positive x, downward direction is positive y, see about Alignment on flutter docs for more details 
              maxWidth: double.infinity,
              maxHeight: double.infinity,
              child: Container(
                width: width,
                height: width,
                child: ClipRect(
                  clipper: RectClipper(i, width / 4),// this is a custom clipper i made of type CustomClipper<Rect>
                  child: CameraPreview(controller),
                ),
              ),
            ),
          ),
        ),
      ),
    );
0 голосов
/ 24 марта 2019

Попробуйте это

final Size size = controller.value.size;
return ClipRect(
  child: OverflowBox(
    maxWidth: double.infinity,
    maxHeight: double.infinity,
    alignment: Alignment.center,
    child: FittedBox(
      fit: BoxFit.cover,
      alignment: Alignment.center,
      child: new Container(
        width: size.width,
        height: size.height,
        child: CameraPreview(controller)
      )
    )
  )
);
...