@bacode đoạn cho mọi trường hợp thì kiểu, bạn cứ chia như bình thường theo thứ tự bạn muốn. Nhưng sẽ xảy ra trường hợp chia xong dư ra vài bài. thì xem số bài còn dư này bé hơn hay lớn hơn k thì xử lý tương ứng. Tại sao lại so với k? Đơn giản vì một slide sẽ có tối đa k bài. Nên nếu số bài dư mà lớn hơn k thì sẽ phải chia số bài dư vào 2 slide. Còn bé hơn k thì tống hết vào 1 slide luôn là xong.
@NgHoang đoạn dưới mình chưa hiểu n với k lắm.
Bạn muốn chia ra slide 1 thì 1 bài, slide 2 thì 2 bài, slide 3 thì 3 bài, ..., slide thứ k thì có k bài. Suy ra trong một cụm k slide liên tiếp thì có tổng cộng
n
∗
(
n
+
1
)
2
2
n∗(n+1)
bài.
Cảm ơn anh. Nâng cao hơn 1 chút thì theo như những gì e tìm hiểu thì một đoạn trong word sẽ được biểu diễn trong thẻ <w:p></w:p>., bên trong sẽ có chứa các thẻ <w:r></w:r>. Vậy thì mình có cách nào để truy cập vào từng thẻ <w:r> k ạ
@bacode thư viện có sẵn thì mình không biết, bạn thử Google xem. Còn ý tưởng thì bạn có thể làm theo hướng này:
Mảng của bạn có n bài.
Bạn muốn chia ra slide 1 thì 1 bài, slide 2 thì 2 bài, slide 3 thì 3 bài. Suy ra trong một cụm 3 slide liên tiếp thì có tổng cộng 6 bài.
Bạn lấy n chia cho 6 sẽ ra số cụm 3 bài liên tiếp là:
Chia hết thì số slide là: [6n]∗3 (kí hiệu [6n] là ám chỉ lấy phần nguyên của phép chia 6n)
Chia dư 1 thì số slide là: [6n]∗3+1 (vì dư 1 bài cuối sẽ cần 1 slide nữa cho bài này)
Chia dư 2 thì số slide là: [6n]∗3+1+1 (Cần thêm 1 + 1 = 2 slide. Vì dư 2 bài, nhưng slide tiếp theo sau cụm 6n∗3 slide kia chỉ chứa được 1 bài, vẫn còn bài thứ 2 phải nhét vào slide tiếp nữa). Bạn cũng có thể quy định trường hợp này thì sẽ nhét chung vào 1 slide thay vì chia đơn ra thành 2 slide.
....
Cứ thế xét các trường hợp số dư thôi. Tất nhiên cách này có hạn chế là nếu bạn muốn slide 1 bài rồi tới slide 2 bài rồi 3 bài rồi 4 bài ... thì xét trường hợp sẽ rất cực.
Ví dụ trên cho bạn dễ hiểu, để đơn giản hơn trong mọi trường hợp thì bạn có thể dùng cách dưới:
mảng của bạn có n bài
Bạn muốn chia ra slide 1 thì 1 bài, slide 2 thì 2 bài, slide 3 thì 3 bài, ..., slide thứ k thì có k bài. Suy ra trong một cụm k slide liên tiếp thì có tổng cộng 2k∗(k+1) bài.
Và trong trường hợp trên thì một slide bất kì sẽ chứa nhiều nhất là k bài.
Bạn vẫn lấy n chia cho 2k∗(k+1), nhưng lần này chỉ xét 2 trường hợp:
Nếu số dư của phép chia trên mà bé hơn k thì bạn nhét hết chúng vào 1 slide luôn. Nên sẽ có ([n:2k∗(k+1)]∗k)+1 slide. (kí hiệu [n:2k∗(k+1)] là ám chỉ lấy phần nguyên của phép chia n:2k∗(k+1))
Nếu số dư của phép chia trên (kí hiệu là là SD) mà lớn hơn k thì phần dư bạn chia ra thành 2 slide, slide đầu sẽ chứa k bài trong phần dư, phần còn lại là (SD - k) bài thì nhét nốt vào 1 slide nữa. Vậy sẽ có ([n:2k∗(k+1)]∗k)+2 slide.
Cách này có thể áp dụng trong mọi trường hợp của k vì ta chỉ cần xét 2 trường hợp con thôi. Và nếu số bài của bạn nhiều thì việc nhét không theo thứ tự kia vào cuối cùng thì cũng chả ảnh hưởng lắm đến trải nghiệm người dùng, người ta cũng ít khi kéo xuống dưới cùng lắm.
Bạn đang nhắc đến đoạn nào vậy nhỉ. Vì mình thay source của bạn vào source của mình nó vẫn chạy ngon lành mà
import'package:flutter/material.dart';voidmain(){runApp(MyApp());}classMyAppextendsStatelessWidget{@overrideWidgetbuild(BuildContext context){returnMaterialApp(// trong constructor của MyHomePage truyền thêm param myChild
home:MyHomePage(myChild:MyCenterWidget()),);}}classMyHomePageextendsStatefulWidget{MyHomePage({this.myChild});// thêm dòng nàyfinalWidget myChild;// thêm dòng này@overrideMyHomePageStatecreateState()=>MyHomePageState();}classMyHomePageStateextendsState<MyHomePage>{
int counter =0;@overrideWidgetbuild(BuildContext context){returnScaffold(
body:MyInheritedWidget(
child:MyText(),// Dùng MyText thay cho MyCenterWidget
myData: counter,),
floatingActionButton:FloatingActionButton(
onPressed:(){setState((){
counter++;});},
child:Icon(Icons.add),),);}}classMyCenterWidgetextendsStatelessWidget{@overrideWidgetbuild(BuildContext context){print('2. log build MyCenterWidget');returnCenter(
child:MyText(),);}}classMyTextextendsStatelessWidget{@overrideWidgetbuild(BuildContext context){final counter =MyInheritedWidget.of(context).myData;print('3. log build MyText với counter = $counter');returnText('Tui là widget Text. Data của tui hiện tại là: $counter');}}classMyInheritedWidgetextendsInheritedWidget{MyInheritedWidget({Widget child,this.myData}):super(child: child);final int myData;@override
bool updateShouldNotify(MyInheritedWidget oldWidget){return myData !=
oldWidget
.myData;// nếu data thay đổi thì return true để rebuild các widget con phụ thuộc}staticMyInheritedWidgetof(BuildContext context){return context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>();}}
Mất rất nhìu time để install AS, flutter, dart trên macbook. Cài đặt device màn hình ảo cho phone. Chỉ định PATH cho flutter SDK path... cuối cùng run main.dart mẫu ra thông báo lỗi này. Hic!
Bạn cho hỏi thông báo lỗi này nói gì và cách sửa nó. Tks
@bacode Bạn lấy thứ tự của div slide con ra. nếu thứ tự (ví dụ tính từ 0) chia hết cho 3 thì là 1 bài, chia 3 dư 1 thì là 2 bài, chia 3 dư 2 thì là 3 bài.
THẢO LUẬN
@thangnt À Oke a. Cảm ơn anh rất nhiều
@NgHoang mà cái này mình áp dụng cho kiểu: slide 1: 1 bài, 2: 2 bài, 3: 3 bài. Rồi 4 thì lại 1 bài, 5:2 bài,... thì có đc ko bạn?
@bacode đoạn cho mọi trường hợp thì kiểu, bạn cứ chia như bình thường theo thứ tự bạn muốn. Nhưng sẽ xảy ra trường hợp chia xong dư ra vài bài. thì xem số bài còn dư này bé hơn hay lớn hơn k thì xử lý tương ứng. Tại sao lại so với k? Đơn giản vì một slide sẽ có tối đa k bài. Nên nếu số bài dư mà lớn hơn k thì sẽ phải chia số bài dư vào 2 slide. Còn bé hơn k thì tống hết vào 1 slide luôn là xong.
@bacode mình viết nhầm k với n ở vài chỗ. mình mới sửa lại rồi rồi.
@NgHoang mình chưa hiểu đoạn xử lý trong mọi trường hợp lắm.
Rất đáng để học tập
@NgHoang đoạn dưới mình chưa hiểu n với k lắm. Bạn muốn chia ra slide 1 thì 1 bài, slide 2 thì 2 bài, slide 3 thì 3 bài, ..., slide thứ k thì có k bài. Suy ra trong một cụm k slide liên tiếp thì có tổng cộng n ∗ ( n + 1 ) 2 2 n∗(n+1) bài.
@thanhnam4698 bajn có thể tìm hiểu thư viện này: DocumentFormat.OpenXml.Wordprocessing
Cảm ơn anh. Nâng cao hơn 1 chút thì theo như những gì e tìm hiểu thì một đoạn trong word sẽ được biểu diễn trong thẻ <w:p></w:p>., bên trong sẽ có chứa các thẻ <w:r></w:r>. Vậy thì mình có cách nào để truy cập vào từng thẻ <w:r> k ạ
Bạn mò theo đường dẫn này, để vào file gradle-wrapper.properties sửa con số 5.6.2 thành 6.6 hoặc 6.6.1
Íntall java15 như link bạn cho. Vẫn báo lỗi. Lần này hơi khác 1 chút.
mình góp ý chút : bạn nên để lại link của bài trước và bài sau của mỗi bài học
@bacode thư viện có sẵn thì mình không biết, bạn thử Google xem. Còn ý tưởng thì bạn có thể làm theo hướng này:
Bạn lấy n chia cho 6 sẽ ra số cụm 3 bài liên tiếp là:
Cứ thế xét các trường hợp số dư thôi. Tất nhiên cách này có hạn chế là nếu bạn muốn slide 1 bài rồi tới slide 2 bài rồi 3 bài rồi 4 bài ... thì xét trường hợp sẽ rất cực.
Ví dụ trên cho bạn dễ hiểu, để đơn giản hơn trong mọi trường hợp thì bạn có thể dùng cách dưới:
Bạn vẫn lấy n chia cho 2k∗(k+1), nhưng lần này chỉ xét 2 trường hợp:
Cách này có thể áp dụng trong mọi trường hợp của k vì ta chỉ cần xét 2 trường hợp con thôi. Và nếu số bài của bạn nhiều thì việc nhét không theo thứ tự kia vào cuối cùng thì cũng chả ảnh hưởng lắm đến trải nghiệm người dùng, người ta cũng ít khi kéo xuống dưới cùng lắm.
cài thêm cái JDK này thử bạn: https://www.oracle.com/java/technologies/javase-jdk15-downloads.html
Bạn đang nhắc đến đoạn nào vậy nhỉ. Vì mình thay source của bạn vào source của mình nó vẫn chạy ngon lành mà
@NgHoang làm sao mà biết đc có bnhieu slide con nhỉ? với có thư viện nào hỗ trợ cho việc cútom để tính toán kiểu ý ko b?
Have a good day.
Mất rất nhìu time để install AS, flutter, dart trên macbook. Cài đặt device màn hình ảo cho phone. Chỉ định PATH cho flutter SDK path... cuối cùng run main.dart mẫu ra thông báo lỗi này. Hic!
Bạn cho hỏi thông báo lỗi này nói gì và cách sửa nó. Tks
@bacode Bạn lấy thứ tự của div slide con ra. nếu thứ tự (ví dụ tính từ 0) chia hết cho 3 thì là 1 bài, chia 3 dư 1 thì là 2 bài, chia 3 dư 2 thì là 3 bài.
@NguyenHieu
thanks bạn
Cho mình hỏi, Ở đoạn này mình sẽ đặt như thế này thì nó sẽ sai vì sao???
class MyHomePageState extends State<MyHomePage> { int counter = 0;
@override Widget build(BuildContext context) { return Scaffold( body: MyInheritedWidget( child: MyText(), // Dùng MyText thay cho MyCenterWidget myData: counter, ), floatingActionButton: FloatingActionButton( onPressed: () { setState(() { counter++; }); }, child: Icon(Icons.add), ), ); } }