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

В дополнение к нарушению первой нормальной формы из-за повторяющейся группы значений, хранящихся в одном столбце, в списках, разделенных запятыми, есть много других более практических проблем:

  • Невозможно гарантировать, что каждое значение является правильным типом данных: невозможно предотвратить 1,2,3, banana, 5
  • Невозможно использовать ограничения внешнего ключа привязать значения к таблице поиска; нет возможности обеспечить ссылочную целостность.
  • Невозможно обеспечить уникальность: невозможно предотвратить 1,2,3,3,3,5
  • Can 't удалить значение из списка, не извлекая весь список.
  • Не удается сохранить список дольше, чем в столбце строки.
  • Трудно найти все объекты с заданное значение в списке; вы должны использовать неэффективное сканирование таблицы. Возможно, придется прибегать к регулярным выражениям, например, в MySQL: idlist REGEXP '[[:<:]]2[[:>:]]' *
  • Жестко подсчитывать элементы в списке или выполнять другие агрегированные запросы.
  • Трудно присоединиться к значениям к справочной таблице, к которой они ссылаются.
  • Жесткий выбор списка в отсортированном порядке.
  • Сохранение целых чисел в виде строк занимает в два раза больше места, чем сохранение двоичных целых чисел. Не говоря уже о пространстве, взятом запятыми.

Чтобы решить эти проблемы, вам нужно написать тонны кода приложения, заново изобрести функциональные возможности, которые СУБД уже обеспечивает гораздо более эффективно .

Списки, разделенные запятыми, настолько ошибочны, что я сделал это первой главой в моей книге: SQL Antipatterns: избегайте ошибок программирования баз данных .

Бывают случаи, когда вам нужно использовать денормализацию, но, поскольку @OMG Ponies упоминает , это исключения. Любая нереляционная «оптимизация» выгодна для одного типа запросов за счет других видов использования данных, поэтому убедитесь, что знаете, какие из ваших запросов нужно обрабатывать так специально, что они заслуживают денормализации.


* MySQL 8.0 больше не поддерживает этот синтаксис выражения слова-границы.

0
задан cipli onat 24 March 2019 в 22:07
поделиться

2 ответа

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

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)
      )
    )
  )
);
0
ответ дан mirkancal 24 March 2019 в 22:07
поделиться

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

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
ответ дан Prerak Mann 24 March 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: