Sobes.tech
Middle+

Flutter барои таҳияи барномаҳои мизи корӣ кадом имкониятҳои мутобиқатро пешниҳод мекунад?

sobes.tech AI

Ҷавоб аз AI

Барои тарҳи мутобиқ дар десктоп, Flutter имкониятҳои зеринро пешниҳод мекунад:

  1. LayoutBuilder: Имкон медиҳад, ки гуногун widgetҳоро вобаста ба андозаи ҳозираи widget-и падар созед.

    // Нуқтаи намунаи LayoutBuilder
    LayoutBuilder(
      builder: (BuildContext context, BoxConstraints constraints) {
        if (constraints.maxWidth > 600) {
          return Center(child: Text('Экран калон'));
        } else {
          return Center(child: Text('Экран хурд'));
        }
      },
    )
    
  2. MediaQuery: Дастрасӣ ба маълумот дар бораи андозаи экран ва самтгирии дастгоҳ барои сохтани тарҳҳои мутобиқ.

    // Нуқтаи намунаи MediaQuery
    double screenWidth = MediaQuery.of(context).size.width;
    if (screenWidth > 800) {
      // Тарҳ барои экранҳои васеъ
    } else {
      // Тарҳ барои экранҳои танг
    }
    
  3. Виджетҳо барои тарҳи мутобиқ: Flutter пешниҳод мекунад виджетҳое, ки табиӣан мутобиқанд, масалан ListView, GridView, CustomScrollView, ExpansionTile ва ғайра.

    // Нуқтаи намунаи GridView бо танзимоти мутобиқ
    GridView.count(
      crossAxisCount: (MediaQuery.of(context).size.width / 150).floor(),
      children: List.generate(20, (index) {
        return Card(child: Center(child: Text('Item $index')));
      }),
    )
    
  4. Flexible ва Expanded: Барои сохтани тарҳҳои мутобиқ дар дохили Row ва Column, ки имкон медиҳанд виджетҳо ҷойи дастрасро нисбатан ё бо андозаи муайян гиранд.

    // Нуқтаи намунаи Flexible ва Expanded
    Row(
      children: <Widget>[
        Expanded(
          flex: 2, // 2/3 ҷойро мегирад
          child: Container(color: Colors.red),
        ),
        Flexible(
          flex: 1, // 1/3 ҷойро мегирад (аммо на камтар аз minWidth)
          child: Container(color: Colors.blue),
        ),
      ],
    )
    
  5. Компонентҳои мутобиқ Material Design: Виджетҳои Material Design дар Flutter аксар вақт дорои мутобиқати дарунсохт барои шаклҳои гуногун мебошанд.

    // Нуқтаи намунаи Drawer барои навигатсия
    Scaffold(
      appBar: AppBar(title: Text('Барнома')),
      drawer: Drawer(
        child: ListView(
          children: const <Widget>[
            DrawerHeader(
              decoration: BoxDecoration(
                color: Colors.blue,
              ),
              child: Text('Меню'),
            ),
            ListTile(
              title: Text('Ҷойи 1'),
            ),
          ],
        ),
      ),
      body: Center(child: Text('Мазмун')),
    )
    
  6. Breakpoints: Тавзеъ кардани нуқтаҳои қатъ (breakpoints) барои гузаштан байни тарҳҳои гуногун дар асоси паҳнои экран. Ин аксар вақт бо истифода аз MediaQuery ё LayoutBuilder иҷро мешавад.

    // Нуқтаи намунаи истифодаи breakpoints
    if (MediaQuery.of(context).size.width < 600) {
      // Тарҳи мобилӣ
    } else if (MediaQuery.of(context).size.width < 1200) {
      // Тарҳи планшет
    } else {
      // Тарҳи десктоп
    }
    
  7. Танзимоти рафтори скроллинг: Имкон медиҳад, ки рафтори скроллингро барои десктоп (масалан, дастгирии чархии муш) танзим кунед.

    // Намунаи танзимоти ScrollBehavior
    class MyCustomScrollBehavior extends ScrollBehavior {
      @override
      Set<PointerDeviceKind> get dragDevices => {
        PointerDeviceKind.touch,
        PointerDeviceKind.mouse,
      };
    }
    

    Истифода:

    // Истифода дар ListView
    ScrollConfiguration(
      behavior: MyCustomScrollBehavior(),
      child: ListView(...),
    )
    

Ин имкониятҳо имкон медиҳанд, ки базаи коди ягона барои барномаҳои десктопӣ эҷод шавад, ки ба андозаи гуногуни тирезаҳо ва дастгоҳҳо мутобиқ мешавад.