বিড়বিড়: অ্যাপবারের উচ্চতা নির্ধারণ করা


105

আমি কীভাবে সহজভাবে AppBarফ্লুরগুলিতে উচ্চতা নির্ধারণ করতে পারি ?

বারের শিরোনামটি উল্লম্বভাবে কেন্দ্রে থাকা উচিত (এতে AppBar)।


@ মানস এটি AppBar'সেটিং' নয়, উচ্চতা 'পাওয়ার' বিষয়ে ।
বুরা একুকলু

4
আপনি কি এই একবার দেখেছেন ? আপনি একটি অ্যাপবার হিসাবে আপনার নিজের উইজেট তৈরি করতে এবং এর উচ্চতা নির্ধারণ করতে পারেন।
বোস্ট্রট

পছন্দ করুন আমার উত্তরটি (আশাবাদী) আরও ভাল সহায়তার জন্য দেখুন
ম্যানস

উত্তর:


196

আপনি পছন্দসই আকার ব্যবহার করতে পারেন :

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Example',
      home: Scaffold(
        appBar: PreferredSize(
          preferredSize: Size.fromHeight(50.0), // here the desired height
          child: AppBar(
            // ...
          )
        ),
        body: // ...
      )
    );
  }
}

4
এটি অ্যাপবারের আকার বাড়িয়ে তোলে তবে পাঠ্যটিকে কেন্দ্র করে না।
ডানকান জোনস

4
আপনি centerTitleএটি কেন্দ্র করতে সম্পত্তি ব্যবহার করতে পারেন ।
CopsOnRoad

11
@ কপসঅনরোড এটি আনুভূমিকভাবে কেন্দ্র করে তবে এটি উল্লম্বভাবে কেন্দ্র করে না।
গিরালদী

4
@ জিরাল্ডি আপনি সোর্স ফাইল পরিবর্তন না করে বা আপনার কাস্টম তৈরি না করে সত্যই এটি করতে পারবেন নাAppBar
CopsOnRoad

4
@ কপসঅনআরওড আমি জানি, কিন্তু আমি কেবল ওপি কী চাইছে তা নির্দেশ করছিলাম।
গিরালদী

43

আপনি এটি ব্যবহার করতে পারেন PreferredSizeএবং এর flexibleSpaceজন্য:

appBar: PreferredSize(
  preferredSize: Size.fromHeight(100.0),
  child: AppBar(
    automaticallyImplyLeading: false, // hides leading widget
    flexibleSpace: SomeWidget(),
  )
),

এই ভাবে আপনি রাখতে পারবেন না elevationএর AppBarতার ছায়া প্রোফাইল রাখার জন্য এবং কাস্টম উচ্চতা, যা কি আমি শুধু খুঁজছেন ছিল আছে। SomeWidgetযদিও আপনাকে স্পেসিং সেট করতে হবে ।


এই উত্তর গ্রহণ করা উচিত! আপনাকে অনেক ধন্যবাদ.
হাজাআ

14

এটি লেখার সময়, আমি সম্পর্কে অবগত ছিলাম না PreferredSize। এটি অর্জনের জন্য সিনের উত্তর আরও ভাল।

আপনি কাস্টম উচ্চতা দিয়ে নিজের কাস্টম উইজেট তৈরি করতে পারেন:

import "package:flutter/material.dart";

class Page extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Column(children : <Widget>[new CustomAppBar("Custom App Bar"), new Container()],);
  }
}


class CustomAppBar extends StatelessWidget {

  final String title;
  final double barHeight = 50.0; // change this for different heights 

  CustomAppBar(this.title);

  @override
  Widget build(BuildContext context) {
    final double statusbarHeight = MediaQuery
        .of(context)
        .padding
        .top;

    return new Container(
      padding: new EdgeInsets.only(top: statusbarHeight),
      height: statusbarHeight + barHeight,
      child: new Center(
        child: new Text(
          title,
          style: new TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold),
        ),
      ),
    );
  }
}

9

@ সিনের উত্তর ছাড়াও, আপনি এর মতো শ্রেণি সংজ্ঞায়িত করতে পারেন

class MyAppBar extends AppBar with PreferredSizeWidget {
  @override
  get preferredSize => Size.fromHeight(50);

  MyAppBar({Key key, Widget title}) : super(
    key: key,
    title: title,
    // maybe other AppBar properties
  );
}

বা এই ভাবে

class MyAppBar extends PreferredSize {
  MyAppBar({Key key, Widget title}) : super(
    key: key,
    preferredSize: Size.fromHeight(50),
    child: AppBar(
      title: title,
      // maybe other AppBar properties
    ),
  );
}

এবং তারপরে এটি স্ট্যান্ডার্ড একের পরিবর্তে ব্যবহার করুন


4

সিনের উত্তর দুর্দান্ত, তবে এটিতে একটি জিনিস ভুল আছে।

PreferredSizeউইজেট, স্ট্যাটাস বার হিসাববিদ্যা ছাড়াই স্ক্রীনের উপরের অংশে অবিলম্বে শুরু হবে যাতে তার উচ্চতার কিছু স্ট্যাটাস বার উচ্চতা দ্বারা ছায়াবৃত্ত করা হবে না। এটি পার্শ্ব notches জন্য অ্যাকাউন্ট।

সমাধান : preferredSizeএকটি এর সাথে সন্তানের আবরণSafeArea

appBar: PreferredSize(
  //Here is the preferred height.
  preferredSize: Size.fromHeight(50.0),
  child: SafeArea(
    child: AppBar(
      flexibleSpace: ...
    ),
  ),
),

আপনি যদি নমনীয় স্পেস সম্পত্তিটি ব্যবহার করতে না চান, তবে সেই সমস্ত কিছুর দরকার নেই, কারণ উইলের অন্যান্য বৈশিষ্ট্যগুলি AppBarস্থিতি দণ্ডের জন্য স্বয়ংক্রিয়ভাবে অ্যাকাউন্ট হয়ে যাবে।


তবে SafeAreaস্ট্যাটাস বারের উচ্চতা হ্রাস করতে হবে, তবুও আপনি এটি আবার যুক্ত করেছেন MediaQuery.of(context).padding.top? আমি মনে করি SafeFrea এখানে প্রয়োজন হয় না।
রাইড

@Ryde SafeAreaএটি গুরুত্বপূর্ণ যাতে অ্যাপ বারটি স্ট্যাটাস বারের সাথে ওভারল্যাপ না হয় তবে MediaQuery.of(context).padding.topআসলে এটির প্রয়োজন নেই। আমি উত্তর সম্পাদনা করেছি, ধন্যবাদ।
TN888

-10

আপনি যদি ভিজ্যুয়াল কোডটিতে থাকেন তবে অ্যাপবার ফাংশনে Ctrl + ক্লিক করুন।

Widget demoPage() {
  AppBar appBar = AppBar(
    title: Text('Demo'),
  );
  return Scaffold(
    appBar: appBar,
    body: /*
    page body
    */,
  );
}

এবং এই টুকরা সম্পাদনা করুন।

app_bar.dart will open and you can find 
    preferredSize = new Size.fromHeight(kToolbarHeight + (bottom?.preferredSize?.height ?? 0.0)),

উচ্চতার পার্থক্য!

নমুনা চিত্র

নমুনা চিত্র


4
এটি তিনি যা চেয়েছিলেন তা নয়। তিনি শিরোনামটি উল্লম্বভাবে কেন্দ্রীভূত হতে চান
রামি রোসলেট

কেন্দ্রশালা: সত্য; এটা করতে ব্যবহার করা যেতে পারে।
goops 17

উল্লম্ব কেন্দ্র, অনুভূমিক নয়
রামি রোসলেট

সুতরাং এটি নতুন উচ্চতা পড়েন না। আমি মনে করি না যে এ্যাপ_বার.ডার্ট এর মতো উত্স ফাইলটি পরিবর্তন করার জন্য এটি ভাল ধারণা হবে।
goops 17

6
ফ্রেমওয়ার্কের উত্সগুলি সম্পাদনা করা খুব খারাপ ধারণা। যদি আপনি ফ্রেমওয়ার্কটি আপডেট করেন তবে এটি আপনার অ্যাপ্লিকেশনটিকে ভেঙে দেবে।
কনস্ট্যান্টিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.